atarionline.pl Gunfighter - obsługa 1 portu Joya - Forum Atarum

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.

    • 1: CommentAuthorstreak
    • CommentTime12 Mar 2011
     
    Witam

    Wiecie moze czy istnieje wersja GUNFIGHTER'a w której mozna sterować ludzikiem za pomocą joy'a w pierwszym porcie? Emulator Atari800 [na dingoo / gp2x / itp.] nie ma mozliwosci swapa joystików, wiec grac nie mozna :/
    • 2: CommentAuthorstreak
    • CommentTime12 Mar 2011
     
    BTW. chodzi o TEGO Gunfighter'a:

    • 3: CommentAuthorrekk
    • CommentTime13 Mar 2011
     
    Możesz użyć Atari800Win, tam przełączyłem konfigurację joya (Input - Joystick - Joystick option) na port 2.
    • 4: CommentAuthorstreak
    • CommentTime13 Mar 2011
     
    Niestety.. emuluje gry atari na Dingoo / GP2X wiec nie mam mozliwosci uzycia A800Win
    • 5:
       
      CommentAuthorKaz
    • CommentTime13 Mar 2011
     
    Moze ktos Ci spaczuje gre zamieniajac w grze komorki odczytujace joya?
    • 6: CommentAuthorzoltan
    • CommentTime14 Mar 2011
     
    A z innej beczki: właściwie dlaczego akurat ta jedna jedyna gra obsługuje tylko drugi port joysticka? Doczytał się ktoś? :)
    • 7: CommentAuthorbanshee997
    • CommentTime14 Mar 2011 zmieniony
     
    Na pewno nie jedyna, np. w Speed King trzeba było joya zmienić.

    EDIT: ściągnąłem przed chwilą i jednak obsługa w porcie 1 ... hmm musiałem pomylić tytuły. Stay tuned ;)
    • 8: CommentAuthormono
    • CommentTime14 Mar 2011
     
    @streak: Podeślij pliczek, który uruchamiasz.
    • 9: CommentAuthorstreak
    • CommentTime8 Apr 2011
     
    ->link<-

    lub

    ->link<-

    to z Kaza archiwum. W sumie wszystkie wersje [jakie sprawdzalem] obsluguja 2 port.

    Dzieki z góry Mono.
    StreaK
    • 10: CommentAuthornosty
    • CommentTime8 Apr 2011 zmieniony
     
    Mowisz i masz.

    Dla chcacych pogrzebac: procedura wygladala tak:

    LDA $D300	;PortA
    LSR @
    LSR @
    LSR @
    LSR @
    EOR #$FF
    AND $0F
    ORA $B0
    STA $B0
    LDA $D011 ;Trig1
    EOR #$FF
    AND $01
    ASL @
    ASL @
    ASL @
    ASL @
    ORA $B0
    RTS


    zmienilem na:

    LDA $D300	;PortA
    AND $0F
    NOP
    NOP
    NOP
    EOR #$FF
    AND $0F
    ORA $B0
    STA $B0
    LDA $D010 ;Trig0
    EOR #$FF
    AND $01
    ASL @
    ASL @
    ASL @
    ASL @
    ORA $B0
    RTS
    • 11:
       
      CommentAuthorjhusak
    • CommentTime8 Apr 2011 zmieniony
     
    Wystarczą 4 nopy, ten and $f jest zbędny.
    • 12: CommentAuthorbanshee997
    • CommentTime8 Apr 2011
     
    A nie, jednak miałem rację jeżeli chodzi o Speed Kinga:

    Pliki w tym katalogu :
    ->link<-
    obsługiwane są odpowiednio przez różne porty joya:
    Speed King (v1).atr (joy 2)
    Speed King (v1).xex (joy 1)
    Speed King (v2).atr (joy 2)
    Speed King (v2).xex (joy 1)
    Speed King.dcm (joy 2)
    • 13: CommentAuthornosty
    • CommentTime9 Apr 2011
     
    >Wystarczą 4 nopy, ten and $f jest zbędny.

    Aha, ale dodalem AND specjalnie, zeby zachowac jak najwieksza zgodnosc z oryginalem (po 4 LSR'ach na starszych 4 bitach sa 0), bo nie bylem pewny czy program czegos nie robi jeszcze z $B0 w innym miejscu gry.
    Generalnie to troche dziwny ten fragment kodu jest.
    • 14: CommentAuthorstreak
    • CommentTime9 Apr 2011
     
    Dziekuje bardzo, nosty. Zaraz przetestuje :)
    • 15: CommentAuthormono
    • CommentTime9 Apr 2011 zmieniony
     
    @nosty: Brawo! Widać postęp w nauce ;)
    Dla pełnego obrazu sytuacji - oryginalny kod wygląda tak:
    89EB: A9 00     LDA #$00
    89ED: 85 B0 STA $B0
    89EF: 20 12 35 JSR $3512
    89F2: B0 32 BCS $8A26
    89F4: E0 7A CPX #$7A
    89F6: D0 06 BNE $89FE
    89F8: A5 B0 LDA $B0
    89FA: 09 04 ORA #$04
    89FC: 85 B0 STA $B0
    89FE: E0 78 CPX #$78
    8A00: D0 06 BNE $8A08
    8A02: A5 B0 LDA $B0
    8A04: 09 08 ORA #$08
    8A06: 85 B0 STA $B0
    8A08: E0 2B CPX #$2B
    8A0A: D0 06 BNE $8A12
    8A0C: A5 B0 LDA $B0
    8A0E: 09 01 ORA #$01
    8A10: 85 B0 STA $B0
    8A12: E0 2F CPX #$2F
    8A14: D0 06 BNE $8A1C
    8A16: A5 B0 LDA $B0
    8A18: 09 02 ORA #$02
    8A1A: 85 B0 STA $B0
    8A1C: E0 20 CPX #$20
    8A1E: D0 06 BNE $8A26
    8A20: A5 B0 LDA $B0
    8A22: 09 10 ORA #$10
    8A24: 85 B0 STA $B0
    8A26: AD 00 D3 LDA $D300 ;PORTA
    8A29: 4A LSR
    8A2A: 4A LSR
    8A2B: 4A LSR
    8A2C: 4A LSR
    8A2D: 49 FF EOR #$FF
    8A2F: 29 0F AND #$0F
    8A31: 05 B0 ORA $B0
    8A33: 85 B0 STA $B0
    8A35: AD 11 D0 LDA $D011 ;TRIG1
    8A38: 49 FF EOR #$FF
    8A3A: 29 01 AND #$01
    8A3C: 0A ASL
    8A3D: 0A ASL
    8A3E: 0A ASL
    8A3F: 0A ASL
    8A40: 05 B0 ORA $B0
    8A42: 60 RTS

    Pod $3512 znajduje się procedura dekodująca klawiaturę (sprawdza w SKSTAT czy wciśnięto klawisz i jeśli tak, czyta KBCODE; potem przerabia kod na ATASCII). Jeśli flaga C jest ustawiona tzn, że nie wciśnięto nic i sprawdzamy joystick. Wpp w rejestrze X zostaje kod ATASCII znaku. Widać, że na początku $B0 jest zerowane, więc po prostu jest tam akumulowana informacja o reakcjach użytkownika klawiaturą (zx/+ i spacja jeśli się nie mylę) i joystickiem.
    Tak, jak Kuba pisał - wystarczą 4*nop, bo and #$f jest robione za eorem. No i $D011 należy zmienić na $D010 (co zresztą zrobiłeś).

    Edit: Finalnie z całej procedury wychodzi się mając w rejestrze A informacje o sterowaniu w formacie takim, jak z CIA w C64: b4=fire, b3..b0=kierunki.
    • 16:
       
      CommentAuthorKaz
    • CommentTime23 Apr 2011
     
    Po przerobieniu programow prosze o podeslanie tych wersji do mnie, wrzuce do katalogu.