3,851

(47 odpowiedzi, napisanych Fabryka - 8bit)

Przetestujcie to co dołączam (com430 trzeba ustawić comspecem, dlatego przyda się pbi ide lub ramdysk).  Ta wersja tylko ustawia dla konsoli flagę, żeby nie wyświetlała prompta. Parametry ON/OFF/message.

Nie mogę przetestować solidnie (tj. na Atari), ale na emulcu chyba działa dobrze.

BTW. dlaczego com430.com definiuje symbol _COMMAND zamiast @COMMAND?

3,852

(47 odpowiedzi, napisanych Fabryka - 8bit)

FDISK-a bym tam nie wrzucał, po pierwsze zajmuje 12k, po drugie przydaje się znacznie rzadziej, niż MENU, a po trzecie i tak niebawem będzie nowa wersja, bo stara ma jednak za mało możliwości a za dużo błędów.

Lizard: masz jakiś konkretny pomysł na to? Bo obecnie batche są robione po prostu przekierowaniem wejścia z klawiatury na plik. Nie bardzo widzę, od którego miejsca trzeba byłoby się za to zabrać, żeby przerobić zgodnie z twoim postulatem.

3,853

(47 odpowiedzi, napisanych Fabryka - 8bit)

Właśnie dlatego, że istniejący echo.com nie przekierowuje niczego na żadne NUL.

3,854

(47 odpowiedzi, napisanych Fabryka - 8bit)

Może i powinno, ale edytor ekranowy działa tak, że linia jest odczytywana z ekranu, i dopiero potem wędruje do LBUFF. Łatwo sprawdzić - wejdź do BASIC-a, poczekaj na READY, a potem najedź na to słowo kursorem i wciśnij Return. Edytor odczyta z ekranu wyraz READY, zapisze w LBUFF, a BASIC stokenizuje (jako READ Y) i spróbuje wykonać.

3,855

(47 odpowiedzi, napisanych Fabryka - 8bit)

Błąd "Out of memory" już jest w kernelu SDX, dlatego nie musiałem go dorabiać.
Ale można dodać "Memory conflict" o ile znajdzie się wolny numer błędu. Może np. $B2 = 178 ?)

Proponuję zajrzeć do listy błędów na Atariki:

http://atariki.krap.pl/index.php/Kody_b ... 99d%C3%B3w

Błąd 178 jest już zajęty  8)

[ Dodano: 26.05.2005 13:53:00 ]

a kiedy wersja finalna (lub w miare) SDX i DracOS ?

OS jest już w zasadzie skończony. Poprawki będą, jeśli coś wylezie (w sensie błąd).

[ Dodano: 26.05.2005 13:58:46 ]

Echo miąchało coś z adresem pamięci ekranu. Nie jest to zdrowe rozwiązanie. Proponuję utworzyć urządzenie NUL. Wtedy ECHO OFF przekierowywało by wyjście z CON na NUL.

Zdecydowanie byłoby tak lepiej, ale nie jestem do końca pewien, co na to edytor ekranowy. Konkretnie wykonywanie jakichkolwiek poleceń w trybie OFF (w tym plików wsadowych) mogłoby się okazać problematyczne.

W dotychczasowych wersjach jest tam JMP $0000, to chyba się da go użyc?

Bardzo ciekawe w zestawieniu z faktem, że SDX wstawia $60 (RTS) pod adres 0.

3,856

(40 odpowiedzi, napisanych Fabryka - 8bit)

Tylko czemu ona taka przysadzista?  8O

3,857

(66 odpowiedzi, napisanych Fabryka - 8bit)

Nie wykluczam, ale umieszczenie czegokolwiek w bankach pamięci 130XE strasznie skomplikuje adresowanie pamięci programu. Pomyślę o tym w zależności, jak się sytuacja rozwinie z Warpem i warpopochodnymi. Gdyby od jesieni takich maszyn miało przybywać, to taka zabawa staje się niepotrzebna.

