<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[atari.area forum - Mads Assembler]]></title>
		<link>https://www.atari.org.pl/forum/viewtopic.php?id=8450</link>
		<atom:link href="https://www.atari.org.pl/forum/extern.php?action=feed&amp;tid=8450&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Najświeższe odpowiedzi w Mads Assembler.]]></description>
		<lastBuildDate>Sat, 04 Apr 2026 15:11:48 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=324775#p324775</link>
			<description><![CDATA[<p>1. Czy można by do liczb w dowolnym systemie liczbowym dodać możliwość uźycia takich &#039;ślepych separatorów&quot; w rodzaju np &quot;_&quot;? To czasem uczytelnia pisanie liczb, szczególnie długich.<br />Przykładowo:</p><div class="codebox"><pre><code>  lda #%111_0_0000
  sta AUDC1</code></pre></div><p>pozwala szybciej przy przeglądaniu się zorientować co tam się i jak adresuje.<br />Pewnie, że można sobie podefiniować stałe, ale już w:</p><div class="codebox"><pre><code>  .sword %0000_1111_0100_1001</code></pre></div><p>można by definiować różne tablice czytelniej.</p><p>2. Druga rzecz: mamy dyrektywę HEX którą sobie możemy definiować ciąg bajtów następująco:</p><div class="codebox"><pre><code>  .hex 01 23 45 67 89 AB CD EF</code></pre></div><p>Czy można by dodać uniwersalną dyrektywę powalającą w ten sposób definiować ciągi bajtów ale przy użyciu różnych systemów liczbowych? Np.</p><div class="codebox"><pre><code>  .data $0123456789ABCDEF,%011110111101000001110100111,&amp;01230123012301230123,000123547557482983754</code></pre></div><p>i tak dalej, i tym podobnie.</p>]]></description>
			<author><![CDATA[null@example.com (mono)]]></author>
			<pubDate>Sat, 04 Apr 2026 15:11:48 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=324775#p324775</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=323591#p323591</link>
			<description><![CDATA[<p>@tebe: Czy mógłbyś rozszerzyć liczby na których operujemy podczas różnego rodzaju obliczeń do 64-bit?<br />Chciałbym sobie móc policzyć różne tablice bezpośrednio w mads, zamiast posiłkować się zewnętrznymi narzędziami. A razem z .GET/.PUT to masz tam do tego naprawdę świetne narzędzia.</p>]]></description>
			<author><![CDATA[null@example.com (mono)]]></author>
			<pubDate>Sat, 06 Dec 2025 17:39:29 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=323591#p323591</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=320910#p320910</link>
			<description><![CDATA[<p>Czy przy generowaniu listingu na początku mógłbyś podawać pełną linię poleceń z jaką program został wywołany? Na razie jest tak:<br /></p><div class="codebox"><pre><code>mads 2.1.7
Source: turbodiskloader.asx

&lt;no i tu już kod&gt;</code></pre></div><p>A nie można by dodać też:<br /></p><div class="codebox"><pre><code>Date: 2016-05-28T01:16:17.045+01
Command: mads -l -d:SECLEN=128 -d:DETECTSPEED -o:turbodiskloader.dta turbodiskloader.asx
Directory: /home/mono/</code></pre></div><p>?</p>]]></description>
			<author><![CDATA[null@example.com (mono)]]></author>
			<pubDate>Sun, 13 Apr 2025 17:05:26 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=320910#p320910</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=318108#p318108</link>
			<description><![CDATA[<p>Fakt, nie przyszło mi do głowy makro. Dzięki Tebe!</p>]]></description>
			<author><![CDATA[null@example.com (mono)]]></author>
			<pubDate>Mon, 21 Oct 2024 11:18:16 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=318108#p318108</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=318106#p318106</link>
			<description><![CDATA[<p><a href="https://github.com/tebe6502/Mad-Pascal/blob/master/base/c64/c64.hea">https://github.com/tebe6502/Mad-Pascal/ … 64/c64.hea</a></p><div class="codebox"><pre><code>.macro    basic_start(addr)

    .word upstartEnd    // link address
    .word 10        // line num
    .byte $9e        // sys

    ?a=0
    ?b=0
    ?c=0
    ?d=0
    ?e=0

    ?v = %%addr

    ift ?v&gt;=10000
    ?a=?v/10000
    ?v=?v-(?a*10000)
    eif

    ift ?v&gt;=1000
    ?b=?v/1000
    ?v=?v-(?b*1000)
    eif

    ift ?v&gt;=100
    ?c=?v/100
    ?v=?v-(?c*100)
    eif

    ift ?v&gt;=10
    ?d=?v/10
    ?v=?v-(?d*10)
    eif

    ?e=?v%10

    dta ?a+$30,?b+$30,?c+$30,?d+$30,?e+$30

    .byte 0
upstartEnd
    .word 0            // empty link signals the end of the program

.endm</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (tebe)]]></author>
			<pubDate>Mon, 21 Oct 2024 10:23:25 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=318106#p318106</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=318102#p318102</link>
			<description><![CDATA[<p>Chciałbym zapisać adres jako ciąg ATASCII. Coś w rodzaju basicowego STR$:<br /></p><div class="codebox"><pre><code>  org program
  .word endline
  .word 10
  .byte SYS
  .string start
  .byte 0
endline:
  .word 0

start:
  nop
  ...</code></pre></div><p>to .string start powinno wygenerować ciąg ATASCII np. &#039;2048&#039;.<br />Przydało by mi się to przy komodorowych nagłówkach.</p><p>W ogólniejszym mechanizmie mogłoby się przydać generowanie liczby dziesiętnej, szesnastkowej w ATASCII albo kodach ekranowych. Albo w PETSCII.</p>]]></description>
			<author><![CDATA[null@example.com (mono)]]></author>
			<pubDate>Mon, 21 Oct 2024 02:25:25 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=318102#p318102</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=316469#p316469</link>
			<description><![CDATA[<p>Czy da się zrobić jakiś &quot;align&quot; ale w pliku wynikowym bin.<br />Załóżmy, że najpierw lecę:<br />opt h-f+</p><p>potem przestawiam się na:<br />opt h+f-<br />i mam fragment jakby xexowy</p><p>i chcę wrócić na h+f-</p><p>I jak się wyrównać, żeby plik BIN wrócił do tego jednego ciągu. Niestety nie wiem jak wyrównać się bo ciąg xexowy może wychodzić w różnej długości.</p>]]></description>
			<author><![CDATA[null@example.com (Gienek)]]></author>
			<pubDate>Thu, 11 Jul 2024 19:59:20 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=316469#p316469</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=312799#p312799</link>
			<description><![CDATA[<p>Dobry pomysł z systemem czwórkowym!</p>]]></description>
			<author><![CDATA[null@example.com (dely)]]></author>
			<pubDate>Sat, 20 Jan 2024 17:11:58 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=312799#p312799</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=312797#p312797</link>
			<description><![CDATA[<p>Dwie rzeczy:</p><p>1. Czy obok dziesiątkowego, szesnastkowego i dwójkowego mógłbyś dodać do MADS-a system czwórkowy np. z prefiksem &#039;&amp;&#039; ? To ułatwiłoby kodowanie grafiki multicolor, bo wtedy np.<br /></p><div class="codebox"><pre><code>  .byte &amp;0000
  .byte &amp;0010
  .byte &amp;0111
  .byte &amp;0101
  .byte &amp;0111
  .byte &amp;0111
  .byte &amp;0101
  .byte &amp;0000</code></pre></div><p>już byłoby dość czytelne. Może być inny prefiks.</p><p>2. Chodzi o rozszerzanie definicji typu wyliczeniowego. Bo dzisiaj np. da się enuma rozszerzać stosując:<br /></p><div class="codebox"><pre><code>.enum DIGIT
  ZERO = 0
.ende

.enum DIGIT
  ONE = 1
.ende

.enum DIGIT
  INF = $FF
.ende

  lda #DIGIT.ZERO
  ldx #DIGIT.ONE
  ldy #DIGIT.INF</code></pre></div><p>wygeneruje listing z poprawnymi wartościami dla LDA, LDX i LDY, ale finalnie zaskutkuje błędem uniemożliwiając wygenerowanie pliku wynikowego.<br />Czy mógłbyś więc zmienić błąd na zaledwie warning?</p>]]></description>
			<author><![CDATA[null@example.com (mono)]]></author>
			<pubDate>Sat, 20 Jan 2024 15:52:29 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=312797#p312797</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=310523#p310523</link>
			<description><![CDATA[<p>Dziękuję. Bangla pięknie.</p>]]></description>
			<author><![CDATA[null@example.com (mono)]]></author>
			<pubDate>Sun, 24 Sep 2023 09:12:14 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=310523#p310523</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=310520#p310520</link>
			<description><![CDATA[<div class="codebox"><pre><code>mads 2.1.7 build 3 (13 Sep 23)
Source: D:\!Delphi\mads\test3.asm
     1                 .enum bool
     2 = 0000                no
     3 = 0001                yes
     4                 .ende
     5
     6                     org $400
     7
     8 FFFF&gt; 0400-0407&gt; A9 00        lda #bool(no)
     9 0402 A9 01            lda #bool(yes)
    10 0404 A9 00            lda #bool.no
    11 0406 A9 01            lda #bool.yes
    12                 //    lda #no
    13                 //    lda #yes
    14</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (tebe)]]></author>
			<pubDate>Sun, 24 Sep 2023 00:04:13 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=310520#p310520</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=310514#p310514</link>
			<description><![CDATA[<p>Taki kod:<br /></p><div class="codebox"><pre><code>.enum bool
    no
    yes
.ende

    org $400

    lda #bool(no)
    lda #bool(yes)
    lda #bool.no
    lda #bool.yes
    lda #no
    lda #yes</code></pre></div><p>maluje mi to:<br /></p><div class="codebox"><pre><code>        lda #bool(no)
test.asx (11) ERROR: Undeclared label NO (BANK=0)
        lda #bool(yes)
test.asx (12) ERROR: Undeclared label YES (BANK=0)
        lda #bool.no
test.asx (13) ERROR: Undeclared label BOOL.NO (BANK=0)
        lda #bool.yes
test.asx (14) ERROR: Undeclared label BOOL.YES (BANK=0)</code></pre></div><p>a listing wygląda tak:<br /></p><div class="codebox"><pre><code>mads 2.1.7
Source: test.asx
     1
     2                     opt o+ h- c- ?+
     3
     4                 .enum bool
     5 = 0000                no
     6 = 0001                yes
     7                 .ende
     8
     9                     org $400
    10
    11 0400 A9 00            lda #bool(no)
    12 0402 A9 00            lda #bool(yes)
    13 0404 A9 00            lda #bool.no
    14 0406 A9 00            lda #bool.yes
    15 0408 A9 00            lda #no
    16 040A A9 01            lda #yes
    17
    18
    19                     end</code></pre></div><p>a przecież wg dokumentacji:<br /></p><div class="quotebox"><cite>mads napisał/a:</cite><blockquote><p> Do etykiet wyliczeniowych odwołujemy się przy pomocy składni:<br /> enum_name (field)<br />lub bezpośrednio podobnie jak w przypadku odwołań do bloków .LOCAL, .PROC, czyli po nazwie typu oddzielone znakiem kropki występują kolejne pola, np.:<br /> lda #portb(rom_off)<br /> dta portb.rom_on, portb.rom_off</p></blockquote></div><p>Czy to ładnie tak?</p>]]></description>
			<author><![CDATA[null@example.com (mono)]]></author>
			<pubDate>Sat, 23 Sep 2023 16:08:54 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=310514#p310514</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=309471#p309471</link>
			<description><![CDATA[<p>Pewnie tak. Jest to &#039;Infinite loop&#039; , ale w moim przypadku, generuje to tylko errory, zero ostrzeżeń.</p><p>Przykład. W głównym pliku jest taka konstrukcja:<br /></p><div class="codebox"><pre><code>;-----------------------------------------------
; variable declarations in RAM (no code)
;-----------------------------------------------
    ORG PMGraph + $0300 - (variablesEnd - variablesStart)
    icl &#039;variables.asm&#039;</code></pre></div><p>Ma ona za zadanie umieścić zmienne bezpośrednio przed obszarem PMG</p><p>plik variables.asm wygląda tak...<br /></p><div class="codebox"><pre><code>variablesStart
TanksNames 
    .ds MaxPlayers*8
;----------------------------------------------------
skilltable   ; computer controlled players&#039; skills (1-8), 0 - human
    .DS MaxPlayers

; .... cośtam, cośtam, tablice zmienne itp.

.align $100
; i tu miejsce na wygenerowanie tablic wymagających umieszczenia na początku strony

; a potem inne deklaracje
variablesEnd</code></pre></div><p>No i tutaj wyznaczenie adresu zmiennych spowoduje zadziałanie .align, co spowoduje zmianę adresu zmiennych, co spowoduję zmianę offsetu w .align itd.<br />Czyli w sumie &#039;Infinite loop&#039; ale nie generuje żadnego ostrzeżenia, lecz błędy w innych miejscach (bo adresy zmiennych głupieją). Nie da się tego uniknąć (jeśli programista taki kod stworzy :) ), ale da się poinformować programistę... chyba :)</p><p>Pirx postanowił, że takie umieszczenie zmiennych będzie najlepsze (i dobrze), a ja tylko grzebałem w pliku zmiennych, nie mając świadomości, że jego adres jest wyznaczany w taki sposób. I stąd moje problemy, jak po wstawieniu .align zaczęło mi sypać różnymi błędami w najróżniejszych miejscach kodu, w zależności od tego gdzie w pliku znalazł się ten .align .</p><p>Mam taki pomysł na wyłapanie tego. Może z dupy, ale co tam :)<br />Dodać na końcu jeden dodatkowy przebieg, który posłuży tylko sprawdzeniu, czy któraś z etykiet nie zmieniła wartości - jeśli zmieniła, to w jej okolicy jest problem (zapewne) i dodatkowo wiemy, że problem jest.<br />Jeśli wartość zmieni wiele etykiet to najprawdopodobniej problem jest w okolicy pierwszego wystąpienia w kodzie takiej etykiety.</p>]]></description>
			<author><![CDATA[null@example.com (Pecus)]]></author>
			<pubDate>Thu, 20 Jul 2023 19:08:13 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=309471#p309471</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=309470#p309470</link>
			<description><![CDATA[<p>nie chodzi przypadkiem o &#039;Infinite loop&#039;, kiedy liczba przebiegów osiąga limit, jest generowany komunikat ostrzeżenia, może być z tego multum błędów</p><p>ogólnie powodem mogą być instrukcje skoków, JPL, JMI, JNE etc. które przybierają postać krótką albo długą, zmiana adresów asemblacji etc.</p><p>nie udało mi się tego wyeliminować, próbowałem wielu podejść, wskazana etykieta która powoduje &#039;infinite loop&#039; może wcale nią nie być</p><p>w MadPascal (MP) powodem &#039;infinite loop&#039; jest etykieta DATAORIGIN, na końcu pliku wynikowego, jej wartość w kolejnych przebiegach potrafi różnić się nawet o $100 bajtów, najnowszym sposobem na jej stabilizację jest to:</p><div class="codebox"><pre><code>    ?adr = *
    ift (?adr &lt; ?old_adr) &amp;&amp; (?old_adr - ?adr &lt; $120)
    ?adr = ?old_adr
    eif

    org ?adr
    ?old_adr = *

DATAORIGIN</code></pre></div><p>w innych dużych projektach typu Nibble, Pang, tworzę kod relokowalny RELOC, umieszczam w oddzielnych plikach i linkuję z głównym programem, szybciej sie assembluje i nie wpływa na zmianę adresów</p>]]></description>
			<author><![CDATA[null@example.com (tebe)]]></author>
			<pubDate>Thu, 20 Jul 2023 18:23:29 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=309470#p309470</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Mads Assembler]]></title>
			<link>https://www.atari.org.pl/forum/viewtopic.php?pid=309467#p309467</link>
			<description><![CDATA[<p>I nie musiałeś :)<br />Chodzi nam o błąd polegający np. na tym co przytrafiło się mi.<br />Czyli np. adres (org) dla includowanego pliku z definicjami zmiennych i tablic wyliczany jest na podstawie długości tego obszaru (includowanego pliku). A w obszarze tym znajduje się np. dyrektywa .align .<br />No i jest przypadek szczególny, kiedy to się prawidłowo skompiluje. Jeśli przy pierwszym przebiegu .align od razu będzie trafiał w swoje miejsce, czyli nic nie będzie musiał wyrównać.</p><p>W pozostałych przypadkach, każdy przebieg kompilatora będzie powodował wyznaczenie innego przesunięcia dla .align , a w związku z tym innego adresu dla org i innych wartości dla wszystkich etykiet we wspomnianym bloku przed .align.</p><p>Obecnie Mads tego nie sprawdza i generuje błędy w innych miejscach kodu (bo mu się rozsypuje kompilacja i gdzieś tam te błędy się pojawiają). Jest to dość irytujące, bo jak się nie zauważy początkowej przyczyny, to sprawdzanie tych błędów, które Mads raportuje nic nie daje, bo ich nie ma :)</p><p>Więc taki &quot;phase error&quot;, którego kiedyś nie rozumieliśmy w MAC65, jest tu jak najbardziej na miejscu i bardzo ułatwiłby pracę.<br />Oczywiście wskazanie prawdopodobnego miejsca takiego błędu by się przydało (MAC65 wtedy nic nie pokazywał), choć rozumiem, że to już nie takie oczywiste.</p>]]></description>
			<author><![CDATA[null@example.com (Pecus)]]></author>
			<pubDate>Thu, 20 Jul 2023 17:09:53 +0000</pubDate>
			<guid>https://www.atari.org.pl/forum/viewtopic.php?pid=309467#p309467</guid>
		</item>
	</channel>
</rss>
