Mad Pascal

Nie ma róży bez kolców... Miejsce na dyskusję o najmłodszym bracie C64
Wiadomość
Autor
zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Mad Pascal

#1 Post autor: zbyti »

Cześć, zostawiłem tę informację (z grubsza) jako komentarz pod dwoma art. na portalu, ale, że postanowiłem spróbować swoich sił w programowaniu dla Plus/4 to zakładam ten wątek.

Od paru miesięcy Mad Pascal ma podstawowe wsparcie dla C64 a od 2 dni także dla Plus/4.

źródła: https://github.com/tebe6502/Mad-Pascal
dokumetajca: http://mads.atari8.info/doc/pl/index.html

Przykładowy kod @carriona z art: https://c64portal.pl/2020/05/04/program ... re-plus-4/ może wyglądać np. tak:

Kod: Zaznacz cały

var
  COLORRAM    : array [0..0] of byte absolute $0800;
  SCREEN      : array [0..0] of byte absolute $0c00;
  BORDERCOLOR : byte absolute $ff15;
  BGCOLOR     : byte absolute $ff19;

var
  w0i, row    : word;
  b0i, b1i    : byte;

begin
  BORDERCOLOR := 0; BGCOLOR := 0;
  FillByte(@SCREEN, 40 * 25, $a0);

  for b0i := 0 to 7 do begin
    row := 40 * b0i;
    for b1i := 0 to 15 do COLORRAM[row+b1i] := (b0i shl 4) + b1i;
  end;
end.
efekt w załączniku.

Jak zrobię inne sample to będę wrzucał do tego wątku.

Zachęcam do spróbowania swoich sił :]
Załączniki
palette.zip
(461 Bajtów) Pobrany 99 razy

Awatar użytkownika
carrion
Posty: 2329
Rejestracja: 27 lut 2009, 17:38
Kontakt:

Re: Mad Pascal

#2 Post autor: carrion »

@zbyti
fajny pomysł. Chętnie popatrzę jak to wychodzi w Pascalu. I chociaż nie zamierzam w nim programować to dobrze jak będą gdzieś w sieci gotowe przykłady dla tych co Pascala lubią.
Ciekawe ile wspólnych procedur (bibliotek) można wykorzystać wspólnie dla Atari i C+4.

btw: a da się w tym pisać dla C64?
c64portal.pl, retronavigator.com

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Re: Mad Pascal

#3 Post autor: zbyti »

carrion pisze:
12 sty 2021, 18:40
btw: a da się w tym pisać dla C64?
Tak, w takim samym zakresie jak dla Plus/4 (a nawet ciut większym, bo aktualnie dla Plus/4 trzeba napisać parę procedur w modułe SYSTEM, które dla C64 już są) ale tak naprawdę masz mniej więcej to samo jak sobie zrobiłeś w KickC target dla Plus/4 czyli szybki kompilator ale brak bibliotek graficznych i innych specyficznych dla danej platformy. Mi to nie przeszkadza bo i tak zamierzam napisać swoje.

Ogólnie chcę napisać kiedyś engine szachowy, to wtedy wypuszczę to na A8 i Plus/4 bo 6502 jest na tych platformach fajnie taktowany.

Kolorowy hires z Plus/4 (jak coś napiszę) jeżeli chciałbym przenosić na A8 to już chyba tylko opcja gdyby chciało mi się opanować VBXE a na to się nie zanosi.

Porównanie wydajności kompilatorów KickC i Mad Pascal można obadać na Atari za pomocą:

https://github.com/zbyti/a8-mad-pascal-bench-suite

https://github.com/markjfisher/kickc-benchmarks

Awatar użytkownika
rime.
Posty: 156
Rejestracja: 24 sty 2019, 02:52
Grupa: Fancy Rats

Re: Mad Pascal

#4 Post autor: rime. »

Testowałem P65Pas, Pas6502, TRSE a teraz czas na Mad-Pascal. Jako fan języka Pascal (i pochodnych) słyszałem już wcześniej o MP, ale w kontekście kompilatora dla 8 bitowych Atari. Nie wiedziałem, że dodano wsparcie dla C64 i dopiero teraz swoim postem mnie uświadomiłeś. Skompilowałem przed chwilą przykład "pas6502_test" i uzyskałem plik z rozszerzeniem .obx, no i pytanie co dalej, jak uzyskać PRG ?

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Re: Mad Pascal

