atarionline.pl Empty string in MADS - Forum Atarum

Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

  • :
  • :

Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    • 1: CommentAuthorrudla
    • CommentTime16 Feb 2010
     
    Hi,

    I need some help with MADS.

    I need to generate strings. I'm using directive

    dta c'haha', b(155), b(0)

    However, if I specify empty string:

    dta c'', b(155), b(0)

    I get ERROR: String error

    Is there some way to do this. Of course I can remove the c'' part, but the code is generated, so I would prefer not to need to handle it.
    • 2: CommentAuthortebe
    • CommentTime16 Feb 2010
     
    rudla send you request to author

    but Error: String Error is OK for empty string
    • 3: CommentAuthortEDDYbOAR
    • CommentTime17 Feb 2010
     
    You cannot declare empty char same as you cannot declare byte with no value.

    Declaration need to have a value.
    • 4: CommentAuthor0xF
    • CommentTime17 Feb 2010 zmieniony
     
    Empty string should be valid because it has clear semantics. I'm surprised Quick Assembler and xasm report "string error" as well. Now Tebe can claim MADS reports an error just for compatibility. ;-)
    • 5: CommentAuthorrudla
    • CommentTime17 Feb 2010
     
    I have already programmed a workaround but I do not think, this is logical behavior (although I would kind of understand it is due to some internal requirements of MADS).

    But would you expect ATARI BASIC report error on A$ = "" ?
    Or C when doing char * a = ""; ?
    • 6: CommentAuthorat0mic
    • CommentTime15 Mar 2012 zmieniony
     
    zacząłem się już zniecierpliwiony złościć na siebie że nie mogę nic uruchomić co się kompiluje MADS'em

    opis MADS jest dla mnie tak niezrozumiały w porównaniu z KickAssemblerem z C64 że po malutku wysiadam.

    Czy trzeba jeszcze jakiś linker żeby zrobić plik uruchamialny na ATARI ?

    pls help, mam dośc pisania w monitorze emulatora bo na drugi dzień nie wiem co to miało robić...
    • 7: CommentAuthormono
    • CommentTime15 Mar 2012
     
    Plik uruchamialny .xex (mads nadaje mu chyba rozszerzenie .obx) generujesz za pomocą:
    opt h+ o+
    • 8: CommentAuthorxxl
    • CommentTime15 Mar 2012 zmieniony
     
    opt h+l+o+

    org $600
    start lda $d20a
    sta $d01a
    jmp start

    run start


    przyklad
    • 9: CommentAuthorat0mic
    • CommentTime15 Mar 2012 zmieniony
     
    to może napiszę i będzie łatwiej znaleźć co źle robię:

    uruchamiam mads w okienku wirtualnej konsoli DOS
    (CMD.EXE) pod Windows XP poleceniem mads nazwa_pliku

    do edycji źródła na razie używałem dosowego polecenia edit nazwa_pliku.a8

    używam rozszerzenia .a8 dla atari bo .asm już użyłem dla źródeł dla C64

    wpisałem wiernie przykład od xxl i zapisałem do pliku nowy.a8

    w konsoli wpisałem:
    G:\a8\MADS>mads nowy.a8
    nowy.a8 (1) WARNING: No ORG specified
    opt h+l+o+
    nowy.a8 (1) ERROR: Undeclared macro H (BANK=0)

    i teraz zastanawiam się czy to musi być przerobione z ASCII na ATASCII żeby udała się translacja przez MADS z mnemoników na kod maszynowy ??

    opt  h+l+o+


    org $600
    start lda $d20a
    sta $d01a
    jmp start

    run start

    rozumiem że program ma siać kolorami na ramce

    dziękuję za odpowiedzi i proszę jeszcze o pomoc bo nie jestem zbyt bystry jak widać...
    • 10:
       
      CommentAuthormgr_inz_rafal
    • CommentTime15 Mar 2012 zmieniony
     
    Spróbuj dać TAB przed opt.

    ; comment - bo forum wcina tabulacje
    opt h+l+o+

    org $600
    start lda $d20a
    sta $d01a
    jmp start

    run start
    • 11: CommentAuthorat0mic
    • CommentTime15 Mar 2012 zmieniony
     
    @mgr_iż_rafał - działa

    @all dziękuje za pomoc.

    a teraz pytanko techniczne - jaki jest mechanizm auto- uruchamiania gier na atari?

    czy program np: wczytuje się w obszar pamięci gdzie jest wektor dla IRQ i po załadowaniu tego miejsca procek sobie skacze w każdej kolejnej ramce pod nadpisany adres ?


    wiem że to jest dla atarowców dość dziwne pytanie bo rzadko kiedy w grze trzeba pisać RUN (no chyba że jest napisana w BASIC'u ale też nie koniecznie) aby w nią zagrać.
    • 12: CommentAuthorxxl
    • CommentTime15 Mar 2012
     
    wazne komorki to $2e2 - INIT i $2e0 - RUN,
    w skrocie na koncu zrodlowego programu napisz RUN adres startu lub org $2e0; dta a(adres startu). loader po zakonczonym procesie ladowania skacze jmp ($2e0)
    • 13: CommentAuthortebe
    • CommentTime15 Mar 2012
     
    OPT jest opcjonalny, domyślnie włączony jest zapis nagłówka H+ i zapis do pliku wynikowego O+, L+ to generowanie listingu

    potrzebny jest tylko ORG, OPT nie jest wymagany jak kiedyś wymagał to Quick Assembler

    jeśli ktoś pisał tylko dla C64 to pewnie przyzwyczaił się że powstaje tylko jeden blok kodu ładowany od adresu $0800, na XE/XL tak nie jest
    • 14:
       
      CommentAuthorjhusak
    • CommentTime15 Mar 2012 zmieniony
     
    @at0mic, zapomnij wszystko, co było "custom" na C64.
    W atari nie ma właściwie żadnych więzów na nic.
    Pamięć ekranu - gdzie bądź, nawet NIGDZIE. Display lista - gdzie bądź, nawet NIGDZIE. Podobnie pamięć fontów i sprajtów. Może być NIGDZIE!
    Jedyne sztywniaki, to:
    pamięć carta pod a000-bfff lub pod 8000-9fff.
    pamięć rejestrów hardware D000-D7ff (stąd atari 64kB ma naprawdę 62 kB RAM)
    pamięć rozszeszona 4000-7fff (jako podmieniane banki)
    stos 100-1ff
    zp 0-ff

    I to wszystko!
    Reszta - totalna samowolka!
    Czyż to nie piękne czyż?

    A jeżeli korzysta się z dobrodziejstw hardware, to trzeba pamiętać, że ciągła pamięć ekranu musi być wewnątrz bloku 4kB (1 lms w dl) a sama dl musi być wewnątrz bloku 1 kB (tzn cała się mieścić)
    Ponadto sprajty odpowiednio zajmują cały blok o długości 1 lub 2 kB a fonty 1 kB (adresy są jednobajtowe, a nawet kilkubitowe :))

    Przez blok rozumiem wyrównana pamięć do wielokrotności długości bloku (cokolwiek to nie znaczy :)
    • 15: CommentAuthorxxl
    • CommentTime15 Mar 2012
     
    pamiec ekranu moze byc 'pociachana' jak sie chce, nawet jak na zx spectrum. pamiec ekranu oczywiscie moze przekraczac granice 4kb w programie antica trzeba umiescic rozkaz z LMS, tak samo program antica moze przekraczac granice 1kb w programie antica nalezy umiescic rozkaz skoku :-) dane sprajtow moga lezec badz gdzie jesli uzywa sie rejestrow GRAFx. bardzo szybko mozna sie przyzwyczaic do INITow podczas ladowania no i wielokrotne ORGi ;-)