Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.
Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.
basakatu:
napisałem pierwszą po latach grę w BASIC-ubasakatu:
wymiękam z numerowaniem linii i pora spróbować czegoś nowego. Na assemblera jestem za cienki, więc mój wybór padł na Action!BYTE RT = 20
PROC MAIN()
CARD A
RT=0
A=0
WHILE RT<100
DO
A=A+1
OD
PRINTF("%U%E",A)
RETURN
program YoshBench;
uses crt, sysutils;
var i: word = 0;
var rt1: PByte;
var rt2: ^byte;
begin
poke(20, 0);
while GetTickCount <= 100 do Inc(i);
WriteLn('GetTickCount: ', i);
i := 0;
poke(20, 0);
while peek(20) <= 100 do Inc(i);
WriteLn('Peek: ', i);
i := 0;
rt1 := pointer(20);
rt1[0] := 0;
while rt1[0] <= 100 do Inc(i);
WriteLn('Pointer 1: ', i);
i := 0;
rt2 := pointer(20);
rt2[0] := 0;
while rt2[0] <= 100 do Inc(i);
WriteLn('Pointer 2: ', i);
ReadKey;
end.
program YoshBench;
uses crt, sysutils;
var i: word = 0;
var rt1: PByte;
var rt2: ^byte;
begin
pause;
poke(20, 0);
while GetTickCount <= 100 do Inc(i);
WriteLn('GetTickCount: ', i);
i := 0;
pause;
poke(20, 0);
while peek(20) <= 100 do Inc(i);
WriteLn('Peek: ', i);
i := 0;
pause;
rt1 := pointer(20);
rt1[0] := 0;
while rt1[0] <= 100 do Inc(i);
WriteLn('Pointer 1: ', i);
i := 0;
pause;
rt2 := pointer(20);
rt2[0] := 0;
while rt2[0] <= 100 do Inc(i);
WriteLn('Pointer 2: ', i);
ReadKey;
end.
var i: cardinal = 0;
WORD 0 .. 65535 2
BYTE RT = 20
PROC MAIN()
CARD A, B, C
A=0
B=0
C=0
RT=0
WHILE RT<100
DO
B=B+1
C=B
C=C+1
B=C
A=A+1
OD
PRINTF("%U%E",A)
RETURN
program YoshBenchPlus;
uses crt;
var i: word = 0;
var a: word = 0;
var b: word = 0;
begin
pause;
poke(20, 0);
while peek(20) <= 100 do begin
Inc(a);
b := a;
Inc(b);
a := b;
Inc(i);
end;
WriteLn('Peek: ', i);
ReadKey;
end.
antrykot:
A skąd wiesz czy w Action! licznik ci się nie pzekręca?antrykot:
No i jeszcze zanim wyciągniesz wniosek że peek jest najszybsze, to wypadało by sprawdzić ten sam spoób dostępu do zegara co w Action!program YoshBenchPlus;
uses crt;
var i: word = 0;
var a: word = 0;
var b: word = 0;
var rt: byte absolute $14;
begin
pause;
poke(20, 0);
while rt <= 100 do begin
Inc(a);
b := a;
Inc(b);
a := b;
Inc(i);
end;
WriteLn('absolute: ', i);
ReadKey;
end.
while rt <= 100 do begin
tdc 2009-02-24 02:27:09:
(...) bo wykazałoby się że np. w którymś języku program jest krótszy o np. 10 znaków, ale co z tego ? (...) Co nam da 10 znaków skoro program działa o niebo szybciej ?unsigned int sum(void) {
register unsigned int s;
register const unsigned char* p;
s = 0;
for (p = rom; p != 0; ++p)
{
s += *p;
};
return s;
}
tooloudtoowide:
nowe/poprawione biblioteki RuntimeAction!: 33239
Effectus: 33944
tooloudtoowide:
Ten kart po prawej stronie bardzo mnie kusił, ale skutecznie zmroziła mnie cena, która łącznie z przesyłką wynosiła prawie 200 USD. Czy może on zawierać jakąś nowszą, nie znaną nam dotychczas wersję? Jest na to bardzo mała szansa, ale być może takie marzenie jest potrzebne – ja wybrałem 200 USD w portfelu (a raczej na karcie kredytowej).tooloudtoowide:
Jeżeli tylko uda mi się napisać lepszą prockę kopiowania obszarów pamięci (czyli podobnie szybką jak w CC/65) to będę mega zadowolony.greblus:
I jeszcze taka opcja (pomysł Kuby Husaka z opcją -turbo w atari800):Yosh:
Końców linii nie trzeba obsługiwać - robi to urządzenie H.Mad Pascal GR8 Board: 7
Action! GR8 Board: 8
program chessboard;
uses crt, graph;
var stop : byte;
rtClock : byte absolute 20;
col1 : byte absolute 709;
col2 : byte absolute 710;
colB : byte absolute 712;
bmpAdr : word absolute 88;
procedure drawBoard;
var i1b, i2b, i3b, x, color, modLine : byte;
p : PByte;
begin
p := pointer(bmpAdr);
modLine := 0;
for i3b := 1 to 8 do begin
for i2b := 1 to 24 do begin
x := 0;
for i1b := 1 to 8 do begin
color := 0;
if (i1b and %1 <> modLine) then color := $ff;
if (color <> 0) then begin
p[x] := color;
p[x + 1] := color;
p[x + 2] := color;
end;
Inc(x, 3);
end;
Inc(p, 40);
end;
if (i3b and %1 = 0) then modLine := 0
else modLine := 1;
end;
end;
begin
InitGraph(8 + 16);
col1 := 1;
col2 := 11;
colB := 12;
rtClock := 0;
drawBoard;
stop := rtClock;
ReadKey;
InitGraph(0);
writeln('Drawing time: ', stop);
ReadKey;
end.
BYTE ch=764 ; ESC = 28
BYTE RTCLOCK=20 ; sys timer
CARD SAVMSC=88 ; screen addr
BYTE col1=709
BYTE col2=710
BYTE colB=712
BYTE stop
PROC drawBoard()
BYTE i1b, i2b, i3b, x, color, modLine
BYTE ARRAY SCREEN
SCREEN=SAVMSC
modLine=0
FOR i3b=1 TO 8
DO
FOR i2b=1 TO 24
DO
x=0
FOR i1b=1 TO 8
DO
color=0
IF (i1b & 1) <> modLine THEN color=255 FI
IF color <> 0 THEN
SCREEN(x)=color
SCREEN(x+1)=color
SCREEN(x+2)=color
FI
x==+3
OD
SCREEN==+40
OD
IF (i3b & 1) = 0 THEN modLine=0
ELSE modLine=1 FI
OD
RETURN
PROC main()
GRAPHICS(8+16)
col1=1
col2=11
colB=12
RTCLOCK=0
drawBoard()
stop=RTCLOCK
WHILE ch<>28 DO OD
ch=0
GRAPHICS(0)
PRINTF("%E %U ticks",stop)
WHILE ch<>28 DO OD
RETURN
p[x]:= color; inc(x);
p[x]:= color; inc(x);
p[x]:= color; inc(x);