#5 Post autor: zbyti »

rime. pisze:
12 sty 2021, 22:59
pytanie co dalej, jak uzyskać PRG ?

Kod: Zaznacz cały

#!/bin/bash

mp="$HOME/Programs/MadPascal/mp"
mads="$HOME/Programs/mads/mads"
base="$HOME/Programs/MadPascal/base

if [ -z "$1" ]; then
  echo -e "\nPlease call '$0 <argument>' to run this command!\n"
  exit 1
fi

$mp $1 -t c64 -z 10 -o
name=${1::-4}

if [ -f $name.a65 ]; then
  [ ! -d "output" ] && mkdir output
  mv $name.a65 output/
  $mads output/$name.a65 -x -i:$base -o:output/$name.prg
else
  exit 1
fi

if [ ! -z "$2" ]; then
  x64 output/$name.prg
fi
Gdyby powyższy skrypt nie odpowiedział na Twoje pytanie to napisz jeszcze raz a opiszę to bardziej szczegółowo :]
Ostatnio zmieniony 12 sty 2021, 23:37 przez zbyti, łącznie zmieniany 1 raz.

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Re: Mad Pascal

#6 Post autor: zbyti »

W kontekście Mad Pascala polecam używać z repo ostatnią "zacommitowaną" wersję a nie "stary" oficjalny release 1.6.4.

Ja wszystko piszę na 1.6.5 a dokładnie zawsze pobieram ostatnią wersję z repozytorium.

Awatar użytkownika
rime.
Posty: 156
Rejestracja: 24 sty 2019, 02:52
Grupa: Fancy Rats

Re: Mad Pascal

#7 Post autor: rime. »

Dzięki, pobrałem programy bezpośrednio z repozytorium, teraz wygląda to dobrze. Poniższe zostawiam dla tych którzy też szukają niższego progu wejścia ;-D

Kod: Zaznacz cały

mp pas6502_test.pas -target:c64
mads pas6502_test.a65 -x -i:base -o:pas6502_test.prg

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Re: Mad Pascal

#8 Post autor: zbyti »

rime. pisze:
13 sty 2021, 02:45
Dzięki, pobrałem programy bezpośrednio z repozytorium, teraz wygląda to dobrze. Poniższe zostawiam dla tych którzy też szukają niższego progu wejścia ;-D

Kod: Zaznacz cały

mp pas6502_test.pas -target:c64
mads pas6502_test.a65 -x -i:base -o:pas6502_test.prg
mimo wszystko dałbym:

Kod: Zaznacz cały

mp pas6502_test.pas -t c64 -z 10 -o
bo chyba dla C64 trzeba podać inne miejsce dla programowego stosu niż jest domyślnie dla A8, spojrzę jeszcze do kodu czy target to rozróżnia, ale ja używam flagi "z" i "o".

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Re: Mad Pascal

#9 Post autor: zbyti »

@rime tak, dla C64 i C+4 musisz posłużyć się flagą "z" i określić początek stosu programowego dla MP na stronie zerowej, proponuję 10 (czyli $10).

Awatar użytkownika
Steffan
Posty: 854
Rejestracja: 04 maja 2019, 19:43
Grupa: BooM!

Re: Mad Pascal

#10 Post autor: Steffan »

zbyti pisze:
13 sty 2021, 12:37
@rime tak, dla C64 i C+4 musisz posłużyć się flagą "z" i określić początek stosu programowego dla MP na stronie zerowej, proponuję 10 (czyli $10).
Z tym 10 to pewnie chodzi o $a?
Tak nie bardzo kumam o co chodzi z tym stosem programowym. Jeśli będziemy tam zapisywać "swój" odrębny stos (bo tak to rozumiem) nadpiszemy sobie komórki strony zerowej i będzie zonk. Pewnie coś kręcę, więc mnie popraw.

Steffan
B O O M !
we are the commodore terrorists
-------------------------------------
TEDDY BEER C=64 PARTY [csdb]

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Re: Mad Pascal

