Czy w trybie AND (4) zachodzi optymalizacja z source"=$FF?
Edit: Głupie pytanie. Uprasza się admina o usunięcie cichcem :P
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Rusza głosowanie w FujiCup! Wybierz najlepszą grę roku na 8-bitowe Atari i weź udział w corocznym plebiscycie FujiCup.
Atari800MacX 6.2.0 Popularny emulator Atari dla macOS doczekał się dużej aktualizacji z obsługą nowych kartridży.
Gearlynx 1.1.3 Nowa wersja emulatora konsoli Atari Lynx wprowadza binaria dla Linux ARM64 i ulepszony debugger
VQ Tracker Beta 2 Nowa wersja cross-platformowego trackera muzycznego dla Atari XL/XE z poprawkami błędów.
15. edycja BASIC 10 Liner Contest Ruszyła kolejna edycja konkursu na gry i programy napisane w zaledwie 10 liniach kodu.
atari.area forum » Posty przez mono
Czy w trybie AND (4) zachodzi optymalizacja z source"=$FF?
Edit: Głupie pytanie. Uprasza się admina o usunięcie cichcem :P
Dzięki ajcek. Późno już było, lecz dziś jest nowy lepszy dzień w związku z czym poszukałem forum i oto: http://www.atari.org.pl/forum/viewtopic.php?id=10265
Szkoda.
Zadanie: dokonać rotacji w lewo bloku "len" danych zaczynającego się we "from"; wynik umieścić w "to"
0: to+len=0 ;clear bit shifted into end of buffer (1 if bit should be set)
1: mode=0, and=$00, xor=$7f, src=xxx, dst=to ;fill buf with $7f
2: mode=1, and=$80, xor=$00, src=from, dst=to ;copy $80 to buf when source value has highest bit set
3: mode=2, and=$00, xor=$81, src=xxx, dst=to ;buffer contains shifted out bits shifted into lowest bits
4: mode=2, and=$ff, xor=$00, src=from, dst=to+1 ;add
5: mode=2, and=$ff, xor=$00, src=from, dst=to+1 ;addWynik operacji znajduje się w "to"+1.
"from" nie jest modyfikowany.
"to" powinien mieć rozmiar o 1 bajt większy niż "from".
Jeśli dobrze liczę VBXE będzie realizować rol pojedynczego bajtu w 7/8 cykli (czy można by prosić o diagramy dla operacji blittera tak, żeby można było sobie precyzyjnie policzyć czasochłonność blitów).
Edit: styl
Ech te gry z Ultimate są po prostu śliczne!
Pięknie gra.
A gdzie opcja "wszystkie"? Ankieta jest tendencyjna :/
Czy zadając blit w trybie 2 (ADD) można spowodować, żeby operacja ta odbywała się Z PRZENIESIENIEM?
Edit: Przeniesienie mogłoby działać tylko w obrębie pojedynczej linii.
Atari zamknięte? Hmmm...
A jakie ma znaczenie czy dodatki robi firma macierzysta (która nota bene nie istnieje, bo zbankrutowała) czy firmy trzecie? Cały pece opiera się na działalności firm trzecich. Kto kupuje IBMa?
Celowo było 8086 dla uwypuklenia absurdu.
Otóż to. Co prawda Atari Inc i Atari Corp już nie ma, ale sprzęt żyje, a więc się też i rozwija dzięki inicjatywie prywatnej. Właśnie montuje się rozwojowe wersje procesora do maszyny, projektuje rozszerzenia (pamięci, grafiki, dźwięku, urządzenia io), więc jeśli ktoś chce żeby jego programy działały na 8086 z magnetofonem, to jego sprawa.
@xxl: Za wąska w biodrach. Tutaj jest model niewybrakowany: http://www.dereatari.republika.pl/images/3xe_2.jpg (między nimi inwalida).
Patologika.
vi + mads + atari800 + franny + iconv + make + sio2bsd + atari65xe :)
Jakże się myliłem. Czy mógłbyś podesłać te atry? Sprawdzę co się dzieje.
Edit: Kompatybilność na poziomie wpisów w katalogu jest zachowana - inne nieco jest vtoc, no i linki 16-bitowe w sektorach (to moje usprawiedliwienie :P, ale fakt jest faktem - Franny nie pokazuje wpisów).
A dlaczego wszystko chcecie mieć w assemblerze, a nie chcecie korzystać z zewnętrznych narzędzi? IMHO assembler powinien w zasadzie tylko assemblować mnemoniki i generować kod relokowalny dla linkera, a linker na podstawie modelu pamięci i rodzaju pliku wynikowego powinien wygenerować co trzeba (nierelokowalne lub relokowalne).
Jak Fox powiedział - generowanie dodatkowych danych załatwia make, włączanie tego do kodu załatwia preprocesor, kompilację assembler. Tebe ma mniej roboty, mads działa lepiej bo jest łatwiejszy w utrzymaniu i wszyscy są zadowoleni.
Duże dyski MyDOS zakładają nieco inny system plików niekompatybilny z AtariDOS. MyDOSa obsługuje mój ataridosfs i xedisk, Franny tego niestety nie potrafi :/
side, sdx, sparta commander, vbxe, s2:, last word
Zasysamy tak:
$ cvs -d:pserver:anonymous@atari8.cvs.sourceforge.net:/cvsroot/atari8 login
$ cvs -z3 -d:pserver:anonymous@atari8.cvs.sourceforge.net:/cvsroot/atari8 co -P frannyPrzy logowaniu podajemy puste hasło. Kod franny znajdzie się w podkatalogu franny.
To wszystko opisane jest o tu.
Edit: A pacza to już standardowo:
$ patch -p0 <franny-20140107-sdx2x512bps.diffSparkling icicles piękne! Dzięki.
Dodałem support dla:
- 512b sektorów .ATR,
- wersja 2.1 SpartaFS,
- atrybut A w listingu.
Paczowałem wersję z CVS z dnia 7 I 2014 (jak sama nazwa pacza wskazuje).
To szybka poprawka i może nie najlepsza, ale jak na razie zachowuje się poprawnie :) więc jakby komuś się przydało to proszę bardzo.
Edit: Atrybut.
Sprawdziłem ten BiboDOS (wersja 6.4.RF 1988 Compy Shop DE).
Okazuje się, że SD i DD są identyczne, jak w DOS 2.
MD jest identyczny, jak w DOS 2.5 za wyjątkiem tego, że sektor $2D0 jest dostępny w fsie więc total sectors jest $3F3 a nie $3F2.
Nie ma za to gęstości Q, lecz XF (DSDD) - czyli $5A0 sektorów DD. I ten format zawiera:
- identyfikator fsa VTOC[0] = 3,
- total sectors VTOC[1..2] = $593 co sugerowałoby, że $5A0 jest niedostępny dla fsa,
- mapa bitowa VTOC[$0A..$BD] ($5A0 faktycznie jest niedostępny)
- directory jest w sektorach $169..$170 i zawierają po 16 wpisów jeden za drugim bez żadnych kombinacji
Linki do sektorów są rozwiązane jak w mydłosie - 2 bajty na sektor, 1 bajt na ilość danych.
Edit: bardziej po ludzku
W programach relokowalnych dla SDX potrzeba czasem znać indeks bloku (w pliku), w którym znajduje się obiekt (procedura, dane).
Czy w związku z tym można by mieć możliwość np. nazywania bloków za pomocą etykiety:
kod1: blk reloc main
...
kod2: blk reloc extended
...dzięki temu mógłbym sobie adresować tablicę EXTENDED+3 w taki sposób:
lda EXTENDED+3+kod1
jsr JEXT_ON
...
jsr JEXT_OFF
lda EXTENDED+3+kod2
jsr JEXT_ON
...
jsr JEXT_OFFco gwarantowało by mi dostęp do odpowiedniego bloku pamięci.
Problematyczne jest też wykorzystanie blk empty, ponieważ rzadko zachodzi potrzeba rezerwacji pojedynczego bufora, jako osobnego bloku pamięci (tym bardziej, że loader ogranicza ilość bloków relokowalnych), a bardzo często pojedynczy blok empty dzielony jest na kilka różnych buforów lub zmiennych. Czy można by dodać taką konstrukcję:
blk empty main/extended/$xx
dane1: .ds 20
dane2: .ds 30
adres: .ds 2która generowałaby odpowiedni blok empty (pojedynczy). W połączeniu z nazywaniem bloków blk pozwalałoby to na ładny dostęp do pamięci w programach dla SDX.
Edit: Oczywiście nie upieram się przy etykiecie - może to być nazwa bloku deklarowana np:
blk empty main/extended/$xx nazwa
blk reloc main/extended/$xx nazwaczy jak by tam było wygodnie.
Natknąłem się na błędne działanie:
blk reloc main
rutynal = *+1
ldx #<rutyna
rutynah = *+1
ldy #>rutyna
rts
rutyna:
nop
rtsWystąpiło coś takiego w plemniku no i mimo, że w statycznym (blk sparta) bloku te bajty były wyliczane i aktualizowane na poprawny adres rutyny, to coś się w kodzie psuło (w tym przypadku nie chciało działać z biblioteką ENV.SYS, ale nie wiem czemu).
Jeśli dobrze zrozumiałem drac030, to winne były fixupy dla rutyna.
Ponieważ dochodzenie co się stało (nie widać błędów w listingu programu -l, a kod pod emulcem często wygląda poprawnie), to może dałoby się spowodować, żeby konstrukcja #<. #> i #^ nigdy nie generowała fixupa? Albo przynajmniej niech rzuca błędem, że tak nie można...
Dzięki pomocy drac030 okazało się, że problem nie leżał po stronie ENV.SYS, a na styku człowiek-mads.
Wersja 1.08 dostępna, a wraz z nią:
* wykrywanie czy plemnik już zainstalowany (poprzez symbol WORM) opatrzone stosownym komunikatem,
* możliwość zmiany opóźnienia w locie za pomocą:
POKE WORM,V* /F pozwala na wymuszenie instalacji bez względu na ilość pamięci, którą trzeba zaalokować nadmiarowo aby spełnić wymagania ANTICa (program bez tego przełącznika zainstaluje się wyłącznie kiedy nie trzeba alokować nadmiarowo pamięci - w przeciwnym wypadku wypisze komunikat i wróci do DOSa).
Wartość wstawiana do komórki wskazywanej symbolem WORM obliczona może być ze wzoru:
V=128-D*TV/256
gdzie
V - wartość wpisywana do WORM
D - opóźnienie liczone w sekundach
TV - ilość ramek przypadających na sekundę w danym systemie TV (50=PAL, 60=NTSC)
Smacznego
atari.area forum » Posty przez mono
Wygenerowano w 0.085 sekund, wykonano 14 zapytań