826

(11 odpowiedzi, napisanych Programowanie - 8 bit)

szybka detekcja kolizji, interko Raster/CPU

w Pangu detekcja kolizji kuli z bohaterem, kolizji harpun-kula realizowane są przez w/w metodę nachodzących się prostokątów/kwadratów (kula opisana jest poprzez wpisany w nią kwadrat), natomiast detekcja kuli - otoczenie (murki etc.) realizowana jest na znakach, z tym że dla każdego przesunięcia X kuli (X=<0..3>) jest inna detekcja, uwzględniająca przesunięcie 1 pikslowe, tylko to gwarantuje dokładną detekcję

w większości przypadków stosuje się metodę z czworokątem (w załączniku), czyli albo prostokąt albo kwadrat, jeśli się uprzeć to jakiś inny kształt też da się opisać takimi czworokątami

jak widać na postawie programiku z załącznika detekcja może być szybka

tutaj wersje bardziej pierwotne metody detekcji zaprezentowanej przez Rastera, dział poświęcony duchom C64
http://codebase64.org/doku.php?id=base:sprites

tutaj dla różnych kształtów
http://en.wikipedia.org/wiki/Point_in_polygon

kolizje kul z przykładową animacją, zmianą kierunku po uderzeniu etc. gdyby ktoś chciał robić bilard albo pinball to koniecznie musi to obejrzeć
http://processing.org/learning/topics/c … ision.html

827

(22 odpowiedzi, napisanych Programowanie - 8 bit)

ustawianie odpowiedniego rozmiaru rejestrów realizowane jest poprzez makra, parametrem jest wartość 8 lub 16

828

(22 odpowiedzi, napisanych Programowanie - 8 bit)

w mads jest też możliwość śledzenia rozmiaru rejestrów OPT T+

    opt c+t+
    org $2000

    rep #$20

    lda #0

dla w/w przykładu wystąpi komunikat błędu
ERROR: Bad register size

w tym przypadku prawidłowo powinno być

 lda.w #0

OPT T+ sprawdza rozmiar tylko dla adresowania absolutnego #

829

(22 odpowiedzi, napisanych Programowanie - 8 bit)

w mads ORG-a można zaprojektować wg potrzeb

 opt h-f+
 ORG [a(start), a(over-1)],$2000

start
         nop
over

adres asemblacji po nawiasie kwadratowym jest wymagany, zadziała to tylko gdy OPT H-

dla wspomnianego nagłówka $FBFB, ORG może wyglądać tak:

    opt h-c+
    ORG [a($fbfb),t(prg_start,prg_end-1)],$FFFF80

prg_start
    nop

prg_end

adresy są 24 bitowe

p.s.
w załączniku mads po poprawce, akceptuje adresy ORG 24 bit gdy OPT C+

830

(22 odpowiedzi, napisanych Programowanie - 8 bit)

laoo/ng napisał/a:

Te fragmenty w dokumentacji znam, ale nie tłumaczą one np. jak otrzymać 16 młodszych bitów z adresu 24-bitowego.

pewnie przesuwają bity >> lub << lub AND-ując

możesz też stworzyć jakieś makro które będzie wycinać konkretnie

p.s.
ORG powyżej $FFFF mads nie obsłuży, bo nie miałby jak zapisać tego do wyjścia. ATARI DOS czy SDX nie obsługują adresów > $FFFF

831

(22 odpowiedzi, napisanych Programowanie - 8 bit)

Możliwe jest użycie rozszerzenia mnemonika po znaku kropki '.' dla rozkazów typu LDA, LDX, LDY, STA, STX, STY:

   .b lub .z          BYTE
   .a lub .w lub .q   WORD
   .t lub .l          TRIPLE, LONG (24bit)

np.
   lda.w #$00   ; A9 00 00
   lda   #$80   ; A9 80

Wyjątki stanowią rozkazy n/w, którym nie można zmienić rozmiaru rejestru w adresowaniu absolutnym (niektóre assemblery nie wymagają dla tych rozkazów podania znaku '#', jednak MADS wymaga tego)
#$xx

   SEP   REP   COP

