[#31] Re: Zapowiedzi nowych gier

@BULI, post #30

Na AGA 68060 60mhz ile jest klatek?
[#32] Re: Zapowiedzi nowych gier

@BULI, post #30

Oo, skąd masz wersje WarpOS? Pewnie z EAB, który w tej chwili leży i kwiczy.
U mnie na A1200 z Warp 1260@100 i A500 z PiStorm mam też 30fps.
[#33] Re: Zapowiedzi nowych gier

@tukinem, post #21

Jakby był kod to już dawno bym zrobił port. Ale po twoim poście z ciekawości sprawdziłem
czy coś się zmieniło w ostatnim czasie i natknąłem się na pierwszy kompletny kod. Kompiluje się na Windowsie.
Po wielu godzinach udało mi się przepisać kod D3D11 na SDL1.2. Jednak 15% jest napisana w asm x86. Ktoś chętny przepisania na C lub asm 68k ?


--

Ostatnia aktualizacja: 07.04.2025 13:13:01 przez Artur Jarosik
4
[#34] [post oznaczony jako OT] wyświetl Re: Zapowiedzi nowych gier
[#35] Re: Zapowiedzi nowych gier

@BULI, post #7

Odpaliłem Lare na Cd32 z TF 030 50mhz i AGA i wygląda to bardzo podobnie jak nagranie z CDTV z takim samym CPU i Indyvision ok, racja
Licznik FPS pokazuje 7-6klatek, ale jest naprawdę szybko i responsywnie- to naprawdę jest grywalne na takim konfigu OK
4
[#36] Re: Zapowiedzi nowych gier

@Artur Jarosik, post #33

Ktoś chętny przepisania na C lub asm 68k ?

Od czego jest AI?pomysł
Tak, mogę pomóc w przetłumaczeniu kodu assemblerowego z x86 na 68k, choć wymaga to trochę pracy, bo te architektury różnią się znacząco – x86 (np. Intel) używa modelu CISC, a 68k (Motorola) jest bardziej RISC-podobny. Rejestry, sposób adresowania pamięci i instrukcje są inne, więc nie zawsze jest to tłumaczenie 1:1, a bardziej adaptacja logiki programu.
Jeśli masz konkretny kod w asm x86, pokaż mi go, a postaram się przełożyć go na asm 68k, wyjaśniając przy tym różnice i dostosowując go do tej architektury. Na przykład:
Rejestry x86 (EAX, EBX, ECX) nie mają bezpośrednich odpowiedników w 68k, ale mogę użyć D0-D7 (dane) lub A0-A7 (adresy).
Instrukcje jak MOV w x86 zamienię na MOVE w 68k, uwzględniając składnię i adresowanie.
Podaj mi fragment kodu, a zaczniemy!

pomysł
2
[#37] Re: Zapowiedzi nowych gier

@Pinto, post #36

Calkiem ciekawa odpowiedz, interesujace jakby wygladal taki przetlumaczony przez AI kod z x86 na 68k.
2
[#38] Re: Zapowiedzi nowych gier

@amikoksu, post #31

Na AGA (A4000 CS MK3 68060 60mhz) mam ok 29-26FPS ok, racja
[#39] Re: Zapowiedzi nowych gier

@Pinto, post #36

Dzięki, nie wpadłbym na to!
głową w mur

(sarkazm)
1
[#40] Re: Zapowiedzi nowych gier

@Don_Adan, post #37

Mniej więcej tak

x86
include win95.i



CONTEXT_ip          equ     0
CONTEXT_esp         equ     4
CONTEXT_ebp         equ     8
CONTEXT_ebx         equ     12      
CONTEXT_ecx         equ     16  
CONTEXT_esi         equ     20  
CONTEXT_edi         equ     24  


    BEGIN_CODE
_start_::
EXTERN _main_context : DWORD

    public _context_init_main
_context_init_main proc near
; void context_init_main(CONTEXT *main_context)
    mov     eax,dword ptr 4[esp]            ; eax = save_context
    mov     dword ptr CONTEXT_esp[eax],esp  ; save esp
    mov     dword ptr CONTEXT_ebp[eax],ebp  ; save ebp 
    mov     dword ptr CONTEXT_ebx[eax],ebx  ; save ebx
    mov     dword ptr CONTEXT_ecx[eax],ecx  ; save ecx
    mov     dword ptr CONTEXT_esi[eax],esi  ; save esi
    mov     dword ptr CONTEXT_edi[eax],edi  ; save edi
    ret
_context_init_main endp


    public _context_kill_switch
_context_kill_switch proc near
; void context_kill_switch(Context *restore_context)
    ; put in new context and jump to new ip

    mov     eax,4[esp]                      ; move context to eax
    jmp     go_context

    public _context_switch 
_context_switch proc near
; int context_switch(Process *to,Process *from);

; EAX is scratch    
; return address is in [ESP]
; args in stack before return address 
;
; save current context with the return address as the new ip of the saved
; context, then load a new context and jump to it's new ip. 


    mov     eax,dword ptr 8[esp]            ; eax = save_context
    pop     dword ptr CONTEXT_ip[eax]       ; pop return address into ip 
    mov     dword ptr CONTEXT_esp[eax],esp  ; save esp
    mov     dword ptr CONTEXT_ebp[eax],ebp  ; save ebp 
    mov     dword ptr CONTEXT_ebx[eax],ebx  ; save ebx
    mov     dword ptr CONTEXT_ecx[eax],ecx  ; save ecx
    mov     dword ptr CONTEXT_esi[eax],esi  ; save esi
    mov     dword ptr CONTEXT_edi[eax],edi  ; save edi
    mov     eax,[esp]                       ; move goto context to eax

go_context::     ; put in new context and jump to new ip

    mov     esp, dword ptr CONTEXT_esp[eax] ; now on new stack
    mov     ebp,dword ptr CONTEXT_ebp[eax]  ; restore ebp 
    mov     ebx,dword ptr CONTEXT_ebx[eax]  ; restore ebx
    mov     ecx,dword ptr CONTEXT_ecx[eax]  ; restore ecx
    mov     esi,dword ptr CONTEXT_esi[eax]  ; restore esi
    mov     edi,dword ptr CONTEXT_edi[eax]  ; restore edi

    jmp     dword ptr CONTEXT_ip[eax]       ; launch new context 

_context_switch endp
_context_kill_switch endp

    public _context_jump 
_context_jump proc near

; int local_context_jump(Context *to);
;
; jump to a new entry point within the same context setting new 
; stack and frame to the input 
;
    mov     eax,dword ptr 4[esp]            ; eax = save_context
    mov     esp, dword ptr CONTEXT_esp[eax] ; now on new stack
    mov     ebp,dword ptr CONTEXT_ebp[eax]  ; restore ebp 
    jmp     dword ptr CONTEXT_ip[eax]       ; jump to new entry point 
_context_jump endp

    end


68k
; Struktura CONTEXT dla 68k
CONTEXT_ip   EQU  0    ; Adres instrukcji (PC)
CONTEXT_a7   EQU  4    ; Stack pointer (A7/SP)
CONTEXT_a6   EQU  8    ; Frame pointer (A6/FP)
CONTEXT_d2   EQU  12   ; Zachowane rejestry
CONTEXT_d3   EQU  16
CONTEXT_d4   EQU  20
CONTEXT_d5   EQU  24
CONTEXT_d6   EQU  28
CONTEXT_d7   EQU  32
CONTEXT_a2   EQU  36
CONTEXT_a3   EQU  40
CONTEXT_a4   EQU  44

    SECTION TEXT

; void context_init_main(CONTEXT *main_context)
_context_init_main:
    MOVE.L  4(A7),A0         ; A0 = wskaźnik kontekstu (pierwszy parametr)
    MOVE.L  A7,CONTEXT_a7(A0) ; Zapisz wskaźnik stosu
    MOVE.L  A6,CONTEXT_a6(A0) ; Zapisz wskaźnik ramki
    MOVE.L  D2,CONTEXT_d2(A0) ; Zapisz rejestry, które muszą być zachowane
    MOVE.L  D3,CONTEXT_d3(A0)
    MOVE.L  D4,CONTEXT_d4(A0)
    MOVE.L  D5,CONTEXT_d5(A0)
    MOVE.L  D6,CONTEXT_d6(A0)
    MOVE.L  D7,CONTEXT_d7(A0)
    MOVE.L  A2,CONTEXT_a2(A0)
    MOVE.L  A3,CONTEXT_a3(A0)
    MOVE.L  A4,CONTEXT_a4(A0)
    RTS

; void context_kill_switch(CONTEXT *restore_context)
_context_kill_switch:
    MOVE.L  4(A7),A0         ; A0 = wskaźnik kontekstu do przywrócenia
    BRA     go_context       ; Skocz do wspólnego kodu przywracania kontekstu

; int context_switch(CONTEXT *to, CONTEXT *from);
_context_switch:
    MOVE.L  8(A7),A0         ; A0 = wskaźnik kontekstu do zapisania (from)
    MOVE.L  (A7),CONTEXT_ip(A0) ; Zapisz adres powrotu jako nowy IP
    ADDQ.L  #4,A7            ; Skoryguj stos (pominięcie adresu powrotu)
    MOVE.L  A7,CONTEXT_a7(A0) ; Zapisz wskaźnik stosu
    MOVE.L  A6,CONTEXT_a6(A0) ; Zapisz wskaźnik ramki
    MOVE.L  D2,CONTEXT_d2(A0) ; Zapisz rejestry
    MOVE.L  D3,CONTEXT_d3(A0)
    MOVE.L  D4,CONTEXT_d4(A0)
    MOVE.L  D5,CONTEXT_d5(A0)
    MOVE.L  D6,CONTEXT_d6(A0)
    MOVE.L  D7,CONTEXT_d7(A0)
    MOVE.L  A2,CONTEXT_a2(A0)
    MOVE.L  A3,CONTEXT_a3(A0)
    MOVE.L  A4,CONTEXT_a4(A0)
    
    MOVE.L  4(A7),A0         ; A0 = wskaźnik kontekstu do przywrócenia (to)

go_context:
    MOVE.L  CONTEXT_a7(A0),A7 ; Przywróć wskaźnik stosu
    MOVE.L  CONTEXT_a6(A0),A6 ; Przywróć wskaźnik ramki
    MOVE.L  CONTEXT_d2(A0),D2 ; Przywróć rejestry
    MOVE.L  CONTEXT_d3(A0),D3
    MOVE.L  CONTEXT_d4(A0),D4
    MOVE.L  CONTEXT_d5(A0),D5
    MOVE.L  CONTEXT_d6(A0),D6
    MOVE.L  CONTEXT_d7(A0),D7
    MOVE.L  CONTEXT_a2(A0),A2
    MOVE.L  CONTEXT_a3(A0),A3
    MOVE.L  CONTEXT_a4(A0),A4
    
    MOVE.L  CONTEXT_ip(A0),A1 ; Pobierz adres skoku
    JMP     (A1)              ; Skocz do nowego kontekstu

; int context_jump(CONTEXT *to);
_context_jump:
    MOVE.L  4(A7),A0         ; A0 = wskaźnik kontekstu
    MOVE.L  CONTEXT_a7(A0),A7 ; Przywróć wskaźnik stosu
    MOVE.L  CONTEXT_a6(A0),A6 ; Przywróć wskaźnik ramki
    
    MOVE.L  CONTEXT_ip(A0),A1 ; Pobierz adres skoku
    JMP     (A1)              ; Skocz do nowego punktu wejścia


Ostatnia aktualizacja: 07.04.2025 20:22:39 przez Artur Jarosik
1
[#41] Re: Zapowiedzi nowych gier

@Artur Jarosik, post #40

Czego użyłeś? Ja pytałem Groka
[#42] Re: Zapowiedzi nowych gier

@c64portal, post #28

na A4000/060 100MHz pokazuje 30FPS ale...
nic nie mogę zrobić to cały czas mi wchodzi i wychodzi z menu.
efekt jest taki jak by jakiś klawisz był wciśnięty cały czas, albo odczytywało stan wciśnięcia jakiegoś klawisza. jak przytrzymam ESC to po wejściu do gry nie wychodzi do menu, no ale muszę trzymać ESC. coś jest nie tak

Gra korzysta z lowlevel.library i jeśli nie ma podpiętego joysticka/pada może generować takie problemy jak u Ciebie ok, racja
Spróbuj podpiąć coś do portu joysticka

Ostatnia aktualizacja: 07.04.2025 20:24:10 przez BULI
[#43] Re: Zapowiedzi nowych gier

@BULI, post #38

Ładnie. To przy standardowej 060 też można fajnie pograć.
[#44] Re: Zapowiedzi nowych gier

@Pinto, post #41

Claude 3.7

Jak dotąd najlepszy z testowanych dla mnie.

Przenoszę temat tu ponieważ to zbyt OT.

--

Ostatnia aktualizacja: 07.04.2025 20:34:31 przez Artur Jarosik
[#45] Re: Zapowiedzi nowych gier

@Artur Jarosik, post #40

GROK:

CONTEXT_ip          equ     0       ; Instruction pointer offset
CONTEXT_sp          equ     4       ; Stack pointer offset (A7 w 68k)
CONTEXT_fp          equ     8       ; Frame pointer offset (A6 zamiast EBP)
CONTEXT_d2          equ     12      ; Odpowiednik EBX
CONTEXT_d3          equ     16      ; Odpowiednik ECX
CONTEXT_a4          equ     20      ; Odpowiednik ESI
CONTEXT_a5          equ     24      ; Odpowiednik EDI

    SECTION .text
_start_:
    EXTERN  _main_context

    ; void context_init_main(CONTEXT *main_context)
_context_init_main:
    move.l  4(a7), a0           ; A0 = main_context (pierwszy argument ze stosu)
    move.l  a7, CONTEXT_sp(a0)  ; Zapisz aktualny stos (A7)
    move.l  a6, CONTEXT_fp(a0)  ; Zapisz frame pointer (A6 zamiast EBP)
    move.l  d2, CONTEXT_d2(a0)  ; Zapisz D2 (odpowiednik EBX)
    move.l  d3, CONTEXT_d3(a0)  ; Zapisz D3 (odpowiednik ECX)
    move.l  a4, CONTEXT_a4(a0)  ; Zapisz A4 (odpowiednik ESI)
    move.l  a5, CONTEXT_a5(a0)  ; Zapisz A5 (odpowiednik EDI)
    rts                         ; Powrót

    ; void context_kill_switch(Context *restore_context)
_context_kill_switch:
    move.l  4(a7), a0           ; A0 = restore_context
    bra     go_context          ; Skok do wspólnej logiki przywracania

    ; int context_switch(Process *to, Process *from)
_context_switch:
    move.l  8(a7), a0           ; A0 = save_context (drugi argument)
    move.l  (a7)+, CONTEXT_ip(a0) ; Zdejmij adres powrotu i zapisz jako IP
    move.l  a7, CONTEXT_sp(a0)  ; Zapisz aktualny stos
    move.l  a6, CONTEXT_fp(a0)  ; Zapisz frame pointer
    move.l  d2, CONTEXT_d2(a0)  ; Zapisz D2
    move.l  d3, CONTEXT_d3(a0)  ; Zapisz D3
    move.l  a4, CONTEXT_a4(a0)  ; Zapisz A4
    move.l  a5, CONTEXT_a5(a0)  ; Zapisz A5
    move.l  (a7), a0            ; A0 = to_context (pierwszy argument)

go_context:
    move.l  CONTEXT_sp(a0), a7  ; Przywróć stos
    move.l  CONTEXT_fp(a0), a6  ; Przywróć frame pointer
    move.l  CONTEXT_d2(a0), d2  ; Przywróć D2
    move.l  CONTEXT_d3(a0), d3  ; Przywróć D3
    move.l  CONTEXT_a4(a0), a4  ; Przywróć A4
    move.l  CONTEXT_a5(a0), a5  ; Przywróć A5
    move.l  CONTEXT_ip(a0), a1  ; Załaduj nowy IP do A1
    jmp     (a1)                ; Skok do nowego kontekstu

    ; int context_jump(Context *to)
_context_jump:
    move.l  4(a7), a0           ; A0 = to_context
    move.l  CONTEXT_sp(a0), a7  ; Przywróć stos
    move.l  CONTEXT_fp(a0), a6  ; Przywróć frame pointer
    move.l  CONTEXT_ip(a0), a1  ; Załaduj nowy IP
    jmp     (a1)                ; Skok do nowego punktu wejścia

    END
[#46] [post oznaczony jako OT] wyświetl Re: Zapowiedzi nowych gier
[#47] Re: Zapowiedzi nowych gier

@BULI, post #42

Gra korzysta z lowlevel.library i jeśli nie ma podpiętego joysticka/pada może generować takie problemy jak u Ciebie
Spróbuj podpiąć coś do portu joysticka

ciekawostka... podpiąłem joya i po uruchomieniu gry nie ma takiego efektu wchodzenia i wychodzenia z menu, mogę joyem w lewo i prawo wybierać opcje z menu, ale jak nacisnę fire i wejdę w jakąś opcję to problem wraca - tzn dalej tak jak by fire w joyu wciskał się sam. samoczynnie wchodzi i wychodzi z menu.
dziwaczne.
testuję na A4000 z BFG 9060/100MHz i zz9000. w sumie nie wiem czy to sie w trybie AGA czy RTG odpala. Bez S-S jest tak samo.
[#48] Re: Zapowiedzi nowych gier

@c64portal, post #47

Spróbuj podpiąć coś kompatybilnego z padem CD32 ok, racja
[#49] Re: Zapowiedzi nowych gier

@BULI, post #48

Tutaj nagranie z bardzo wczesnej wersji PPC (WarpOs) w 640x480 :
9
[#50] Re: Zapowiedzi nowych gier

@BULI, post #49

lipa
2
[#51] Re: Zapowiedzi nowych gier

@BULI, post #49

Wygląda jakby w ogóle nie korzystało z FPU.
[#52] Re: Zapowiedzi nowych gier
Wersja pod 68k też nie używa FPU ok, racja
A jak kogoś drażni widok w wyższej rozdzielczości zawsze może odpalić to w loresie, jak na 68k, tylko zamiast max 30FPS mieć max ok 50FPS OK
1
[#53] Re: Zapowiedzi nowych gier

@BULI, post #49

Na Amidze lepiej się prezentuje niż na playstation.
3
[#54] Re: Zapowiedzi nowych gier

@BULI, post #49

Podzielisz się sznurkiem do tej wersji czy masz ją jako exclusive?
[#55] Re: Zapowiedzi nowych gier

@waldiamiga, post #54

Cowcat miał to upubliczniać- spytam go i dam znać ok, racja
[#56] Re: Zapowiedzi nowych gier

@BULI, post #55

A nie dało by się ogarnąć TR w HAM jak np.
Quake?? Ciekawe czy przy 040/40MHz było by to grywalne..
[#57] Re: Zapowiedzi nowych gier

@lukzer, post #56

To jest bardzo dobre pytanie, inna sprawa czy bratankowi BSzili by się chciał to zaimplementować.
[#58] Re: Zapowiedzi nowych gier

@BULI, post #55

Mam pozwolenie od Cowcata na udostępnienie exe'ka OpenLara WOS, jak ktoś jest chętny to piszcie na PRV ok, racja

Ostatnia aktualizacja: 12.04.2025 11:28:47 przez BULI
2
[#59] Re: Zapowiedzi nowych gier

@BULI, post #58

A czy jest jakiś przybliżony termin na udostępnienie pełnej wersji?

Swoją drogą nie pojmuje dlaczego gra 3D z teksturami nie może wymagać FPU.
[#60] Re: Zapowiedzi nowych gier

@BULI, post #58

Poproszę
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem