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 18:02
       
      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 21:02
       
      rudla send you request to author

      but Error: String Error is OK for empty string
      • 3: CommentAuthortEDDYbOAR
      • CommentTime17 Feb 2010 02:02
       
      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 11:02 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 12:02
       
      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 08:03 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 08:03
       
      Plik uruchamialny .xex (mads nadaje mu chyba rozszerzenie .obx) generujesz za pomocą:
      opt h+ o+
      • 8: CommentAuthorxxl
      • CommentTime15 Mar 2012 08:03 zmieniony
       
      opt h+l+o+

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

      run start


      przyklad
      • 9: CommentAuthorat0mic
      • CommentTime15 Mar 2012 09:03 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ć...
    1.  
      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 09:03 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 11:03
       
      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 14:03
       
      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 21:03 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 22:03
       
      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 ;-)