1,451

(11 odpowiedzi, napisanych Emulacja - 8bit)

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?

1,452

(32 odpowiedzi, napisanych Scena - 8bit)

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.

1,453

(89 odpowiedzi, napisanych Programowanie - 8 bit)

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.

1,454

(170 odpowiedzi, napisanych Bałagan)

To żeby dobić do okrągłych 8 stron ja napiszę, że Apple stuknęła 30-ka. Bo temat zdaje się o macach?

1,455

(89 odpowiedzi, napisanych Programowanie - 8 bit)

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.

1,456

(89 odpowiedzi, napisanych Programowanie - 8 bit)

eru napisał/a:

Inna sprawa, to nie jestem pewien, czy to na 100% dziala dla wszystkich przypadkow.

Nie przeprowadziłeś dowodzenia poprawności? Uuuu...

;)

1,457

(89 odpowiedzi, napisanych Programowanie - 8 bit)

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.

1,458

(9 odpowiedzi, napisanych Programowanie - 8 bit)

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.

1,459

(14 odpowiedzi, napisanych Programowanie - 8 bit)

Ja bym opuścił "GO TO" i zostawił sam nr linii. Jak wiadomo "goto" świadczy o złym stylu. ;)

1,460

(3 odpowiedzi, napisanych Bałagan)

http://www.orneta.net/news.php?wybrano=13&idkat=1

1,461

(45 odpowiedzi, napisanych Programowanie - 8 bit)

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. ;)

1,462

(45 odpowiedzi, napisanych Programowanie - 8 bit)

Łą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

1,463

(21 odpowiedzi, napisanych Software, Gry - 8bit)

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.

1,464

(12 odpowiedzi, napisanych Software, Gry - 8bit)

BTW. kto ma jakieś pliki TM2 poza tymi, co są razem z TMC, to poproszę na maila.

1,465

(12 odpowiedzi, napisanych Software, Gry - 8bit)

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. ;)

1,466

(6 odpowiedzi, napisanych Programowanie - 8 bit)

ś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).

1,467

(6 odpowiedzi, napisanych Programowanie - 8 bit)

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.

1,468

(44 odpowiedzi, napisanych Programowanie - 8 bit)

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".

1,469

(12 odpowiedzi, napisanych Software, Gry - 8bit)

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).

1,470

(22 odpowiedzi, napisanych Software, Gry - 8bit)

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?

1,471

(23 odpowiedzi, napisanych Sprzęt - 8bit)

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.

1,472

(44 odpowiedzi, napisanych Programowanie - 8 bit)

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.

1,473

(44 odpowiedzi, napisanych Programowanie - 8 bit)

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).

1,474

(44 odpowiedzi, napisanych Programowanie - 8 bit)

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.

1,475

(9 odpowiedzi, napisanych Sprzęt - 8bit)

W jakimś bajtku pisało chyba, że Indus GT to marka LDW w USA - fizycznie stacja jest identyczna z LDW2000.