26 Ostatnio edytowany przez jury (2011-06-19 22:19:01)

saulot napisał/a:

jury: to spróbuj wwalić tam jakiegoś nop'a, wrzucić słowo even przed VBL

Nie pomogło :(

saulot napisał/a:

odpal zamiast monsta np. adebug. monst daje ciała czasami.

To chyba i tak nie ma sensu, bo skoro mi się zawiesza, to będzie się zawieszać niezależnie od debuggera.  A swoją drogą i tak szukam jakiegoś ciekawszego debuggera więc obadam tego adebug'a :)

27

jury napisał/a:

To chyba i tak nie ma sensu, bo skoro mi się zawiesza, to będzie się zawieszać niezależnie od debuggera.  A swoją drogą i tak szukam jakiegoś ciekawszego debuggera więc obadam tego adebug'a :)

Tak, źle napisane programy zawieszają się niezależnie od debuggera ;))). A ADEBUG dał radę w miejscach gdzie monst odpadł, więc dlatego o nim napisałem.

=========================================
[www] https://nokturnal.pl
[ 16/32 bit Atari development wiki] https://bus-error.nokturnal.pl

28

A wszedłeś w supervisora ?? Założe się, że nie...

What can be asserted without proof can be dismissed without proof.

29 Ostatnio edytowany przez jury (2011-06-19 22:23:02)

Tak, bo jakbym nie wszedł w supervisora to wybombił ( a nie zawiesił ) by mi się już w trzeciej linijce: movem.l    d0-d7,$ff8240
:P

30

ale supervisor to jest przecież dla dziewczyn ;)))

=========================================
[www] https://nokturnal.pl
[ 16/32 bit Atari development wiki] https://bus-error.nokturnal.pl

31

ale co sie konkretnie dzieje? Bomby czy freez, konkrenie jakie masz symptomy.

What can be asserted without proof can be dismissed without proof.

32 Ostatnio edytowany przez Adam Klobukowski (2011-06-19 22:32:12)

Aj, a w tryb supervisor wszedł?

(ups nie doczytałem do końca)

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

33

sqward: zwiecha, jedyny ratunek reset steem'a
adamk: pytanie już padło :)

34

A czy aby napewno orbinalny VBL nie jest potrzebny, żeby działała funkcja Crawcin() ? Jeśli masz freeza to założe się, że poprostu nigdy nie wychodzi z trapa. Tak jak ktoś Ci w tym wątku sugerował, debuger pomógł by Ci w dokładnym zlokalizowaniu problemu.

What can be asserted without proof can be dismissed without proof.

35

Widziałeś kiedykolwiek kawałek kodu który używając VBLa dopisuje się do listy procedur wywoływanych w "default"owym VBLu? Ja nigdy :) Ale cóż, spróbuję, tylko o matko, nigdy tak nie robiłem. Muszę przewalić trochę literatury jak to się robi.

36

tró, chyba zamiast zabijać oryginalnego vbl'a bezpieczniej będzie podczepić się pod kolejkę vblową.. nie?

=========================================
[www] https://nokturnal.pl
[ 16/32 bit Atari development wiki] https://bus-error.nokturnal.pl

37 Ostatnio edytowany przez jury (2011-06-19 22:47:56)

Ale coś tak przez mgłę kojarzę że z milion lat temu czytałem gdzieś o tym co tam się dzieje w kolejce VBLa, i jakoś tak mi się pamięta, że tam nic absolutnie ciekawego nie było. Do tego, nawet w trylionie tutoriali walających się, nigdy, ale to absolutnie nigdy nie widziałem przykładu podpinania się do kolejki. Wszyscy uwalali oryginalnego, a przywracali przy wyjściu. Cóż, jeszcze powalczę i jak nic nie zadziała, to będę szukał tutoriala jak się podpiąć do kolejki :D

38 Ostatnio edytowany przez sqward (2011-06-19 22:51:19)

Jury: zahakować to można tak:

old_vbl:            ds.l  1

new_vbl:          ;Twoj vbl
                         jmp      ([old_vbl])



Pozatym problemów może być masa w innych miejscach. Taka zgadywanka jest trochę bezpłodna. Może poprostu zamieść cały kod...