[ Dodano: 23.05.2005 15:52:19 ]

to mimo wszystko jest już coś. Lecz mam pomysła na rzecz - która może skutecznie załatwić problem ew. nieposiadania ramu liniowego - może jakie #include ?? - i procki w zewnętrznych plikach ?? - to byłoby bardzo że tak powiem "róló" :)

To znaczy, konkretnie nie mam dobrego pomysłu na to. W innych BASIC-ach jest np. komenda COMMON, która przekazuje wartości zmiennych do programu załadowanego przez LOAD. Najfajniej byłoby jednak, gdyby można było przekazać normalną linię komend PLUS ewentualnie zmienne. W ogóle to są przewidziane słowa kluczowe do odczytu linii komend przekazanej z DOS-u, więc może się da tak samo przekazywać pomiędzy programami w BASIC-u.

3,858

(21 odpowiedzi, napisanych Sprzęt - 8bit)

65XE: procesor 6502, 1,77 MHz (wersja PAL), 1,79 MHz (wersja NTSC), 64k RAM-u, 24k ROM-u.

Dla zupełnej jasności, NetBSD jest na Atari, ale nie na modele XL ani XE. NetBSD jest wprawdzie bardzo portowalne, ale nie aż do tego stopnia.

3,859

(66 odpowiedzi, napisanych Fabryka - 8bit)

* wspaniale byłoby mieć możliwość użycia LOCAL dla PROC (z basic XE)

Myślę, że da się zrobić.

* czy print będzie tak "wypasiony" (o możliwość formatowania txt) - jak ma to miejsce w BasicXE

Spróbuję, ale na razie chcę zaimplementować i przetestować wszystkie featury Turbo BASIC-a, a potem dopiero wziąć się za BASIC XE.

* może nie-doczytałem; co z kompilatorem ??

Nie wszystko na raz :P Za kompilator się wezmę, jak interpreter będzie jako tako skończony.

* czy użycie ramu liniowego 816 musi być koniecznością ? - z jednej strony zapewne przyspiesza to działanie interpretera jako całości; z drugiej strony ram liniowy 816 zainstalowany jest w 3 kompach - i to akurat u osób nagminnie nie używających basica.. :):)
* Draco - jak to testujesz bez ramu liniowego ??  :twisted:

No właśnie, testuję na sprzęcie bez RAM-u liniowego, bo jej użycie nie jest koniecznością. Z braku linowego RAM-u interpreter będzie oczywiście używał podstawowej pamięci, ale nie wiem, ile jej zostanie na program. W chwili obecnej przy najlepszych wiatrach ?FRE(0) mówi o jakichś 28k.

3,860

(66 odpowiedzi, napisanych Fabryka - 8bit)

Do krapa mam bliżej.

3,861

(66 odpowiedzi, napisanych Fabryka - 8bit)

Chodzi ci o tryb EXTEND, jak w BASIC-u XE? Raczej nie. W charakterze dodatkowej pamięci planuję wykorzystać po prostu pamięć liniową Warpa, do której załaduje się i sam interpreter i w której będzie przechowywany program, tablice itd.

3,862

(66 odpowiedzi, napisanych Fabryka - 8bit)

Ja w chwili obecnej pracuję nad nowym interpreterem BASIC-a. Ma to być język programowania na Atari wyposażone w Warpa-4 albo Nową Nienazwaną Dopałę Pasia (na Atari z "golym" 65c816 też pójdzie, ale zostawi mało wolnej pamięci). W związku z tym istnieje tylko wersja pod 65c816, a wersja na 6502 nie powstanie, bo na 6502 jest świetny Turbo BASIC XL i to wystarczy (a ci, co nie chcą sobie za bardzo ułatwiać, mają Atari BASIC).

Screenshota nie posiadam, ale niebieski ekran z napisem "Ready" każdy sobie może łatwo wyobrazić. Nie mogę się też podzielić żadą wersją preview na razie, z braku kabelka.

