1,751

(10 odpowiedzi, napisanych Zloty)

bedziesz tak zalany, ze monitor Ci sie nie przyda

1,752

(38 odpowiedzi, napisanych Programowanie - 8 bit)

Fox masz może jeszcze gdzieś swój program wyliczający sinusa z tych zależności trygonometrycznych ?

wzory redukcyjne sa np. tutaj http://www.wsipnet.pl/oip/msl/cz2/u/wt.html

Da sie w ten sposob przedstawic wszystkie stopnie, tyle ze trzeba na końcu znać wartości dla sinusa i cosinusa dla stopni 0..90

1,753

(38 odpowiedzi, napisanych Programowanie - 8 bit)

chyba mówimy o tym samym zbiorze przykładów wykorzystujących FP, rzeczywiście był tam błąd przy konwersji na ASCII, po poprawce chwyta minusy prawidłowo

dla szeregu potęgowego w/w są pewne odchyły od wartości idealnej, np.

sin(30) = 0.500000001
szereg sin(30) = 0.499674179

sin(37) = 0,6018150231
szereg sin(37) = 0.600888394

szereg wyliczany w krótki sposób sinx = x - x^3/3!

jest to zadowalająca precyzja ?


sinus wg zależności trygonometrycznych, będę musiał poszukać więcej danych na ten temat, może być ciekawiej :)

1,754

(38 odpowiedzi, napisanych Programowanie - 8 bit)

chyba jednak to wydaje się najprostszym rozwiązaniem

sin x=x - x^3/3! + x^5/5! + x^7/7! + ...

1,755

(38 odpowiedzi, napisanych Programowanie - 8 bit)

mam takie pytanko, jak wyliczyć sinusa mając do dyspozycji operacje na liczbach zmiennoprzecinkowych typu dodawanie, odejmowanie, mnożenie, dzielenie, ogólnie mając do dyspozycji operacje z pakietu matematycznego Atari

zaglądałem już do źródeł takiej procedury z BASIC'a, może ktoś zna szybszy sposób czy też może przedstawić całą operację wyliczenia sinusa w postaci jakiegoś wzoru, tylko proszę bez szeregów potęgowych czy funkcji różniczkowych

w pakiecie matematycznym Atari znajdują się takie wartości

; POLYNOMIAL FOR SIN/COS FUNCTIONS (11 COEFFICIENTS)

PLYSIN    .he    3E 16 05 44 49 00 ;  1.6054449E-03  REF BY BASIC SIN/COS ROUTINES
    .he    BE 95 68 38 45 00 ; -9.5683845E-03
    .he    3F 02 68 79 94 16 ;  0.0268799416
    .he    BF 04 92 78 90 80 ; -0.049278908
    .he    3F 07 03 15 20 00 ;  0.0703152
    .he    BF 08 92 29 12 44 ; -0.0892291244
    .he    3F 11 08 40 09 11 ;  0.1108400911
    .he    BF 14 28 31 56 04 ; -0.1428315604
    .he    3F 19 99 98 77 44 ;  0.1999987744
    .he    BF 33 33 33 31 13 ; -0.3333333113
NONE    .he    3F 99 99 99 99 99 ;  0.9999999999   ALMOST EQUAL TO 1.0 (USED FOR ROUNDOFF PROBLEM)

; SIN OF 45 DEG.
SIN45    .he    3F 78 53 98 16 34 ; 0.7853981634

ktoś wie jak to ugryźć, czy to jest potrzebne aby wyliczyć sinus-a, bo Basic używa jakichś swoich predefiniowanych wartości

1,756

(7 odpowiedzi, napisanych Programowanie - 8 bit)

g2f zlicza sobie kolory ktore wystepuja na obrazku i na podstawie czestotliwosci ich wystepowania przyporzadkowuje je do kolejnych rejestrow koloru, tak wiec kolor ktory najczesciej wystepuje bedzie kolorem tla (712), potem kolejno 708, 709 itd.

dla trybu 9 będę musiał zabronić mu liczyć kolory, wtedy będzie ok

1,757

(10 odpowiedzi, napisanych Programowanie - 8 bit)

nosty podaj swoj email, poprzedni email odebralem, ale nie mam obecnie dostepu do tamtego kompa

1,758

(10 odpowiedzi, napisanych Programowanie - 8 bit)

Nosty jeśli dostaniesz potwierdzenie zgonu pana Solo, wyslij swój problem do mnie tbiela[at]poczta.onet.pl

1,759

(37 odpowiedzi, napisanych Software, Gry - 8bit)

żaden z testowanych programow w C i ASM nic nie wyswietlał, wiec test był uczciwy co do ramki

$f2b0 lubię i będę je używał wtedy kiedy będę miał ochotę i żadna drakońska konserwa nie ma tu nic do gadania, w końcu mniejszość się nie liczy

"makra" w rodzaju while, test, switch mają w założeniu ułatwić życie tym którzy nie czują się pewnie w asm, ostatecznie przyspieszyć proces tworzenie kodu