What can be asserted without proof can be dismissed without proof.

39

ale co to za filozofia?
masz pod adresem $454 ilość funkcji wykonywanych w VBL (normalnie jest 8). Pod $456 masz wskaźnik do listy funkcji(wskaźników do funkcji).
Na dzień dobry przechodzisz tą listę (sprawdzasz 8 pointerów, który jest z nich 0, jak jest 0 to wwalasz swoją funkcję) i tyle..
Jak wszystkie zajęte to będziesz musiał sobie zarezerwować większą tablicę z pointerami, przekopiować zawartość ze starej do nowej, zupdatować ilość funkcji wykonywanych w VBLu($454) i zaktualizować wskaźnik do listy pod $456, żeby wskazywał na Twoją,a nie oryginalną.
Po zakończeniu operacji, trzeba posprzątać po sobie.

=========================================
[www] https://nokturnal.pl
[ 16/32 bit Atari development wiki] https://bus-error.nokturnal.pl

40 Ostatnio edytowany przez jury (2011-06-19 22:59:48)

sqward napisał/a:

J
Pozatym problemów może być masa w innych miejscach. Taka zgadywanka jest trochę bezpłodna. Może poprostu zamieść cały kod...

To jest właśnie cały kod :) Uszczupliłem go do minimum, tak aby było wyświetlenie obrazka i podmiana vbl'a
Tzn, brakuje jeszcze init'a. Ale jak pisałem wcześniej. Jest z tutoriala perihelion'a + moje ze cztery linijki.
Wygląda tak:

init    
* set supervisor
    clr.l    -(a7)            clear stack
    move.w    #32,-(a7)        prepare for user mode
    trap    #1            call gemdos
    addq.l    #6,a7            clean up stack
    move.l    d0,old_stack        backup old stack pointer
* end set supervisor

* save the old palette; old_palette
    move.l    #old_palette,a0        put backup address in a0
    movem.l    $ffff8240,d0-d7        all palettes in d0-d7
    movem.l    d0-d7,(a0)        move data into old_palette
* end palette save

* saves the old screen adress
    move.w    #2,-(a7)        get physbase
    trap    #14
    addq.l    #2,a7
    move.l    d0,old_screen        save old screen address
* end screen save

* save the old resolution into old_resolution
* and change resolution to low (0)
    move.w    #4,-(a7)        get resolution
    trap    #14
    addq.l    #2,a7
    move.w    d0,old_resolution    save resolution
    
    move.w    #0,-(a7)        low resolution
    move.l    #-1,-(a7)        keep physbase
    move.l    #-1,-(a7)        keep logbase
    move.w    #5,-(a7)        change screen
    trap    #14
    add.l    #12,a7
* end resolution save    
    
    move.l    $70,old_vbl

    rts

init_nores    
* set supervisor
    clr.l    -(a7)            clear stack
    move.w    #32,-(a7)        prepare for user mode
    trap    #1            call gemdos
    addq.l    #6,a7            clean up stack
    move.l    d0,old_stack        backup old stack pointer
* end set supervisor

* save the old palette; old_palette
    move.l    #old_palette,a0        put backup address in a0
    movem.l    $ffff8240,d0-d7        all palettes in d0-d7
    movem.l    d0-d7,(a0)        move data into old_palette
* end palette save

* saves the old screen adress
    move.w    #2,-(a7)        get physbase
    trap    #14
    addq.l    #2,a7
    move.l    d0,old_screen        save old screen address
* end screen save

* save the old resolution into old_resolution
* and change resolution to low (0)
    move.w    #4,-(a7)        get resolution
    trap    #14
    addq.l    #2,a7
    move.w    d0,old_resolution    save resolution
    
;    move.w    #0,-(a7)        low resolution
;    move.l    #-1,-(a7)        keep physbase
;    move.l    #-1,-(a7)        keep logbase
;    move.w    #5,-(a7)        change screen
;    trap    #14
;    add.l    #12,a7
* end resolution save    
    
    move.l    $70,old_vbl

    rts