Nazwa b. oryginalna pochodzi od tego, że MultiBASIC ma stanowić połączenie Turbo BASIC-a XL i BASIC-a XE. Zgodność z Turbo BASIC XL jest na poziomie tokenów (do MultiBASIC-a można wczytywac programy TBXL przez LOAD i one będą działać), natomiast zgodność z BASIC XE ma być na poziomie słów kluczowych (do MultiBASIC-a będzie można wczytywać programy BASIC-a XE przez ENTER i one może będą działać).

W opisie poniższym zakładam, że Atari BASIC i Turbo BASIC XL jest wszystkim znany, wyszczególnię więc tylko różnice w stosunku do obydwu.

Przede wszystkim, interpreter działa z linii komend pod SpartaDOS i pod DOS II+/D (za to ostatnie trzeba dziękować Lizardowi, bo to jego parser jest tam wkompilowany, z małymi acz niezbędnymi modyfikacjami). Składnia:

mb [options] [filename.bas]

Program o nazwie 'filename.bas' zostanie automatycznie załadowany. Opcje są następujące:

-R - po załadowaniu program jest automatycznie uruchamiany, a po zakonczeniu albo przewaniu interpreter zgłasza się przez "Ready"
-B - jak wyżej, ale po zakończeniu programu interpreter wraca do DOS-u

Komunikaty BASIC-a są trochę mniej toporne niż w Atari BASIC: jest "Ready" zamiast "READY", "Error 170 at line 15" zamiast "ERROR-  170  AT LINE 15", "Stopped" zamiast "STOPPED". Dodatkowo obsługa błędów jest rozszerzona opcjonalnie o dwie rzeczy:

- słowne komunikaty błędów, dłuższe niż w TBXL, do 12 znaków
- numer błędu jest wypisywany jako liczba ujemna

A więc nie "ERROR-  170 AT LINE 17", tylko "Error -86 NO SUCH FILE at line 17". Obie featury można wyłączyć.

Listing jest wyprowadzany z wcięciami, jak w TBXL. Można to wyłączać i włączać na dwa sposoby, albo jak w TBXL (poleceniem *L) albo jak w BXE (poleceniem SET). Można regulować skok wcięcia, oraz oddzielnie włączyć i wyłączyć wcięcia dla komend REM i --.

Dodatkowo można opcjonalnie włączyć listowanie w stylu BASIC-a XE, czyli słowa kluczowe mają pierwszą literę dużą, a resztę małymi (np. For I=1 To 1000 Step 0.9:Next I itp.).

Program można wpisywać dużymi lub małymi literami, bez różnicy (można przełączyć na wyłącznie duże litery, zgodnie z BASIC XE). Interpreter akceptuje wszystkie słowa kluczowe napisane małymi literami, a nie, jak TBXL, tylko te, które zaczynają się od litery, a więc małymi literami można wpisać również -MOVE albo %GET i nie będzie błędu.

Rozszerzenia słów kluczowych Atari BASIC i Turbo BASIC XL:

1) polecenia POKE, DPOKE, MOVE, -MOVE, oraz funkcje ADR(), DPEEK(), PEEK() operują na 24-bitowych adresach.

2) funkcja VAL() opcjonalnie konwertuje liczy HEX, tak jak w BASIC-u XE.

3) wszystkie konwersje HEX<>DEC są 24-bitowe. DEC() konwertuje także liczby napisane małymi literami, w inwersie, poprzedzone spacjami (co w TBXL nie zachodzi).

4) funkcja USR() działa jak w BASIC XE, to znaczy opcjonalnie może nie wstawiać na stos liczby parametrów. USR() działa tylko na banku 0 (pierwsze 64k).

5) błąd procedury kontroli składni dla poleceń DIM i COM został poprawiony.

6) CLOSE może być bez parametru, jak w Turbo BASICu XL

7) STATUS zwraca ujemny kod błędu, jeśli takowe są włączone