p.s.
Drac030 mam nadzieję że ten kij w Twojej dupie nie siedzi zbyt głęboko, da się to jeszcze operować ?

1,760

(30 odpowiedzi, napisanych Zloty)

atarowcy przybiją gwóźdź do trumny komodorowców ;)

1,761

(37 odpowiedzi, napisanych Software, Gry - 8bit)

wracając do tematu, program w cc65 po optymalizacji, czyli zamiast "int" jest teraz "unsigned int", rezygnacja z wyrzucania na ekran jakichkolwiek tekstow

cc65 (6502):  2453 fps

Action!:  1015 fps

asm (mads):  1009 fps (automatyczne generowanie kodu dla .WHILE i .TEST, optymalizacja dla skoków warunkowych JNE, JEQ, JCC itd.)

wniosek: CC65 jest wolny, !Action szybki jak assembler

p.s.
następny przyklad programiku w mads z nowymi dyrektywami  (i c++) , pytanie, co ten program wyswietli ?:)

;int main() {
;    const int WIERSZ = 5;
;    const int KOLUMNA = 15;
;    int j, i = 1;
    
    org $2000

    .var wiersz = 15, kolumna=20, j, i=1 , hlp .byte
    
;    while(i <= WIERSZ)
    .while .byte i <= wiersz
;     {
;       cout << setw(KOLUMNA - i) << '*';

    lda kolumna    ; setw(KOLUMNA - i)
    sub i
    sta 82        ; lewy margines

    lda #$9b    ; cout << setw(KOLUMNA - i)
    jsr $f2b0

    lda #'*'    ; cout << '*'
    jsr $f2b0


;       j = 1;
    mva #1 j

;       while( j <= 2*i-2 )
    lda i
    asl @
    sub #2
    sta hlp

     .while .byte j <= hlp
;        {
;         cout << '*';
      lda #'*'
      jsr $f2b0

;         j++;
      inc j
;        }
     .endw
;       cout << endl;

;       i++;
    inc i
;     }
    .endw
    
;    return 0;                     
;}
    mva #$02 82    ; domyslna wartosc komorki 82

    mva #$c2 712
    jmp *

1,762

(37 odpowiedzi, napisanych Software, Gry - 8bit)

Dely, pewnie jeszcze cos takiego nie powstało, w nastepnej wersji mads bedziesz mial petle while, for i test (odpowiednik if), może Ci to ułatwi pisanie w asm

1,763

(37 odpowiedzi, napisanych Software, Gry - 8bit)

dla programu w CC65 trzeba dopisać jednak jeszcze po wywołaniu wait()

    asm(" lda #0");
    asm(" sta $13");
    asm(" sta $14");

teraz wynik jest lepszy, 2455 FPS

1,764

(37 odpowiedzi, napisanych Software, Gry - 8bit)

jest OK, okazuje sie że podałem wynik FPS odczytując bajty odwrotnie

przepisuje bajt $13 pod $600, bajt $14 pod $601 i podałem go w kolejnosci $14$13 zamiast $13$14, przez co wynik FPS "podskoczył"

prawidłowo odczytany wynik dla MADS-a to 1036 FPS, czyli ACTION tez jest wiarygodny :) wybaczcie pomyłkę

1,765

(64 odpowiedzi, napisanych Zloty)

a na miejscu będzie przewodnik ? :)

1,766

(37 odpowiedzi, napisanych Software, Gry - 8bit)

ILR a ile masz PRIMES, bo nie mam jak sprawdzic ACTION

pozatym XXL otrzymal podobny wynik dla ASM, tak ze w asm zostało napisane toto podobnie

1,767

(37 odpowiedzi, napisanych Software, Gry - 8bit)

ja też staram się ułatwiać sobie życie, dlatego wprowadziłem do mads-a (jeszcze nie udostępniony) automatyczne generowanie kodu dla pętli WHILE, kod wynikowy ma długość 375b, fps 1036


/* Eratosthenes Sieve benchmark */

true    = 1
false    = 0
size    = 8190
sizepl    = 8191

flags    = $8000


    org $2000

;void wait(void)
;{
; unsigned char a=PEEK(tick);
; while (PEEK(tick)==a) { ; }
;}

.proc wait
    lda:cmp:req 20
    rts
.endp


main

