
                  The XAssembler Compiler - Historia Wersji


  3.12 (16.01.2007)
  ------------------
  dodane:
   - instrukcje CMPXCHG,CMPXCHG8B,CPUID,RDMSR,RDTSC,RSM i WRMSR (Pentium)
   - instrukcje BSWAP,INVD,INVLPG,WBINVD i XADD (486)
   - zestaw instrukcji koprocesora 387+ FPU
   - mozliwosc ograniczenia zestawu dostepnych instrukcji
   - obsluga 32/64-bitowych liczb zmiennoprzecinkowych
   - zmiana numeracji wersji programu (tylko jedna kropka), sposob zapisu
     wartosci stalej _ver pozostaje taki sam

  poprawka:
   - nieprawidlowe prefiksy 66h dla instrukcji strumieniowych w kodzie
     32-bitowym
   - argument instrukcji XLAT dla zmiany domyslnego rejestru segmentowego
     w kodzie 32bit


  3.1.1 (17.11.2006)
  ------------------
  dodane:
   - pelny zestaw insutrkcji procesora 386 (w tym rozszerzona forma
     instrukcji IMUL oraz wyrazenia liczbowe jako argumenty skokow)
   - dyrektywa SEG usunieta, jej funkcjonalnosc zostanie w pelni
     zastapiona predefiniowanymi stalymi segmentowymi
   - opcja "-y" usunieta (zbyt malo starych zrodel aby ja trzymac)
   - usuniete tzw. komentarze "w srodku lini" (utrudnialy sprawne
     wylaczanie pojedynczych lini kodu ze zrodla jesli te posiadaly
     juz komentarz)

  poprawka:
   - wyswietlanie wiadomosci (usuniety zbedny kod)
   - obliczenia 16-bit/32-bit w czasie kompilacji (nieprawidlowy
     starszy bajt/slowo w pewnych rzadkich sytuacjach)


  3.1.0 (25.02.2006)
  ------------------
  dodane:
   - tryb Flat (limit 64k)
   - format DPMI dla trybu Flat (ten sam limit)
   - tryb FAR usuniety

  poprawka:
   - bledna tablica relokacji jesli w definicji danych uzyta byla
     dyrektywa FILE
   - kodowanie RETN/RETF


  3.0.9 (20.11.2005) - wersja poprawkowa
  --------------------------------------
  poprawka:
   - opcja lini komend "-x" (zostala odblokowana po kilku poprawkach)
   - 64k wyzerowanych danych nie jest juz wpisywane do pliku EXE jesli
     rozmiar danych globalnych = 0
   - rozmiary tablic wieksze niz 64k nie byly zglaszane jako bledy
     (rozmiary byly 'po cichu' obcinane do 16-bitowego slowa)
   - domyslny typ BYTE w definicjach danych beztypowych w pewnych
     przypadkach nie byl stosowany (powodowalo to, ze niektore bajty
     byly definiowane jako slowa lub podwojne slowa)
   - dalekie skoki CALL/JMP z argumentem "[mem]" (byly traktowane
     jako bliskie)

  3.0.9 (12.08.2005)
  ------------------
  dodane:
   - instrukcje SHLD,SHRD
   - szukanie wlaczanych plikow w podkatalogu "INC"

  poprawka:
   - dziwny blad w procedurze obliczania przesuniecia, powodowal ze
     offsety > 32k byly zglaszane jako "out of range" jesli poprzednie
     przesuniecie bylo ujemne
   - opcja lini komend "-p", teraz dziala jak powinna


  3.0.8 (03.08.2005)
  ------------------
  dodane :
   - pelna obsluga adresowania 32-bitowego
   - instrukcje APRL,BOUND,LAR,LSL
   - przelacznik {c+}/{c-} dla automatycznego dopelniania adresow
   - przelacznik {z+}/{z-} dla usuwania zerowych przesuniec
   - stale predefiniowane "_ssize" i "_hsize"

  poprawka:
   - wyczyszczenie procedury obliczajacej bajty r/m i sib (zyskala
     nieco na szybkosci)
   - maly blad w obliczaniu czasu trwania kompilacji
   - mylne uznawanie niektorych przelacznikow umieszczonych bezposrednio
     po definicji danych za blad skladni


  3.0.7 (02.07.2005)
  ------------------
  dodane:
   - instrukcje ENTER,LGDT,LIDT,LLDT,LMSW,SGDT,SIDT,SLDT,SMSW,VERR,VERW

  poprawka:
   - kontrola rozkazu POP CS (zdjecie rejstru segmentowego CS ze stosu
     w ten sposob nie jest mozliwe)
   - usuniecie czesci 'martwego' kodu
   - zmiana opcji "!" na "i"
   - dyrektywa END przy braku modulu glownego (test przelacznika {j-})
   - konwersja liczb dziesietnych na binarne (niektore kody znakow ASCII
     byly nieprawidlowo interpretowane jako cyfry)


  3.0.6 (12.04.2005)
  ------------------
  dodane:
   - instrukcje BSF,BSR,BT,BTC,BTR i BTS

  poprawka:
   - problem dopasowania argumentow dla kombinacji "mem,imm"
   - obliczanie czasu kompilacji (teraz z setnymi czesciami sekundy)


  3.0.5 (03.04.2005)
  ------------------
  dodane:
   - instrukcje IMUL,LEA,LDS,LES,LFS,LGS i LSS

  poprawka:
   - obliczanie dlugosci skoku dla skokow CALL/JMP dluzszych niz 32k
   - nieprawidlowa identyfikacja symboli globalnych/lokalnych w
     odwolaniach wyprzedzajacych
   - maly blad w podprocedurze obslugi dyrektywy MEMORY


  3.0.4 (30.03.2005)
  ------------------
  dodane:
   - pierwsza wersja 3.x zdolna do samo-kompilacji
   - dyrektywy COMMENT i ENDC (nie ma juz potrzeby zaznaczania
     srednika w kazdej lini komentowanej czesci zrodla)

  poprawka:
   - nieprawidlowa kontrola wartosci parametru dyrektywy ORG
     (bity 31-24 nie byly sprawdzane)
   - obliczanie wartosci przesuniecia (bledna interpretacja
     stalych uzytkownika)


  3.0.3 (28.03.2005)
  ------------------
  dodane:
   - tryby Small i Near (funkcja SEG jeszcze nie dziala)
   - nowe kombinacje instrukcji inicjujacych segmenty
     (zajmuja mniej miejsca w pliku wynikowym i nie modyfikuja
     zawartosci innych rejestrow - poza DS i ES, oczywiscie)
   - kombinacja "sreg,mem"/"mem,sreg" dla instrukcji MOV

  poprawka:
   - prosty blad, ktory powodowal ze maks zasieg dla skokow
     16-bit wynosil 32512 bajtow (255 bajtow mniej niz powinien)
   - powazny blad w kodzie generatora naglowkow plikow EXE
   - prosty blad w procedurze kontroli zakresu przesuniecia
     (ujemne offsety byly zglaszane jako "out of range")


  3.0.2 (08.03.2005)
  ------------------
  dodane:
   - stala predefiniowana "_dtp"
   - proste wyrazenia numeryczne w rodzaju : a + b - c
   - argument "mem" dla instrukcji SETcc

  poprawka:
   - przesuniecie odwolaniach typu "[reg + imm]" (teraz gdy
     wyrazenia jakos dzialaja moglem znalezc blad)
   - blad w odwolaniach typu "[symbol]" (adres symbolu nie
     byl wstawiany do kodu)
   - kolejny blad w kombinacji "mem,imm" dla instrukcji MOV
   - bledny numer lini przy zglaszaniu bledow "invalid numeric
     expression" (nie wszystkich)
   - nieprawidlowe kodowanie bliskiego/dalekiego RET przy typie
     procedury ustawionym na domyslny
   - kombinacja "mem,imm" dla rozkazu MOV (dla pewnych wartosci
     generowany byl kod 90h, co stanowi instrukcje NOP)


  3.0.1 (03.03.2005)
  ------------------
  dodane:
   - zmodyfikowany kod skanera tablicy symboli (zawiera mniej
     odwolan do pamieci przez co jest szybszy)
   - odwolania wyprzedzajace przez nazwe w rozkazach CALL/JMP/Jcc
   - funkcje OFS, SIZEOF i TYPEOF
   - dyretywa ENDI (zmiana nazwy z ENDIR poniewaz "R" jest tuz
     nad "F" na klawiaturze i czasem zdarzylo mi sie wpisac ENDIF
     ... co oczywiscie wyrzucalo blad kompilacji)
   - dodatkowa kontrola dla dyrektyw ENDR i ENDI (przerwania nie
     moga miec parametrow)
   - przelacznik {r+}/{r-} dla automatycznego wstawiania RET
   - kombinacja "reg,mem"/"mem,reg" dla rozkazu XCHG (obsluga tak
     jak dla instrukcji z grupy $11)
   - kombinacja "mem,imm" dla instrukcji arytmetycznych i przesuniec
   - dyrektywa INLINE (zamiast dyrektywy CODE, tylko zmienilem nazwe)
   - nowy sposob detekcji czy dlugie nazwy plikow sa obslugiwane
     (ten jest bardziej miarodajny)
   - dyrektywa PROGRESS (pokazuje aktualnie przetwarzany plik i
     numer lini)
   - wyrownywanie adaptywne dla zmiennych typow podstawowych
     (oszczedza wiecej miejsca)

  poprawka:
   - zasieg dyrektywy SET (teraz dziala juz wszedzie, nie tylko w
     bloku definicji danych)
   - identyfikacja rejestrow debugowania/kontroli (dla pewnych
     kombinacji zglaszany byl blad "unknown symbol reference")
   - bledne obliczanie wartosci stalej skokach wyprzedzajacych
     jump/call (powodowala, ze skoki wyprzedzajace o dlugosci
     0..4 bajty zwracaly blad "target out of range")
   - prosty ale trudny do znalezienia blad powodujacy przerwanie
     kompilacji z bledem "end of file" tam gdzie nie powinno go byc
   - sprawdzanie przecinka po definicji danych z pliku zewn.
   - usuniete wszystkie modyfikatory zrodla z opcji lini komend
   - maly blad w skokach wyprzedzajacych JMP/Jcc
   - przyspieszenie kodu obslugi symboli (usuniecie niepotrzebnych
     odwolan do pamieci)
   - dlugosc nazw symboli dla etykiet lokalnych (niewlasciwa
     wartosc powodowala bledna sume kontrolna - symbol nie mogl
     byc odnaleziony i zglaszany byl blad "unknown symbol
     reference")
   - sprawdzanie trybu kompilacji w skokach dalekich CALL/JMP
     gdzie argumentem jest nazwa symbolu
   - domyslny typ skoku (near/far) w rozkazach CALL/JMP
   - dziwny blad, ktory powodowal, ze wymuszone skoki krotkie
     zglaszaly blad kompilacji"type mismatch"
   - kontrola zasiegu dla argumentow 32-bit w rozkazach CALL/JMP/Jcc
   - obliczanie czasu kompilacji przy wyswietlaniu statusu
   - automatyczna detekcja stalych pozwalajacych na rozszerzenie
     ze znakiem (wartosci ujemne w zakresie -127..-64 byly
     ignorowane chociaz nie powinny)
   - zachowanie wskaznika tablicy kodow
   - bledne obliczanie rozmiaru argumentu [reg + ofs] przy wylaczanej
     optymalizacji (domyslny typ przesuniecia byl zle ustawiany)
   - prawidlowe wyswietlanie wiadomosci (zadnych zbednych dodatkowych
     lini)
   - blad parsera argumentow ktory powodowal, ze przelaczniki po
     instrukcjach jednoargumetnowych zglaszaly blad skladni
     (brakowalo prostego sprawdzenia znaku "{")


  3.0.0 (nie wypuszczona)
  -----------------------
  dodane:
   - zestaw instrukcji 386 (niepelny ?)
   - tryby kompilacji : bin, com
   - typy danych : byte, word, dword, qword, tbyte, oword i tablice
   - stale uzytkownika
   - nazwy symboli do 90 znakow
   - autowypelnianie
   - nielimitowany rozmiar plikow zrodlowych
   - wielo-poziomowe wlaczanie plikow
   - obsluga dlugich nazw plikow

   ... i wiecej


  ----------------------------------------------------------------------------


  2.3 PDE (Maj 2002)
  ------------------
   - jak nazwa : PDE - Public Domain Edition (edycja Public Domain)
     musialem nieco 'przygotowac' zrodla to tej wersji

  2.3 (Styczen 2001)
  --------------
   - ostatnia z lini 2.x
   - male poprawki

  2.2 (Lipiec 1998)
  --------------
   - ehem, wlasciwie to zapomnialem co bylo nowego w 2.2

  2.1 (Marzec 1998)
  --------------
   - niewielkie optymalizacje, glownie przyspieszajace dzialanie

  2.0 (Luty 1998)
  --------------
   - jedna ale za to wielko optymalizacja : program korzysta z
     pamieci zamiast plikow tymczasowych

  1.0 (Grudzien 1997)
  -------------------
   - pierwsza dzialajaca wersja (juz nie dostepna)
   - zestaw instrukcji 8086
   - generuje tylko pliki MZ EXE (maks. 64k danych + 64k kodu)