#$xxxx

   PEA

Innym wyjątkiem jest tryb adresowania pośredni długi, który reprezentowany jest przez nawiasy kwadratowe [ ]. Jak wiemy tego typu nawiasy wykorzystywane są też do obliczania wyrażeń, jednak jeśli asembler napotka pierwszy znak '[' uzna to za tryb adresowania pośredni długi i jeśli nie zasygnalizowaliśmy chęci używania 65816 wystąpi błąd z komunikatem Illegal adressing mode. Aby "oszukać" assembler wystarczy dać przed kwadratowym nawiasem otwierającym '[' znak '+'.

 lda [2+4]     ; lda [6]
 lda +[2+4]    ; lda 6

Unary operators:

+  Plus (does nothing)
-  Minus (changes sign)
~  Bitwise not (complements all bits)
!  Logical not (changes true to false and vice versa)
<  Low (extracts low byte)
>  High (extracts high byte)
^  High 24bit (extracts high byte)
=  Extracts memory bank
:  Extracts global variable value

832

(26 odpowiedzi, napisanych Programowanie - 8 bit)

w G2F można wyłączyć wiersze (z prawej strony ekranu ustawić wartości na 0) wtedy zostanie zapisany krótszy MIC

833

(12 odpowiedzi, napisanych Miejsca w sieci)

http://www.zabytkiinformatyki.edu.pl/in … ;Itemid=69

834

(259 odpowiedzi, napisanych Fabryka - 8bit)

a jak wygląda kwestia detekcji kolizji? jakoś wspomagana czy bez wspomagania?

835

(259 odpowiedzi, napisanych Fabryka - 8bit)

xxl napisał/a:

estowo funkcja blittera - zapisanie calego ekranu gr.8 czyli 320x192 pixele stala wartoscia to 193 cykle 6502...

pixele czy całe bajty ?

193 cykle 6502 zajmuje bliterrowi postawienie 320x192 = 61440 pikseli czy postawienie 7680 bajtów odpowiadających tym pikselom ?

836

(259 odpowiedzi, napisanych Fabryka - 8bit)

co w takim razie daje takie przyspieszenie, bo jak wkładam np. kart AtariMax to nie mam przyspieszenia

standardowy kart z nie standardową zawartością ?

konkretniej, bo jak ma być to zgaduj zgadula to równie dobrze może to być kogel mogel

837

(123 odpowiedzi, napisanych Fabryka - 8bit)

bloki co $400 bajtów

 opt h+
 org $4000

 .pages $40

  .align $400

  kod.............

 .align $400

  kod .............

 ...
 ...
 ...

 .endpg

własny nagłówek $ffff,start,end-1+3   (3 bajty napisu 'XXL'), można dać dowolne informacje, należy prawidłowo podać nagłówek w stylu Atari DOS jeśli ma być to ładowane przez Atari DOS, jeśli mamy własny loader możemy postąpić wg uznania

    opt h-
    org $4000

.local    block0
    org [a($ffff, block0, block0+.len(block0)-1+3), c'XXL'],*
    
    lda #0
.endl

    org $4400

.local    block1
    org [a($ffff, block1, block1+.len(block1)-1+3), c'XXL'],*

    nop

.endl

838

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

masz na myśli te gry dla dzieci we flashu itp. na onecie, ubieranki są ulubionym zajęciem poza oglądaniem bajek

839

(123 odpowiedzi, napisanych Fabryka - 8bit)

wystarczy usunąć znak #

  lda <(LINES-1)*40

i będzie OK, jest to zgodne z konwencją QA

840

(638 odpowiedzi, napisanych Programowanie - 8 bit)

nazwy nielegali podpatrywałem w Atari800Win, stąd Mads ich używa, można wstawić dodatkowe nazwy mnemoników jako alternatywę

841

(22 odpowiedzi, napisanych Zloty)