;int main()
;{
;    unsigned int i, prime, k, count, iter;
    .var i, prime, k, count, iter .word
    
;    wait();
    wait

    mwa #0 $13

;    printf("10 iterations\n");

;    iter = 1;
    mwa #1 iter

;    while (iter <= 10) {
p0    .while .word iter <= #10    ;0

;        count = 0;
        mwa #0 count

;        i = 0;
        mwa #0 i

;        while (i <= size) {
p1        .while .word i <= #size        ;1

;            flags[i] = true;

            lda <flags
            clc
            adc i
            sta adr
            lda >flags
            adc i+1
            sta adr+1

            lda #true
            sta $ffff
        adr:    equ *-2
        
;            i++;
            inw i
;        }
        .endw

;        i = 0;
        mwa #0 i
        
;        while (i <= size) {
p2        .while .word i <= #size        ;2

;            if (flags[i]) {

            lda <flags
            clc
            adc i
            sta adr2
            lda >flags
            adc i+1
            sta adr2+1

            lda $ffff
        adr2:    equ *-2

            beq skip

;                prime = i + i + 3;
                lda i
                clc
                adc i
                sta prime
                lda i+1
                adc i+1
                sta prime+1

                lda prime
                clc
                adc #3
                sta prime
                scc
                inc prime+1                
                
;                k = i + prime;

                lda i
                clc
                adc prime
                sta k
                lda i+1
                adc prime+1
                sta k+1

;                while (k <= size) {
p3                .while .word k <= #size        ;3

;                    flags[k] = false;

                    lda <flags
                    clc
                    adc k
                    sta adr3
                    lda >flags
                    adc k+1
                    sta adr3+1

                    lda #false
                    sta $ffff
                adr3:    equ *-2

;                    k = k + prime;

                    lda k
                    clc
                    adc prime
                    sta k
                    lda k+1
                    adc prime+1
                    sta k+1

;                }
                .endw

;                count++;
                inw count

;            }
        skip:

;            i++;
            inw i

;        }
        .endw

;        iter++;

        inw iter

;    }
    .endw
    
;    printf("\n%d primes\n", count);
    
;    i=PEEK(tick)+PEEK(tack)*256;

;    printf("\n%d fps\n", i);
    
;    return 0;
;}

    mwa $13 $600
    mwa count $602

    mva #$80 712
    jmp *


    run main

1,768

(19 odpowiedzi, napisanych Sprawy atari.area)

admini sprawdzają naszą spostrzegawczość, pewnie szykują coś większego ;)

1,769

(19 odpowiedzi, napisanych Sprawy atari.area)

niech zgadne, musisz wejsc do swojego profilu i zmienic jezyk na polski

1,770

(18 odpowiedzi, napisanych Bałagan)

zacznij składać swoją maszyne czasu mac...

1,771

(37 odpowiedzi, napisanych Software, Gry - 8bit)

nowa wersja cc65 generuje dłuższy kod i wolniejszy, aktualna długość kodu 3914b (wersja 2.11), poprzednio 3887b (wersja 2.10) , może biblioteki się rozrosły czy coś

1,772

(37 odpowiedzi, napisanych Software, Gry - 8bit)

w/w benchmark przyspieszy (dla 6502 wyjdzie wynik 2950 fps) jesli zadeklarujemy nasze zmienne jako "unsigned int" w w/w wersji jest bardziej obciążający CPU

1,773

(37 odpowiedzi, napisanych Software, Gry - 8bit)

Pasiu był tak miły i zapuścił ten benchmark na swojej dopałce, jak pisze ciut powyżej 14Mhz

6502:   554 fps
65816: 533 fps

1,774

(37 odpowiedzi, napisanych Software, Gry - 8bit)

magicznym zakleciem Laoo ;)

cc65 -O --cpu 65816 -t atari %1 -o %1.s
ca65 --cpu 65816 -t atari %1.s -o %1.o
ld65 -t atari -o %1.xex atari.o %1.o atari.lib

Fox jak zwykle masz racje

1,775

(37 odpowiedzi, napisanych Software, Gry - 8bit)

oto test który udowadnia że emulator jest szybszy od emulowanej maszyny

/* Eratosthenes Sieve benchmark */

#include <peekpoke.h>

#define true 1
#define false 0
#define size 8190
#define sizepl 8191
#define tick 0x14
#define tack 0x13

char flags[sizepl];


void wait(void)
{
 unsigned char a=PEEK(tick);
 while (PEEK(tick)==a) { ; }
}


int main()
{
    int i, prime, k, count, iter;    

    wait();

    POKE(tick,0x00);
    POKE(tack,0x00);

    printf("10 iterations\n");

    iter = 1;
    while (iter <= 10) {
        count = 0;
        i = 0;
        while (i <= size) {
            flags[i] = true;
            i++;
        }
        i = 0;
        while (i <= size) {
            if (flags[i]) {
                prime = i + i + 3;
                k = i + prime;
                while (k <= size) {
                    flags[k] = false;
                    k = k + prime;
                }
                count++;
            }
            i++;
        }
        iter++;
    }

    printf("\n%d primes\n", count);
    
    i=PEEK(tick)+PEEK(tack)*256;

    printf("\n%d fps\n", i);
    
    exit(0);
}

wyniki w ramkach FPS


atari800win: 4012 fps


prawdziwe Atari z procesorem 65816

tryb 6502:  4015 fps
tryb 65816: 3857 fps


dopałka Pasia F7:

tryb 6502:   554 fps
tryb 65816: 533 fps


p.s.
przeprowadze jeszcze z ciekawości test z programem w asm bez optymalizowania szybkosci kodu z duza iloscia procedur itp. na razie się pisze