7,9) POINT akceptuje stałe, a nie tylko zmienne (to jak w TBXL)

9) Rozszerzona instrukcja SOUND:

- SOUND bez parametru, jak w TBXL
- SOUND z dodatkowym parametrem:

SOUND #n
SOUND #n,chn,freq,pitch,vol

gdzie "#n" może być #0 albo #1 i oznacza kanał lewy i prawy dla komputerów ze stereofonicznym Pokeyem. Tak samo DSOUND.

10) rozszerzone instrukcje NEW/LOAD/SAVE/RUN:

NEW "filename.bas"

definiuje domyślną nazwę dla nowego programu. Wpisanie SAVE bez parametrów spowoduje zapis pod tą właśnie nazwą. LOAD bez parametrów ładuje program o takiej nazwie, LOAD "filename.bas" ładuje program o wskazanej nazwie i ustawia ją jako domyślną (a więc działa jak NEW "filename.bas" / LOAD). RUN "filename.bas" działa tak samo, ale jeszcze oczywiście uruchamia wczytany program. SAVE z podaną nazwą zapisuje program pod tą nazwą, ale NIE ZMIENIA nazwy domyślnej.

11) jeszcze jedno rozszerzenie do RUN:

RUN 100
RUN "filename.bas",100

Pierwsze uruchamia program od linii 100, drugie ładuje najpierw plik "filename.bas", a potem odpala go od linii 100. Co do numeru linii, działa to jak LIST 100,200, to znaczy program odpalany jest od linii 100, a jeśli jej nie ma, to od najbliższej następnej.

Wszystko to jest już zaimplementowane i działa. Jest też zaimplementowana spora garść komend Turbo BASIC-a XL, to jest w chwili obecnej:

- komendy: DPOKE, MOVE, -MOVE, *F, *B, *L, REPEAT, UNTIL, WHILE, WEND, IF, ELSE, ENDIF, BPUT, BGET, FILLTO, DO, LOOP, EXIT, DIR, LOCK, UNLOCK, RENAME, DELETE, PAUSE, TIME$, FCOLOR, --, BLOAD, BRUN, CLS, DSOUND

- operatory i funkcje: DPEEK, &, !, EXOR, %0, %1, %2, %3, HEX$,DEC,DIV,MOD,FRAC,TIME,RND,RAND,TRUNC,ERR,ERL

Z BASIC-a XE napisałem dopiero:

- komendy: SET
- operatory i funkcje: SYS, %

'%' to to samo co EXOR w TBXL.

SET i SYS() służą do regulacji parametrów pracy interpretera i włączania i wyłączania różnych opcji. Docelowo (tego jeszcze nie ma) interpreter będzie tuż po starcie ładował plik ustawień z katalogu domyślnego (czyli z tego, z którego został załadowany, albo z bieżącego). Plik ustawień będzie normalnym programem BASIC-a z poleceniami SET w środku, oczywiście będzie mógł też zawierać dowolne inne.

Słowa kluczowe nowe dla MultiBASIC-a:

1) AUTO, włączenie automatycznej numeracji linii, jak w Microsoft BASIC:

AUTO
AUTO start
AUTO start,step

Defaultowo "start" (numer linii od której zaczyna się numeracja) jest 10, a step jest 5. Po pierwszym użyciu komenda zapamiętuje ostatnio wypisany numer linii i za drugi razem startuje od niego. Reset przez NEW albo przez AUTO 0,0.

2) FILE, przypisuje wskazanej zmiennej numerycznej numer pierwszego wolnego kanału IOCB. Użycie:

K=FILE:OPEN #K,4,0,"D:fname":GET #K,A:? A:CLOSE #K

3) SEEK:

SEEK #n,var
SEEK #n,num

Robi seek na wskazanym pliku "n" do pozycji wskazanej zmienną albo stałą numeryczną.

4) TELL - odwrotność SEEK, przypisuje wskazanej zmiennej bieżącą pozycję we wskazanym pliku.

