851

(11 odpowiedzi, napisanych Programowanie - 8 bit)

w Mario Bros (konwersja z 5200) detekcja kolizji polega na sprawdzeniu podczas odrysowania ducha programowego, czy tło jest <> 0, jeśli jest różne to kolizja i dalsze uściślanie z czym ta kolizja nastąpiła

http://madteam.atari8.info/gry/mario2007.7z

stawianie/kasowanie duchów realizuje jedna procedura, dzięki metodzie EOR (XOR), czyli aby skasować poprzednio postawionego ducha, stawiamy ostatni kształt ducha ale przez EOR, aby postawić nową klatkę ducha używamy OR

pewne dodatkowe operacje są wymagane aby wiedzieć czy wcześniej była postawiona jakaś klatka ducha czy zaczynamy od czystego ekranu

dzięki tej metodzie udało zmieścić się intro do Panga w 2KB, bez potrzeby używania dwóch buforów dla zachowania płynności animacji obiektów

852

(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

853

(22 odpowiedzi, napisanych Programowanie - 8 bit)

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

854

(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 #

855

(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+

856

(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

857

(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

858

(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

859

(12 odpowiedzi, napisanych Miejsca w sieci)

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

860

(259 odpowiedzi, napisanych Fabryka - 8bit)

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

861

(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 ?

862

(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

863

(124 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

864

(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

865

(124 odpowiedzi, napisanych Fabryka - 8bit)

wystarczy usunąć znak #

  lda <(LINES-1)*40

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

866

(644 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ę

867

(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

868

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

Super Packer też może pomóc

869

(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

870

(124 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

871

(73 odpowiedzi, napisanych Fabryka - 8bit)

a dlaczego nie działa z komputerem Pinokia ?

872

(124 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 ;)

873

(124 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

874

(124 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

875

(124 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