restore    
* restores the old resolution and screen adress
    move.w    old_resolution,d0    res in d0
    move.w    d0,-(a7)        push resolution
    move.l    old_screen,d0        screen in d0
    move.l    d0,-(a7)        push physbase
    move.l    d0,-(a7)        push logbase
    move.w    #5,-(a7)        change screen
    trap    #14
    add.l    #12,a7
* end resolution and screen adress restore

* restores the old palette
    move.l    #old_palette,a0        palette pointer in a0
    movem.l    (a0),d0-d7        move palette data
    movem.l    d0-d7,$ffff8240        smack palette in
* end palette restore

    move.l    old_vbl,$70

* set user mode again
    move.l    old_stack,-(a7)        restore old stack pointer
    move.w    #32,-(a7)        back to user mode
    trap    #1            call gemdos
    addq.l    #6,a7            clear stack
* end set user
    
    rts
    

old_resolution    dc.w    0

old_stack    dc.l    0

old_screen    dc.l    0

old_vbl    dc.l    0

    section bss

old_palette    ds.l    8
    
saulot napisał/a:

ale co to za filozofia?

Ablolutnie żadna. Ale jak się tego nie robiło, a tylko o tym czytało i to z 15 lat temu, to trzeba znaleźć gdzieś te wszystkie adresy. Ale skoro już podałeś to dzięki :)

41

z Jurym rozwiązaliśmy problem.
Okazuje się że tutoriala perihelion nie jest do końca cacy i trzeba go poprawić:

orginał

restore    
* restores the old resolution and screen adress
    move.w    old_resolution,d0    res in d0
    move.w    d0,-(a7)        push resolution
[...]

zpaczowany:

restore    
    move.l    old_vbl,$70
* restores the old resolution and screen adress
    move.w    old_resolution,d0    res in d0
    move.w    d0,-(a7)        push resolution
[...]

Teraz powinno być git.

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

42 Ostatnio edytowany przez jury (2011-06-21 17:02:04)

To nie tutorial periheliona :) On jest dobry, akurat backup i odzyskanie ( w złym miejscu ) adresu vbl'a dodałem ja :D
Dziękiiiiiiiii za pomoc miszczu, działaaaa :)
No i oczywiście nie trzeba dodawać swojej procedurę do defaultowej kolejki vbl. Wczoraj w Intern ST wyczytałem co w tej kolejce jest i tak naprawdę przydatne jest wyświetlanie kursora ( reszta to tak jak wcześniej pisałem, "bzdury" ), czyli tak naprawdę przydaje się to jak się pisze coś GEMowego :P

Trzeba, nie trzeba - kolejka VBLi jest rozwiązaniem 'systemowym'. W demie czy grze które rezerwują całą maszynę, jej użycie jest i tak trochę bez sensu, lepiej podpinać się bezpośrednio pod $70, bo masz wtedy 100% kontroli nad wykonywanym kodem.

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

44

A jak sterować blitterem z poziomu GFA?

ATARI Falcon 14MB , STE 4MB, STFM 4MB, 800 XL turbo CA12 CA 2001, CPC 6128 mono, THOMSON MO5, SVI 738, Amiga 500+, 600 2MB, CDTV   + , CD32

45

o tak
http://www.atari-forum.com/viewtopic.ph … mp;t=21191

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

Ponoć wbudowana funkcja GFA RC_COPY używa blittera, ale pewności nie mam.

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

47

GFA powinno umrzeć. Nigdy nie powstać :)

What can be asserted without proof can be dismissed without proof.

48

Tak, już to słyszałem- GFA jest dla kobiet. A sterownie dźwiękiem cyfrowym z poziomu GFA?

ATARI Falcon 14MB , STE 4MB, STFM 4MB, 800 XL turbo CA12 CA 2001, CPC 6128 mono, THOMSON MO5, SVI 738, Amiga 500+, 600 2MB, CDTV   + , CD32

To już trzeba ręcznie po rejestrach lecieć (POKE). Da się, robiłem to... nosz k*wa jak dawno temu :(

Sqward, co cię GFA aż tak skrzywdził? ;)

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

50

leniuk napisał/a:

Tak, już to słyszałem- GFA jest dla kobiet.

Tak, na tym forum można wiele ważnych i mądrych rzeczy się dowiedzieć :D