#11 Post autor: zbyti »

Steffan pisze:
13 sty 2021, 13:43
Z tym 10 to pewnie chodzi o $a?
Tak nie bardzo kumam o co chodzi z tym stosem programowym. Jeśli będziemy tam zapisywać "swój" odrębny stos (bo tak to rozumiem) nadpiszemy sobie komórki strony zerowej i będzie zonk. Pewnie coś kręcę, więc mnie popraw.
MP od razu zakłada, że podajesz liczbę szesnastkowo, więc pisząc -z 10 chodzi i 16 komórkę na stronie zerowej.

Nie jestem ekspertem od C+4 ale on chyba ma stronę zerową z grubsza podzieloną tak jak C64, czyli $0-$7f zmienne BASIC, nie używamy BASIC, więc możemy nadpisywać, $80-$ff system, do póki nie wyłączymy OS nie ruszamy ;)

Stos programowy jest wykorzystywany przy np. rekurencji, są też na stronie zerowej zmienne pomocnicze MP wykorzystywane przy obliczeniach.

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Re: Mad Pascal

#12 Post autor: zbyti »

OK, zrobiłem PR i jak wejdzie, nie będzie potrzeba dla C64 i C+4 podawać adresu dla stosu jeżeli kogoś zadowolą domyślne ustawienie czyli $10.

https://github.com/tebe6502/Mad-Pascal/pull/12

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

sieve 1899 C64 Vs. C+4 Vs. A8

#13 Post autor: zbyti »

Kod: Zaznacz cały

// Eratosthenes Sieve benchmark 1899

const
 size = 8192;
 iter_max = 10;

var
  flags: array [0..size] of boolean;

  iter: byte;
  ticks: word = 0;

{$ifdef c4p}
  i: word absolute $70;
  k: word absolute $72;
  prime: word absolute $74;
  count: word absolute $76;
  clock1 : byte absolute $a4;
  clock2 : byte absolute $a5;
{$endif}
{$ifdef c64}
  i: word absolute $70;
  k: word absolute $72;
  prime: word absolute $74;
  count: word absolute $76;
  clock1 : byte absolute $a1;
  clock2 : byte absolute $a2;
{$endif}
{$ifdef atari}
  i: word absolute $e0;
  k: word absolute $e2;
  prime: word absolute $e4;
  count: word absolute $e6;
  clock1 : byte absolute $13;
  clock2 : byte absolute $14;
{$endif}

begin

	writeln(iter_max,' ITERATIONS');
	pause; clock2 := 0; clock1 := 0;

	for iter := iter_max-1 downto 0 do begin

		fillchar(flags, sizeof(flags), true);

		count := 0;

		for i:=0 to size do
			if flags[i] then begin

				prime := i*2 + 3;
				k := prime + i;

				while (k <= size) do begin
					flags[k] := false;
					inc(k, prime);
				end;
				inc(count);
			end;
	end;

 ticks := clock2 + (clock1 * 256);

 writeln(ticks, ' TICKS');
 writeln(count, ' PRIMES');

 while true do;

end.

Screenshot_2021-01-17_16-51-06.png
Screenshot_2021-01-17_16-51-06.png (7.35 KiB) Przejrzano 2452 razy
Screenshot_2021-01-17_16-37-22.png
Screenshot_2021-01-17_16-37-22.png (9.71 KiB) Przejrzano 2452 razy
Screenshot_2021-01-17_16-33-43.png
Screenshot_2021-01-17_16-33-43.png (46.09 KiB) Przejrzano 2452 razy

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Mad Pascal - Joystick

#14 Post autor: zbyti »

Kod: Zaznacz cały

const
  JOY_SELECT_1 = %00000010;
  JOY_SELECT_2 = %00000100;

var
  joy      : byte absolute $ff08;
  keyPio   : byte absolute $fd30;

var
  tmp      : byte;

begin
  repeat
    joy := JOY_SELECT_1; keyPio := $ff;
    tmp := joy xor $ff;
    case tmp of
      1  : writeln('UP    = ', tmp);
      2  : writeln('DOWN  = ', tmp);
      4  : writeln('LEFT  = ', tmp);
      8  : writeln('RIGHT = ', tmp);
      64 : writeln('FIRE  = ', tmp);
    end;
    pause(2);
  until false;
