Aktualizacja:
1 XI 2021




== ELSA ==
* Opis
* Lista zmian
* Pliki
== Karty CPU ==
* Opis
* Pliki
== Poprawki ==
* Pliki
== SysInfo ==
* Opis
* Pliki
== 65C816 XL OS ==
* Opis
* Lista zmian
* Lista zgodności
* Pliki
== Rozmaitości ==
* Pliki
== Let's Emu! ==
* Opis
* Pliki
== U-BASIC ==
* Opis
* Pliki
== IDE Plus ==
* Opis
* Pliki
== CP/Emu ==
* Opis
* Pliki
== MultiBASIC ==
* Opis
* Lista zmian
* Pliki

















 

ELSA, lista zmian

0.95

  • usunięto przełącznik /S (przydaje się tylko przy debugowaniu samego asemblera).
  • poprawiono błąd powodujący, że etykiety zadeklarowane przez .xref po ich użyciu okazywały się niezdefiniowane w drugim przejściu asemblacji.
  • fixupy dla bloków .abs składają się teraz z przesunięć względnych, o ile to możliwe i opłacalne.
  • dyrektywa .rs nie działała prawidłowo, jeśli była wpisana dużymi literami.
  • poprawiono błąd w operatorze negacji binarnej ! (uzupełnienie do jednego): brak skasowania jej po użyciu powodował propagację na kolejne składniki wyrażenia.
  • poprawiono błąd powodujący zawieszenie się komputera, kiedy w linii poleceń podano przełącznik (np. /C) bez nazwy pliku źródłowego.
  • porządki w kodzie generującym informację dla relokatora SDX.
  • operator <, wymuszający tryb adresowania strony zerowej, kiedy był użyty po nawiasie otwierającym (oznaczającym tryb adresowania pośredni), był interpretowany przez parser jako operator redukujący wartość do młodszego bajtu, co z kolei powodowało wyświetlanie ostrzeżeń przy takich rozkazach jak lda (<adr),y.
  • poprawiono błąd powodujący błędy fazy, gdy przy aktywnym .cache dyrektywa .include była użyta w ostatniej linii pliku źródłowego.
  • poprawiono błąd w .cache powodujący zgłaszanie błędów braku pamięci.
  • .cache nie zostanie włączone, jeśli komputer nie ma RAM-u poza pierwszymi 64k.
  • poprawiono (zapewne nieszkodliwy) błąd w dyrektywie .local.
  • nowa nazwa dla pliku dołączonego dyrektywą .include jest teraz zapamiętywana po otwarciu tego pliku, a nie przed. To powoduje, że komunikaty błędów mają więcej sensu, gdy błąd wystąpi podczas otwierania pliku przez .include.
  • dodano dyrektywę .incdir.
  • obliczenia, które zwracają w wyniku XREF, będą też zwracały 16-bitowe wyniki (ze starszym słowem wyzerowanym).
  • poprawiono nowy błąd, przez który program przykładowy HELLOO.MAE nie asemblował się.
  • nagłówki formatu relokowalnego SDX będą się pojawiać w listingu (zapomniałem o tym).
  • poprawiono błąd w .align.
  • poprawiono literówki (a w zasadzie jedną i tę samą literówkę) w tablicach opkodów dla pseudorozkazów ASR, RRA, RLA.
  • .org i .abs nie będą generować nowych nagłówków, gdy nowa wartość PC jest większa od starej o mniej niż 5 bajtów, odstęp będzie wypełniany zerami.
  • w trybie adresowania natychmiastowym argument rozkazu będzie automatycznie przycinany do potrzebnego rozmiaru, jeśli pozostałe bajty zawierają tylko rozszerzenie znakowe wartości - to pozwala pozbyć się notorycznie wyświetlanych ostrzeżeń "NUMBER TOO BIG" w reakcji na LDA #-1 itp.
  • tryb adresowania zp,Y w rozkazach, które go nie mają, jest teraz automatycznie zamieniany na abs,Y i wyświetla się ostrzeżenie.
  • .opt f- włącza się automatycznie, jeśli załadowany DOS ma funkcje NOTE/POINT zamiast TELL/SEEK.
  • kosmetyka tu i tam.