TELL #1,var

5) FLEN - przypisuje wskazanej zmiennej długość pliku:

FLEN #n,var

Oczywiście, żeby skorzystać z komend SEEK, TELL i FLEN, trzeba mieć SpartaDOS  ;)

6) WAIT - wstrzymuje CPU do chwili wystąpienia jakiegokolwiek przerwania.

7) VOID:

VOID expression

Oblicza wyrażenie numeryczne 'expression' i ignoruje wynik  ;) Jest to w zasadzie komenda dla przyszłego kompilatora MultiBASIC-a, ale w interpreterze też się przyda, np.:

VOID USR(adres)

7,9) PI - pseudozmienna o wartości 3,14159265

To na razie tyle. W planach jest jeszcze wiele rzeczy, ale nie są jeszcze do końca ustalone. Z planów: listę tokenów instrukcji można rozszerzać w zasadzie w nieskończoność, a konkretnie może być ich 256 bez specjalnego trudu (zajęte jest ok. 120). Dlatego stopniowo można zaimplementować wszystkie komendy BASIC-a XE i Microsoft BASIC-a, o ile nie będzie specjalnych konfliktów co do składni albo znaczenia (przykładowo EXIT w TBXL i Exit w BASIC-u XE - raczej trudno jest je pogodzić).

Gorzej natomiast jest z tokenami funkcji, tych może być tylko 128, z czego obsadzonych jest 114. Pozostają dwa tokeny "normalne" oraz 12 zarezerwowanych na oznaczanie typów zmiennych i tym podobne. Jeśli uda mi się wykorzystać jeden z tokenów rezerwy na prefix dla dodatkowych operatorów i funkcji, to stopniowo zaimplementuję wszystkie funkcje z BASIC XE i Microsoft BASIC. Jeśli nie - to tylko najciekawsze minimum.

3,863

(36 odpowiedzi, napisanych Zloty)

Ok, środa godzina 17.00. Jak mi coś nagle nie wypadnie (a nie zanosi się), to będę.

3,864

(74 odpowiedzi, napisanych Sprzęt - 8bit)

Tak, Jacek mi przerobił na nową. 3k ROM-u to wypas  ;)

3,865

(69 odpowiedzi, napisanych Software, Gry - 8bit)

   ldx #$00
   lda #$0c
   sta iccmd,x
   jsr jciomain
   lda #$03
   sta iccmd,x
   lda #<ename
   sta icbufa,x
   lda #>ename
   sta icbufa+1,x
   lda #$0c
   sta icax1,x
   lda #$00
   sta icax2,x
   jsr jciomain
   ...
ename .by "E:",$9b

Ewentualnie:

   jsr eopen
   ...
eopen lda $e401
   pha
   lda $e400
   pha
   rts

Ale ten drugi sposób nie jest za bardzo dobry, bo będzie włączał standardowy tryb nawet jeśli ktoś ma zainstalowany np. sterownik edytora 64-kolumnowy albo coś takiego.

3,866

(74 odpowiedzi, napisanych Sprzęt - 8bit)

Mój interfejs już ma dwa banki, prace nad handlerem v. 2.0 trwają  ;)

3,867

(36 odpowiedzi, napisanych Zloty)

Postaram się być. Łatwiej mi znaleźć czas we środę niż w sobotę, ale zdaje się, że tę sobotę (21. maja) mam akurat wolną...

3,868

(15 odpowiedzi, napisanych Software, Gry - 8bit)

Dema można pisać i w wersji bez CLI, nie? :) Wersja CLI ma to dodatkowo, że może robić jako interpreter skryptopodobny.

3,869

(15 odpowiedzi, napisanych Software, Gry - 8bit)

No, na tym polega plan. Na Amidze może być AREXX jako język "systemowy" (nb. wynalazek IBM-a, miałem kiedyś do czynienia z komputerem, w którym wszystko było w języku REXX, nawet objecty wychodzące z kompilatora C), to w Atari może być Turbo BASIC. Bardzo wygodna sprawa, ostatecznie nie wszystko trzeba pisać w asmie, coś w rodzaju skryptów też jest do życia potrzebne.