end.


zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Mad Pascal - Siege AI

#15 Post autor: zbyti »

Powyższe benchmarki były w PAL. W PAL A8 podbija zegar 1/50 sekundy a podobno C+4 i C64 robią to 1/60 także jak ktoś chce mieć prawidłowe wyniki musi puścić to w NTSC.

---

Czytam właśnie Writing Strategy Games On Your Atari Computer i postanowiłem napisać sobie jaką piaskownicę do testowania pomysłów na AI.

Jak ktoś chce dołączyć do zabawy to może zmodyfikować przykładowe (bardzo proste i głupie) AI pobierając kod z https://github.com/zbyti/siege-ai-playground

Można pograć ale na ten moment zaimplementowane AI nie jest żadnym wyzwaniem dla człowieka. Będę te AI rozwijał w wolnych chwilach.
siege-ai-playground.zip
(3.05 KiB) Pobrany 64 razy

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Re: Sieve

#16 Post autor: zbyti »

zbyti pisze:
13 lut 2021, 20:44
Powyższe benchmarki były w PAL. W PAL A8 podbija zegar 1/50 sekundy a podobno C+4 i C64 robią to 1/60 także jak ktoś chce mieć prawidłowe wyniki musi puścić to w NTSC.
Chociaż może i nie są niepoprawne, te zegary na C64 i C+4 to chodzą w PAL zawsze 60x na sekundę chyba tylko przy wyłączonym ekranie. Przy włączonym wynik wydaje się miarodajny.

Nie ogarniam jeszcze tych różnic.

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Siege AI Playground

#17 Post autor: zbyti »

Generalnie skończyłem piaskownice dla AI i wykonałem boty tak, że już można z nimi pograć, do zera raczej się nie dadzą ograć :] Może w wolnej chwili dopiszę jakieś bardziej wyrafinowane ;)

https://github.com/zbyti/siege-ai-playground

Czy ktoś ma czas sprawdzić czy to działa na prawdziwym C+4? PRG w załączniku jako ZIP.
siege.gif
siege.gif (1.21 MiB) Przejrzano 2237 razy
siege.zip
(1.49 KiB) Pobrany 68 razy

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Siege AI Playground - 4x AI 8x plansze

#18 Post autor: zbyti »

Do poprawy jeszcze sterowanie, bo chyba przy tak szybkiej rozgrywce musi być co ramkę na przerwaniu.

Szkoda, że nikt nie ma ochoty potestować, czy się odpala na C16/C116/C+4 chyba muszę uderzyć na zagraniczne fora.

Jakby ktoś jednak się skusił to WIP jeszcze bez grafiki w załączniku. Teraz rysuję grafę na fontach, a że nie umiem to będzie jak będzie :]

---

Eeeee... nie dodam, bo server twierdzi, że nie ma miejsca nawet na 2KB załącznik.

zbyti
Posty: 191
Rejestracja: 12 sty 2021, 14:26

Mała gra (o) TRON :]

#19 Post autor: zbyti »

Jakby kogoś interesowało programowanie w Mad Pascalu to przykładowa gierka, właśnie skończyłem :)

https://github.com/zbyti/siege-ai-playground

tron.gif
tron.gif (1021.46 KiB) Przejrzano 2159 razy
tron.zip
(2.58 KiB) Pobrany 69 razy

Awatar użytkownika
carrion
Posty: 2329
Rejestracja: 27 lut 2009, 17:38
Kontakt:

Re: Mad Pascal

#20 Post autor: carrion »

Nooo. Bardzo ładnie wyszło. Gratulacje.
Nie zrażaj się że nie ma odpowiedzi bo te wątki o C+4/16/116 to nadal nisza, ja czytam i pewnie w weekend sprawdzę grę na real-sprzęcie.

Czy pisałeś już na Plus4World.com z informacją że powstała nowa gra?
Ja spróbuje i może pokuszę się o jakiś mini filmik na kanale portalu.

Jeszcze raz gratulacje skończenia pierwszego projektu na commodore ;) !
c64portal.pl, retronavigator.com

ODPOWIEDZ