Strona 1 z 4

Mad Pascal

: 12 sty 2021, 14:36
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ł :]

Re: Mad Pascal

: 12 sty 2021, 18:40
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?

Re: Mad Pascal

: 12 sty 2021, 18:50
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

Re: Mad Pascal

: 12 sty 2021, 22:59
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 ?

Re: Mad Pascal

: 12 sty 2021, 23:08
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 :]

Re: Mad Pascal

: 12 sty 2021, 23:18
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.

Re: Mad Pascal

: 13 sty 2021, 02:45
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

Re: Mad Pascal

: 13 sty 2021, 03:03
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".

Re: Mad Pascal

: 13 sty 2021, 12:37
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).

Re: Mad Pascal

: 13 sty 2021, 13:43
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

Re: Mad Pascal

: 13 sty 2021, 13:52
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.

Re: Mad Pascal

: 14 sty 2021, 11:16
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

sieve 1899 C64 Vs. C+4 Vs. A8

: 17 sty 2021, 16:54
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 2481 razy
Screenshot_2021-01-17_16-37-22.png
Screenshot_2021-01-17_16-37-22.png (9.71 KiB) Przejrzano 2481 razy
Screenshot_2021-01-17_16-33-43.png
Screenshot_2021-01-17_16-33-43.png (46.09 KiB) Przejrzano 2481 razy

Mad Pascal - Joystick

: 20 sty 2021, 15:12
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.


Mad Pascal - Siege AI

: 13 lut 2021, 20:44
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 65 razy

Re: Sieve

: 14 lut 2021, 14:59
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.

Siege AI Playground

: 14 lut 2021, 20:10
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 2266 razy
siege.zip
(1.49 KiB) Pobrany 69 razy

Siege AI Playground - 4x AI 8x plansze

: 17 lut 2021, 23:20
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.

Mała gra (o) TRON :]

: 19 lut 2021, 13:00
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 2188 razy
tron.zip
(2.58 KiB) Pobrany 70 razy

Re: Mad Pascal

: 19 lut 2021, 13:05
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 ;) !