Przejdź do treści forum
atari.area forum
Twoje polskie źródło informacji o Atari
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Aktywne tematy Tematy bez odpowiedzi
Aktualności ze świata Atari
TURGEN 9.3.0 Kolejna wersja multiplatformowego narzędzia do zarządzania obrazami taśm.
SV 2024 WE - program imprezy Już za tydzień odbędzie się zimowa edycja Silly Venture
Nowa obudowa dla 800XL - zostało 36 dni Niewiele ponad miesiąc do końca kampanii.
Zmarł twórca języka BASIC Zmarł Thomas E. Kurtz twórca języka BASIC
Zmiana serwera atari.area Serwis przeszedł właśnie ważną aktualizację infrastruktury
Opcje wyszukiwania (Strona 59 z 72)
Być może mógłbym dorobić 8 checkboxów (2 POKEYe razy 4 kanały) w następnej wersji ASAPa. Czy o to chodzi?
epi napisał/a:No Atari w trybie PAL ma AFAIR 49,85 ramki na sekundę.
1773447 / 312 / 114 = 49,8607(456140350877192982)
Z tym że to 1773447 to prawdopodobnie +- kilka-kilkadziesiąt Hz.
eru napisał/a:Tak mnie trafiło - może dobrze by było takie kawałki kodu gdzieś umieszczać?
http://sources.atari.pl
eru napisał/a:Atariki jest jedną z opcji... Albo zrobić projekt powiedzmy 'biblioteki programistyczne na atari' na sourceforge i używać CVSa...
Co sądzicie?
Takich gotowych kawałków to nie ma wiele: na myśl przychodzą mi tylko plejery msx i procki do dekompresji (BTW. optymalizuję inflate - obecnie ma 512 bajtów, w Numenie >700). Procedury mnożenia to bardziej nadają się do Atariki - np. można przepisać mojego arta z Syzygy.
To żeby dobić do okrągłych 8 stron ja napiszę, że Apple stuknęła 30-ka. Bo temat zdaje się o macach?
eru napisał/a: lda #:1 ; A-lo - signed
...
ldy #:2 ; B-lo - unsigned
...
lda #:3 ; B-hi - signed
Mnożenie stałych? W takim razie mój kod wygląda tak:
mwa #[A*B]&$FFFF wynik
:[A*B]>>16!=[A*B]>>8 lda #[A*B]>>16
sta wynik+2
Można to jeszcze zoptymalizować, ale 15 cykli w najgorszym przypadku jest zadowalającym wynikiem.
eru napisał/a:Inna sprawa, to nie jestem pewien, czy to na 100% dziala dla wszystkich przypadkow.
Nie przeprowadziłeś dowodzenia poprawności? Uuuu...
;)
pr0be napisał/a:eru->zapytac sie Fox'a to dobra idea, on ma w tej dziedzinie chyba najwieksze doswiadczenie ;)
Jakieś zabawy ze znakiem na końcu tego kodu to raczej niepotrzebne. Jak się dobrze zaindeksuje x*x/4 to wynik wychodzi od razu z właściwym znakiem.
eru napisał/a:Ale jak zoptymalizowac 16x8 to jeszcze nie widzialem. W Numenie jest bodajze 16x16, ale nie zoptymalizowane.
Zoptymalizowane, tylko że na długość. Na szybkość to trzeba po prostu zinlajnować JSRy.
Widać nie bardzo wiadomo, jak zmieniać te rozszerzenia plików, może po prostu lepiej zostawić w oryginalnym formacie. ;)
A jeśli chodzi o carty, to na każdym carcie (a nie tylko ramcarcie) można umieścić loader COMów i nawet XEXów i po sprawie. Można wrzucić kilka COMów i kilka XEXów na cart i wybierać je z menu.
Nieco trudniejsze rozwiązanie, to rozczaić, jak w CC65 ustawia się obszary pamięci dla linkera (tak żeby kod i stałe były relokowane w obszar carta) i jak działa procedura inicjalizująca dla Atari, czyli crt0.
Ja bym opuścił "GO TO" i zostawił sam nr linii. Jak wiadomo "goto" świadczy o złym stylu. ;)
xxl napisał/a:moja metoda tu sie calkowicie wyklada : 34 bajty
Moja wykłada się jeszcze bardziej. :)
xxl napisał/a:i taka mala prosba :-) czy mozna bezczelnie zapierniczyc Twoja procke do rozpakowania plansz w gierce? oczywiscie wymieniajac Cie na liscie plac ?
Bezczelnie zapierniczyc lepiej nie próbuj, ale jeśli grzecznie zapierniczysz, to proszę bardzo. ;)
Łącząc pomysł Sebana z pomysłem Magnusa i pewnym moim spostrzeżeniem otrzymujemy 78-bajtową prockę dekompresji. Oba obrazki mają po 11 bajtów.
zp equ $80 ; $18
sreg equ zp+$17 ; 1
inp equ $98 ; 2
org $8000
decompr
lda #$80
ldx #23
ldy #0
decompr_byte
sty zp,x
decompr_bit
asl @
bne decompr_next
lda (inp),y
inw inp
rol @
decompr_next
inc zp,x
bcs decompr_bit
dex
bpl decompr_byte
ldx #23
draw_byte
ldy zp,x
dey
mva (inp),y sreg
txa
pha
lsr @
php
asl @
plp
rol @
asl @
asl @
tax
eor #15
tay
draw_pixel
lda sreg
and #2
lsr sreg
adc #$51
lsr sreg
draw_store1
sta scr1,x+
draw_store2
sta scr1,y-
txa
and #3
bne draw_pixel
pla
tax
dex
bpl draw_byte
rts
pic1 dta %10010010,%01001100,%10011110,%01110011,%00100100,%10000000,%01010001,%01010101,%01011001,%00010101,%11010101
pic2 dta %11011010,%01001001,%00111100,%10011100,%10010010,%01101100,%01010100,%01010101,%00000000,%01011001,%11111101
main
mva #$21 $22f
mwa #dl $230
mwa #pic1 inp
mwa #scr1 draw_store1+1
mwa #scr1 draw_store2+1
jsr decompr
mwa #pic2 inp
mwa #scr2 draw_store1+1
mwa #scr2 draw_store2+1
jsr decompr
jmp *
dl dta $70,$70,$46,a(scr1)
:11 dta 6
dta $70,$70
:12 dta 6
dta $41,a(dl)
scr1 org *+192
scr2 org *+192
run main
end
heaven napisał/a:; Uncompress data stored in the DEFLATE format.
This is a good choice if you need high compression ratio and quick decompression.
The destination buffer must be continuous, so if you need the uncompressed data to be scattered in the memory, you need to run an additional simple routine that moves blocks in the memory. Numen, of course, contains such a routine. :)
heaven napisał/a:FP2.1 refuses to pack Venus as well...
There are several problems with packing executables with embedded INIT routines:
* should the INITs be run while loading from disk (each part before INIT is decompressed separately; should the depacker be re-loaded after each part?) or while depacking (whole file is compressed) ?
* INIT routines are free to mess with the memory in an unknown (to the packer) way, therefore the packer does not know which memory remains available
* some INIT routines do system checking such as MEMLO or whether the loaded program is already installed - these checks should be run as early/quickly as possible
* in many cases INIT routines are small and doesn't compress very well if at all
Since I found no good solution, FP simply rejects executables with embedded INIT routines.
My experience is that INIT routines are especially useful for "loading" messages and these can be easily added to the already packed executable.
heaven napisał/a:all packers who can handle depacking under ROM can't start the Code at $f000 after depacking...
Not true, FP can do that.
BTW. kto ma jakieś pliki TM2 poza tymi, co są razem z TMC, to poproszę na maila.
stryker napisał/a:oo i najlepiej taka wersje gdzie wzucamy atr'a lub xex'a i on sam analizuje dane szukajac muzy :P ... po czym zapisuje do sap'a :-)
Muszę tylko zrobić wypełnianie tagów NAME, AUTHOR, DATE na podstawie wyświetlanych napisów. ;)
śmigło .::. napisał/a:No okay mikey, ale mi chodzi o to jak te równania wyprowadzono. Poprostu chciałbym je zrozumieć, a nie tylko zrzynać i implementować. ;)
To się nazywa algebra liniowa (wykładana zazwyczaj na pierwszym semestrze studiów o kierunku technicznym/ścisłym).
Wzory będą wychodzić nieco różne w zależności od orientacji układu współrzędnych (czy jak to się tam nazywa - chodzi o to, że 3 prostopadłe osie można narysować z różnymi zwrotami), kierunku oraz kolejności obrotów.
Warto nadmienić, że mnożenie funkcji sin/cos można przekształcić na dodawanie/odejmowanie, co daje jeszcze bardziej wielgachne wzory, ale można policzyć całą macierz w jakieś 300 cykli przy użyciu zwykłej tablicy sinusa. Gotowe procki w Numenie.
Bardziej by się przydał kod w C - asma zainteresowani mogą sobie wygenerować.
"Inlajnowanie" procedur runtime-owych raczej niewiele pomoże - myślę, że problem stanowi nieefektywny kod w C.
W C można przekazywać structy przez wartość, co w przypadku małych structów których nie zamierzamy modyfikować jest zdecydowanie bardziej efektywne (niezależnie od procka i kompilatora). Nie wiem tylko, czy CC65 to obsługuje. Sugerowałem użycie 32-bitowych floatów, bo wtedy można zrobić:
typedef long int float;
typedef float double;
i można przekazywać floaty "normalnie".
ASAP 0.2.1 (z obsługą TM2, bez m.in.) pewnie w okolicach łikendu.
Natomiast kolejna wersja SAP Makera (obsługująca te formaty, które obsługuje ASAP) - w bliżej nieokreślonej przyszłości...
Czy konwertowanie na SAP nie będzie konieczne - no nie wiem. ASAP (jeszcze?) nie wygryzł całkiem innych plejerów. ;) Poza tym w SAPach są AUTHOR, NAME, DATE (z drugiej strony w TM2 też jest trochę miejsca na tekst).
Hm, to przy okazji jeszcze uzupełnianie nazw plików TABem (nawet winda to ma, tyle że zje*ne), Ctrl+L zamiast Ctrl+Clear, Ctrl+D zamiast Ctrl+3 (efektem w shellu jest logout)... ;)
A poważnie to nie można w SDX zwyczajnie najechać kursorem na poprzednią komendę o ile jeszcze jest na ekranie?
Stary patent. Nawet heyah ma taki wygaszacz pod windę na stronie.
Bardziej hardcorowe byłoby np. wyświetlanie w kodzie Graya.
Albo ósemkowo (zegarek powinien wyglądać normalnie, żeby nie wzbudzać podejrzeń). :)
Albo LFSR (czyli to co jest w POKEYu do generowania zniekształceń) zamiast licznika.
drac030 napisał/a:FP atarowskie wykorzystuje inny porządek niż naturalny dla 6502 (mantysa jest zapisywana od najstarszego bajtu do najmłodszego).
Mantysa jest w BCD, a 6502 ma operacje BCD tylko 8-bitowe, więc ciężko mówić o jakimś naturalnym porządku bajtów. >;->
piotrv: jeśli chodzi o wykładnik, to przecież może on być wykładnikiem 4 , 16 czy wręcz 256 a nie 2 i od razu będzie większy zakres liczb. Jeśli wybierzesz wykładnik 256 to operacje w rodzaju dodawania powinny dostać kopa (wydajnościowego), nawet jak dołożysz bajt na mantysę żeby nie tracić na dokładności.
drac030 napisał/a:Szkoda, że liczby FP nie są little endian - można byłoby lepiej wykorzystać 816,
Jeśli sam implementujesz FP, to możesz jak najbardziej wybrać reprezentację little-endian.
drac030 napisał/a:a dla 6502 to chyba wszystko jedno.
W przypadku CC65 korzystniejsze wydaje się big endian - tj. wykładnik w akumulatorze (dla intów i longów jest tam LSB).
Nie szybkie tylko krótkie. Cztery podstawowe operacje arytmetyczne oraz konwersje z/na int w niecałych 256 bajtach kodu, logarytmy i exp w 512 bajtach - całkiem nieźle. Na 6502.org nie znalazłem najtrudniejszych operacji dla takiej reprezentacji floatów: konwersji z/na string.
W jakimś bajtku pisało chyba, że Indus GT to marka LDW w USA - fizycznie stacja jest identyczna z LDW2000.
Znalezione posty [ 1,451 do 1,475 z 1,800 ]
Forum oparte o: PunBB
Currently installed 7 official extensions. Copyright © 2003–2009 PunBB.
Wygenerowano w 0.057 sekund, wykonano 26 zapytań