prezentacja prac będzie w 3d czy 2d ? bo teraz 3d jest w modzie, może Pinek dokona konwersji do 3d :D

842

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

Super Packer też może pomóc

843

(4 odpowiedzi, napisanych Miejsca w sieci)

ostatnio coś podobnego udało mi się uzyskać w Notepad++ który jest lżejszy aniżeli Visual Studio czy WUDSN

plugin Explorer z lewej i plugin FunctionList z prawej

plugin Explorer można zassać przy pomocy wbudowanego menadżera, FunctionList nie jest na tej liście z powodu problematyczności, w załączniku ZIP z plikami i instrukcją instalacji, osobno DLL który jest stabilny

dodatkowo FunctionListRules.xml dla MADS-a, pokazuje listę dla .PROC, .LOCAL, .MACRO, .ENUM, .STRUCT

844

(123 odpowiedzi, napisanych Fabryka - 8bit)

nowy mads 1.9.4 już jest http://mads.atari8.info

najważniejsza zmiana to możliwość nazywania parametrów makr, czyli większa przejrzystość kodu, łatwiej zrozumieć co makro wyczynia z parametrami

.macro SetColor val,reg
 lda :val
 sta :reg
.endm

.macro SetColor2 (arg1, arg2)
 lda #:arg1
 sta arg2
.endm

p.s.
w planach napisanie nowego kodu obsługującego pętle .REPT tak aby można było je zagnieżdżać, aktualnie aby to obejść trzeba posiłkować się makrami

845

(73 odpowiedzi, napisanych Fabryka - 8bit)

a dlaczego nie działa z komputerem Pinokia ?

846

(123 odpowiedzi, napisanych Fabryka - 8bit)

może dodam jeszcze dla Tych którzy są oburzeni potrzebą użycia znaku $ dla oznaczenia wartości Hex jest alternatywa, mogą użyć 0x, Candle z lubością tego używa

dla Tych którzy są oburzeni potrzebą kończenia bloku .LOCAL czy innego podobnego tworu odpowiednią dyrektywą .ENDL mogą użyć uniwersalnej wersji i o jeden znak krótszej .END

mogą także użyć klamr znanych z C { }, byle tylko te klamry były w osobnych wierszach

.local name
{
 nop 
 nop
}

czyli dla każdego coś miłego ;)

847

(123 odpowiedzi, napisanych Fabryka - 8bit)

pajero napisał/a:

Oj, prze-kombi-nujecie zaraz.
Proszę wrócić do starych zasad, "LDX #0 cośtam"  bo mi wali błędami.


Inne:
Moja sugestia - plik *.lab generuje etykiety UPCASE - proszę zrobić jak w orginale *.ASM.

Czyli, piszę:

           ORG $1730
Etykieta LDX #

to plik LAB  robi
00    1730    ETYKIETA

a winien wypluć
00    1730    Etykieta

od tego jest przełącznik -c Label case sensitivity

użyj go a będziesz miał w pliku LAB etykiety w takiej postaci jak zapisałeś, tylko miej na uwadze to że

Etykieta
etykieta

to dwie różne etykiety

848

(123 odpowiedzi, napisanych Fabryka - 8bit)

mono napisał/a:

Hmmm. A co myślicie o czymś takim:?

lda #
ldx #
ldy #

Co powinno się zdarzyć?

zdarzy się ZERO

lda #0
ldx #0
ldy #0

849

(123 odpowiedzi, napisanych Fabryka - 8bit)

w załączniku mads po poprawce, tzn.

jeśli użyjemy łączenia mnemoników poprzez znak ':' będzie po staremu czyli w stylu QA, XASM

jeśli nie będzie łączenia mnemoników znakiem ':' to pojawi się błąd "Extra character in line"

 ldx:dex $00   -> OK
 dex $00         -> ERROR

p.s.
a może tak nauczyć edytor kontroli składni

850

(123 odpowiedzi, napisanych Fabryka - 8bit)

nie można tego traktować jako błąd, jeśli zostanie to zablokowane przestanie działać kod typu

    ldx:dex $00