0.94

  • usunięto przełącznik /R z wiersza poleceń (wyświetlane przezeń statystyki, ze względu na taką a nie inną wewnętrzną architekturę tego asemblera, i tak nie mogły być dokładne).
  • zabroniono zmieniać adresy przy użyciu dyrektywy .set.
  • porządki w obsłudze nazw obszarów lokalnych.
  • porządki w obsłudze dwukropka na końcu deklarowanej etykiety.
  • .rs 0 nie będzie wyświetlało ostrzeżenia: użycie takiej konstrukcji ma sens, można jej użyć do deklarowania "unii" wewnątrz struktury.
  • zaimplementowano dyrektywę .abs.
  • zaimplementowano deklaratory .xref i % (xdef).
  • zaimplementowano .rel i relokowany format binarny SpartaDOS X.
  • poprawiono błąd, gdzie adresy strony zerowej były uznawne za wewnętrzne adresy programu (a tym samym - podlegające relokacji).
  • dodano pliki z etykietami: sysequ.i, sdxkern.i, sdxsymb.i.

0.93

  • zredukowano powtarzające się sekcje kodu generującego INW/DEW/DWA.
  • z tegoż kodu usunięto jedną zbędną prowizorkę.
  • słowo kluczowe .set od teraz występuje z kropką.
  • poprawiono to, że .set etykieta=wartość (bez spacji dookoła znaku przypisania) powodowało zgłoszenie błędu składni.
  • poprawiono błąd w działaniu .set, który powodował, że etykieta przypisana do adresu, której wartość zmieniono, zamiast zostać zadeklarowana ponownie w drugim przebiegu, była pomijana, co z kolei powodowało błąd "Undefined" przy najbliższym odwołaniu.
  • parser akceptował .[, .ASR itp., teraz już nie powinien tego robić.
  • poprawiono niezainicjowaną zmienną w obsłudze .cache, przez co program mógł zgłaszać bezsensowne błędy braku pamięci.
  • poprawiono działanie .include na okoliczność wyświetlania bezsensownych nazw plików i numerów wierszy programu w drugim przebiegu asemblacji przy aktywnym .cache.
  • zaimplementowano .opt +p

0.92

  • dalsze przyśpieszenie procedur przeszukiwania listy symboli.
  • usunięty nowy błąd, który powodował, że program nie był w stanie znaleźć etykiet zdefiniowanych w obszarze lokalnym, jeśli odwołanie następowało spoza tegoż.
  • niektóre słowa kluczowe (w szczególności .else i .endif) były ignorowane, kiedy poprzedziło się je przecinkiem zamiast kropką, mimo że powinno to powodować błąd składni.
  • dyrektywa .zp może być użyta wewnątrz bloku [].
  • dodano dyrektywy .bss i .data, oraz pseudoetykiety __BSS__ i __DATA__.
  • rozmiary poszczególnych sekcji (CODE, ZP, DATA, BSS) w końcowym podsumowaniu będą teraz wyświetlane także w postaci dziesiętnej (a nie tylko szesnastkowej).
  • poprawiono błąd, przez który włączenie listingu powodowało uszkodzenie danych generowanych przez dyrektywy .word, .long itd. (tak się kończy ponowne używanie zmiennych zadeklarowanych do czegoś innego).
  • poprawiono błąd w kodzie wykrywającym błąd fazy na końcu drugiego przejścia asemblacji.
  • poprawiono durną literówkę, która powodowała, że wartości przypisywane przez operator = do etykiet były źle wyświetlane w listingu (konkretnie, źle wyświetlane była ich postać dziesiętna).
  • dodano dyrektywy .run i .init.
  • zrewidowano kod przygotowujący nazwy plików dla dyrektyw .include, .bin i .out - powinien teraz przyjmować nazwy urządzeń typu PCL: itp.
  • rezygnacja z podawania bazy i długości sekcji CODE na koniec asemblacji, jako czynności bezużytecznej, a niekiedy mogącej przyprawić użytkownika o skonfundowanie.
  • całkowity rozmiar nagłówków będzie teraz dodawany do długości wygenerowanego pliku binarnego, raportowanej po drugim przejściu asemblacji.
  • w listingu będzie pokazywana "ludzka" interpretacja generowanych nagłówków DOS II.
  • zaimplementowano .mc.
  • zaimplementowano .cache.

0.91

  • dodano dyrektywę .cpu sygnalizującą asemblerowi, jaki ma być bieżący tryb pracy CPU.
  • dodano pseudoetykietę __CPU__ zwracającą bieżąco wybrany tryb pracy CPU: 8 dla trybu 8-bitowego (czyli "emulacji"), 16 dla 16-bitowego (czyli "natywnego").
  • dodano komunikat ostrzeżenia przy próbie przełączenia wielkości rejestrów w trybie 8-bitowym.
  • usunięto błąd powodujący bezpodstawne zgłaszanie błędów w pewnych okolicznościach, gdy kod odwoływal się do wnętrza lokalnej przestrzeni nazw (.local).
  • usunięto JSR z listy rozkazów wyświetlających ostrzeżenie "NULL JUMP".
  • jfsymbol (funkcja SDX) była wywoływana w trybie natywnym, poprawiono.
  • dodano ostrzeżenie, gdy .rs występuje bez poprzedzającego .rsset (co jest sygnałem, że być może pomylono .rs z .ds).
  • dodano pseudoetykietę __RS__ zwracającą bieżące przesunięcie wewnątrz struktury definiowanej przez .rs
  • .rs, .ds i .dc z podaną zerową liczbą bajtów będą teraz wyświetlać ostrzeżenie.
  • generowane nagłówki binarne widać teraz w listingach.
  • przed wyjściem do systemu program będzie teraz podawał nie tylko wielkość pozostałej wolnej pamięci, ale też - ile jej zużył na tablicę symboli itp.
  • dodano brakujące sprawdzenie, czy zamknięto wszystkie bloki [] przed końcem pierwszego przejścia asemblacji.
  • deklarowana etykieta może być zakończona dwukropkiem (ten znak zostanie zignorowany).
  • poprawki w obliczaniu numeru linii z błędem, jeśli ten wystąpił podczas .rept.
  • dodano /S do przełączników wiersza poleceń = wyświetl zawartość tablicy symboli.
  • operator ! (negacja bitowa) działa teraz na następujący za nim składnik wyrażenia, a nie na wynik całego wyrażenia. Było to niekoherentne z zachowaniem operatora - (negacja arytmetyczna).
  • poprawki kodu rozróżniającego wewnętrznie typy danych.
  • zaimplementowano operatory rzutowania: ($) i (&), odpowiednio dla wartości i adresu.
  • przejście z arytmetyki 24-bitowej na 32-bitową.
  • także liczniki programu są teraz 32-bitowe dla operacji arytmetycznych, ale wewnętrznie brane jest pod uwagę przeważnie tylko młodsze słowo; niemniej w listingach wartość PC wyświetla się jako 24-bitowa.
  • .print i .error wyświetlają wartości numeryczne w dwu postaciach szesnastkowej i dziesiętnej; pomiędzy kolejnymi ciągami ASCII automatycznie będą wstawiane spacje.
  • zaimplementowano operatory >> i << dla binarnych przesunięć logicznych, odpowiednio w prawo i w lewo.
  • zaimplementowano dyrektywy generujące 32-bitowe słowa: .quad (czyli .dword) i .qbyte, odpowiednio dla formatu little endian i big endian.
  • zaimplementowano operator \ ekstrahujący bity 24-31 z wyniku obliczenia (analogicznie do operatorów <, > i ^).
  • dyrektywy .lsm, .msb i .usb usunięto (więcej to kłopotu niż to warto).
  • wartości przypisywane etykietom przez = będą wyświetlane w listingach.
  • zrobiono porządek ze starym, prowizorycznym (i zapomnianym) kodem, dzięki któremu tablica symboli była de facto ograniczona do 64k.
  • tablica symboli mogła pomieścić tylko do 32 KB etykiet lokalnych w stylu MAE ("?etykieta", te rzeczy) w obrębie etykiety globalnej, a to z powodu użycia tam 16-bitowych przesunięć ze znakiem zamiast wskaźników. To ograniczenie zostało usunięte, ale za to tablica symboli będzie zajmowałą więcej miejsca (co może mieć znaczenie dla komputerów wyposażonych tylko w pamięć zgodną z 6502).
  • procedura przeszukująca tablicę symboli nieco przy okazji przyśpieszyła.
  • dodano pseudoetykietę __ZP__ (wartość bieżąca licznika adresu na stronie zerowej).

0.9c

  • pod SpartaDOS X asembler, przed wyjściem do DOS-u, będzie zapisywał kod statusu do zmiennej systemowej ERRNO: 0 w przypadku powodzenia lub wartość niezerową w przypadku błędu. Przy błędzie we/wy będzie to systemowy kod błędu, a przy błędzie asemblacji wartość dodatnia większa od 1. To pozwala na obsługę błędów w skryptach wsadowych przy użyciu konstrukcji warunkowej IF ERROR (tj. na SDX w wersji późniejszej niż 4.49-release, bo przedtem IF ERROR reaguje tylko na błędy o kodach większych od 127).
  • dla następujących rozkazów: BCC, BCS, BEQ, BNE, BPL, BMI, BVC, BVS zdefiniowano implikowany tryb adresowania, dzięki czemu można ich łatwo użyć do zamaskowania rozkazu jednobajtowego. W tej roli są szybsze o 1 cykl niż BIT zp i nie generują zbędnego odczytu.
  • implikowany tryb adresowania w tym samym celu dodano też do rozkazu BIT, żeby można go było łatwo użyć do zamaskowania rozkazu dwubajtowego.
  • program głupiał, jeśli za dyrektywą .zp znajdował się komentarz.
  • program akceptował dyrektywy wpisane bez poprzedzającej kropki (np. org $2000), poprawiono.
  • dodano dyrektywę .align.
  • dodano presudoinstrukcje JSR (abs) and JSL [abs].

0.9b

  • zapomniało się dodać dyrektywę .hex do listy dyrektyw generujących dane do listingu.
  • zapomniało się wyzerować deltę dodawaną do (albo odejmowana od) danych generowanych przez dyrektywy .byte/.cbyte/.sbyte, co powodowało propagację tejże delty na wszystkie następujące dyrektywy .byte (i spółkę).
  • jeśli taka dyrektywa zawiera tylko tę deltę, asembler wyrzuci błąd.
  • z listy komunikatów błędów usunięto duplikat.
  • wynik mnożenia i dzielenia musi być zawsze typu "wartość", a nigdy typu "adres", niezależnie od typów wejściowych.
  • poprawiono błąd, który czasami powodował wpisanie śmieci do typu etykiety (symptom: błąd "UNDEFINED" dla etykiety, która została nienagannie zdefiniowana). <

0.9a

  • nieco (5-10%) przyśpieszono procedurę przeszukującą tablicę symboli.
  • inaczej niż to było udokumentowane, dyrektywa .lc mogła wyłączyć listing włączony przez przełącznik /L w wierszu poleceń.
  • zmieniono procedurę budowania pliku ELSA.EXE na coś szybszego (rezygnując ze starego skryptu konsolidującego napisanego w MultiBASIC-u) i solidniejszego (poprawki w relokatorze),
  • większość funkcji I/O obsługuje teraz błędy automatycznie, co pozwoliło pozbyć się sprawdzania statusu w wielu miejscach w programie.
  • skracanie skokow Jxx będzie sugerowane rownież dla 6502.
  • skracanie skoku JMP będzie sugerowane dla wszystkich procesorów oprócz 6502.
  • rozkaz JMP/JSR/Jxx z adresem docelowym znajdujacym się tuż za sobą będzie powodował wyświetlenie ostrzeżenia.
  • poprawki literówek i ogólne upiększenia komunikatów.
  • zawartość bufora linii kodu źródłowego będzie kasowana po powrocie z dyrektywy .include
  • poprawki do formatowania listingu, żeby był zwięźlejszy i jednocześnie czytelniejszy.
  • .byte, .cbyte, .sbyte, .word, .dbyte, .long, .tbyte, .float generują teraz dane do listingu.
  • tak samo robi .dc, ale ta dyrektywa wyświetla tylko 11 pierwszych bajtów generowanego bloku.
  • parametry .dc można teraz oddzielać także przecinkiem (oprócz spacji).
  • poprawiono błąd fazy, który pojawiał się, gdy DEW/DWA było użyte z etykietą deklarowaną w dalszej części kodu.
  • poprawiono literówkę w kodzie rozwijającym pseudorozkaz RRA, która skutkowała umieszczeniem w buforze wyjściowym opkodu $09 (ORA #) zamiast $c9 (CMP #).
  • przy okazji napisano od nowa kod rozwijający presudorozkazy ASR, B2H, PHR, PLR, RLA i RRA.
  • parametry dyrektywy .opt były rozpoznawane tylko wtedy, kiedy wpisano je małymi literami.
  • dodano .opt f- na wypadek dołączania pliku binarnego (przy użyciu dyrektywy .bin) z dysku, na którym system plików nie przechowuje dokładnej informacji o długosci plików (jak np. system plików AtariDOS). Potem dobrze jest zrobić .opt f+
  • dodano .opt w- do wyłączania ostrzeżeń (warnings) podczas asemblacji. Domyślne jest w+, /Q podane w wierszu poleceń ma wyższy priorytet.
  • zmieniono działanie dyrektywy .float, żeby jako parametry mogła przyjmować zarówno stałe zmiennoprzecinkowe jak i wyrażenia stałoprzecinkowe.
  • dodano pseudoetykiety __M65C802__ i __M65C816__ jako aliasy do istniejących __M65802__ i __M65816__ (które poprzednio były niewłaściwie opisane w dokumentacji).
  • dodano przełącznik /R do wiersza poleceń.

0.9 (pierwsza dostępna publicznie wersja)

  • zaimplementowano presudorozkazy RCC, RCS, REQ, RGE, RLT, RNE, RMI, RPL, RVC, RVS (Repeat last instruction if Carry clear... itd.), SCC, SCS, SEQ, SGE, SLT, SNE, SMI, SPL, SVC, SVS (Skip next instruction if Carry Clear itd.), INW, DEW, DWA, B2H, ADD, SUB, PHR, PLR, ECC, ECS, EEQ, EGE, ELT, ENE, EMI, EPL, EVC, EVS (Exit subroutine if Carry Clear itd.), ASR, RRA, RLA.
  • składnia rozkazu PEA dostosowana do tego, co jest w innych asemblerach :), tj. PEA #$xxxx, PEA ($xx), PEA $xxxx, dwa ostatnie to PEI i PER w MAE.
  • zaimplementowano dysrektywy .zp, .code, .ifdef, .ifndef, .ll (listowanie tylko następującej linijki programu), .el, *** (odpowiednio .else i .endif, dla wstecznej zgodności z MAE), [ i ], .rept, .endr, powiązaną pseudoetykietę __REPT__ i (tak samo powiązany) operator #.
  • dyrektywy .if można w końcu zagnieżdżać.
  • zaimplementowano logiczne AND (&&), logiczne OR (!!) i jednoargumentowy operator negacji (!).
  • zrobiono porządki w implementacji dyrektywy set.
  • zaimplementowano seudoetykiety __ASIZE__, __ISIZE__ (rozmiar, odpowiednio, akumulatora i rejestrów XY w bitach), __M65C02__, __M65SC02__, __M65802__, które sygnalizują wybrany procesor 65C02, W65SC02 i 65C802; oraz .65c02 (lub .c02), .65sc02, .65c802, które wybierają te procesory w kodzie źródłowym.
  • zrobiono porządki w kodzie identyfikującym pseudoetykiety.
  • ulepszono dyrektywę .error, która teraz dziala tak samo jak .print, z wyjątkiem tego, ze również przerywa asemblację z komunikatem o błędzie "USER-DEFINED".
  • ostrzeżenia będą wyświetlane tylko w drugim przebiegu asemblacji.
  • test na rodzaj CPU został usunięty: moduł inicjujący będzie teraz polegał tylko na informacji zwróconej przez OS.
  • kiedy w systemie nie ma funkcji kmalloc(), albo gdy pamięć liniowa jest zajęta, program użyje podstawowych 64k do budowania tablicy symboli (na co pozostaje około 20k).
  • przełączniki w wierszu poleceń mogą być teraz poprzedzane ukośnikiem, n.p. /D zamiast -D.
  • zaimplementowano przełącznik /M definiujący domyślnie wybrany procesor (można to potem zmienić w kodzie źródłowym).
  • nazwę pliku wynikowego można teraz podać w wierszu poleceń.
  • bibliotekę PRINTF zastąpiono nową wersją, która nie używa systemowego pakietu FP (zwalniając tym samym znaczną część strony zerowej) i jest w stanie przedstawiać 32-bitowe liczby całkowite w zapisie dziesiętnym lub szesnastkowym.
  • poprawiono garść mniejszych błędów tu i tam.

0.8

  • zaimplementowano pseudoetykiety __M6502__, __M65816__, __RSSIZE__ i cały wewnętrzny mechanizm do definiowania nowych.
  • dodano ostrzeżenie, które się będzie wyświetlać, kiedy wartość zostanie obcięta o jeden albo dwa bajty.
  • zaimplementowano dyrektywy .if/.else/.endif (na razie nie można ich zagnieżdżać).
  • poprawiono błąd w dyrektywie .end
  • zaimplementowano dykretywy .rsset i .rs
  • poprawiono błąd w obliczaniu wartości parametrów dyrektywy .word w pierwszym przebiegu asemblacji.
  • poprawiono błąd w dyrektywie .cbyte: np. w .cbyte 0,0,0,0,0 asembler ustawiał bit 7 każdego kolejnego bajtu zamiast robić to tylko z ostatnim.
  • zaimplementowano dyrektywy .rb i .rw

http://drac030.atari8.info © KMK
free counters