3,870

(15 odpowiedzi, napisanych Software, Gry - 8bit)

Pin: źrodeł TBXL szukają od paru lat dwie osoby co najmniej, to jest ja oraz niejaki Lonny Pursell (lp2 na ircu). Skoro do tej pory nie znaleźliśmy, to raczej ich nie ma, ale z drugiej strony wiadomo, że na świecie są rzeczy, o których się filozofom nie śniło, oraz najciemniej jest pod latarnią.

xxl: pisałem na ten adres i ja i LP jeszcze jakieś 4 czy 5 lat temu. Zero odpowiedzi. Może trzeba napisać po niemiecku :>

[ Dodano: 13.05.2005 02:29:59 ]
PS. Będzie i kompilator, wszystko po kolei. ;)

3,871

(39 odpowiedzi, napisanych Sprzęt - 8bit)

Uwzględnić resztę świata poza QMEG-iem. W KMK/JŻ IDE kombinacja SHIFT/RESET odłącza twardy dysk, a SELECT/RESET (ale nie we wszystkich wersjach) powoduje zimny start. W DracOSie SELECT/RESET robi to samo.

3,872

(15 odpowiedzi, napisanych Software, Gry - 8bit)

Poczekaj moment, ja mam już interpreter działający z linii komend, na razie jest w testach i bugfixach ;)

3,873

(36 odpowiedzi, napisanych Programowanie - 8 bit)

Jeśli zamierzasz robić coś w rodzaju GEOS-a (a zdaje się, że pamiętam taką wzmiankę), to możesz pójść na kompromis. To znaczy, zachować możliwość korzystania na raz z paru programów ale bez wywłaszczania. Nie wiem, jak się to nazywa po polsku, ale po angielsku to jest cooperative multitasking. Dobrym przykładem jest np. Geneva na Atari ST. Działa to całkiem dobrze i daje bardzo duże złudzenie rzeczywistego multitaskingu, póki, oczywiście, nie zapuścisz pętli w rodzaju

jmp *

Działa to na zasadzie pętli zdarzeń, która jest w środku managera aplikacji. Zakłada się, że każdy program czeka na jakieś zdarzenie (w rodzaju: naciśnięcie klawisza, kliknięcie na element okna, upływ określonej ilości czasu, wybranie czegoś z menu, określone ruchy myszą - wejście w zdefiniowany obszar albo wyjście z niego - itp.), reaguje na nie, a potem z powrotem wraca do czekania.

W takim układzie zadanie podziału czasu pomiędzy "procesy" może spełniać pętla zdarzeń. W chwili, kiedy program zadaje jej oczekiwanie na np. naciśnięcie klawisza, a żaden klawisz naciśnięty nie jest, pętla spokojnie może oddać czas do innego programu, który czeka na inne wydarzenie, a to w międzyczasie wystąpiło (np. upływ zadanej ilości czasu).

Efektem jest, jak napisałem powyżej, dość dobre złudzenie wieloprocesowości, a przy tym łatwiejsza jest synchronizacja wszystkich zadań, no i scheduler powieszony na przerwaniu VBL nie zabiera czasu, bo go nie ma wcale.

3,874

(36 odpowiedzi, napisanych Programowanie - 8 bit)

z ta emulacja Konop ma racje, moze zbyt doslownie go zrozumieliscie

Dobrze zrozumieliśmy, taki system to czyste zawracanie głowy.

3,875

(36 odpowiedzi, napisanych Programowanie - 8 bit)

Przestańcie sobie jeździć wzajemnie po ambicji oraz nie łapcie się wzajemnie za słowka - wyjdzie to na lepsze merytorycznemu poziomowi dyskusji.

Dyskusja się skończyła dwa dni temu  :P