atarionline.pl Uciążliwości BASICa - 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: CommentAuthormono
    • CommentTime3 Jan 2010 zmieniony
     
    Poprawione błędy LOCATE i PRINT#6.

    Dodatki:

    1. Funkcja ADR przyjmuje dowolną zmienną (numeryczną, tablicową lub tekstową) lub stałą tekstową:
    ADR(A)
    ADR(A(0))
    ADR(A(0,0))
    ADR(A$)
    ADR(A$(1))
    ADR(A$(1,2))
    ADR("ABC")

    co umożliwia przekazywanie parametrów "przez referencję" do funkcji USR (np. ?USR(ADR(...),ADR(...),...)).

    2. Zmieniono trochę działanie funkcji FRE. Aktualnie FRE z wartościami nieujemnymi zwraca ilość wolnej pamięci niskiej (a więc działa analogicznie, jak w AB), natomiast FRE z wartościami ujemnymi zwraca ilość całej pamięci dostępnej dla działania basx'a. Umożliwia to wykorzystanie w programie niezafałszowanej informacji z FRE(0) do oceny ilości wolnej pamięci dla danych.

    ?FRE(-1) zwraca 44331 (dos2.5+cp) lub 50992 (bez).
    • 2:
       
      CommentAuthorKaz
    • CommentTime3 Jan 2010
     
    Kompilator do tego tez zrobisz? :)
    • 3: CommentAuthormono
    • CommentTime4 Jan 2010
     
    Kto wie co przyniesie przyszłość? :D
    • 4: CommentAuthorQTZ
    • CommentTime14 Dec 2011
     
    Przeglądając dyskietki z magazynem Flop natknąłem się na podobny stary projekt CTH-Fast Basic - jest na dyskietce Flop 37b. W załączniku program z tłumaczeniem z "automatu" - niezbyt poprawne ale da się zrozumieć :) (tłumacz - interpreter) warto przeczytać, bo jest tam opisamy problem z CTH-FB i jego rozwiązanie.
    • 5: CommentAuthorat0mic
    • CommentTime20 Mar 2012 zmieniony
     
    Witam,

    ze względu na początki poznawania Atari (od środka) piszę dużo testowych programów w Basic+ wstawki assemblerowe.

    Robię to w emulatorze bo nie posiadam prawdziwego komputera.

    Nie mogę zapisać swojego programu na wirtualnej dyskietce moje.atr

    poleceniem SAVE "d:prg1.sav"

    -> Error- 130
    druga rzecz to że zapisuję pamięć począwszy od ($C000) 49152: danymi 0,0,0,0,0,0,0,0,85,85,85,85,85,85,85,85,170,170,170,170,170,170,170,255,255,255,255,255,
    i powtarzam ten patern przez 128 fontów
    ale niestety nie widać tego po wpisaniu
    POKE 756,192
    i nawet w Monitorze JM
    po wydaniu komendy C000 powinno być:

    C000: 00 00 00 00 00 00 00 55 55 55 55 55 55 55 55 55
    C010: AA AA AA AA AA AA AA FF FF FF FF FF FF FF FF FF ....
    itd

    a są śmieci zamiast mojego paternu
    załączam zrzut z emulatora Atari800Win Plus 4.0

    Nie wiem jak zapisywać fragment pamięci aby można było przerzucać kawałki danych a może i kodu między Atari i Commodore ? w C64 w Monitorze JM piszę S "kawalekRAM",8 1000 C000 i to zapisuje mi na dysku RAM między 1000 a C000 dodając 2 bajtów danych na poczatku (adres poczatku LOHI) co po odrzuceniu daje czytą binarkę do mielenia przez inne programy.

    Proszę o pomoc bo coś źle robię i kręcę się w koło
    • 6:
       
      CommentAuthorlarek
    • CommentTime20 Mar 2012 zmieniony
     
    Rzuć okiem na mapę pamięci i zobacz co jest pod adresem $C000. Dla ułatwienia dodam, że w ROM nic nie zapiszesz.

    Rozwiązania zagadki błędu 130 szukaj tu: kody błędów
    Jeśli dyskietka jest odpowiednio przygotowana i został wczytany DOS, to SAVE "D:PRG1.SAV"* musi działać.

    *) zwróć uwagę na wielkość liter
    • 7: CommentAuthorat0mic
    • CommentTime20 Mar 2012 zmieniony
     
    4.8.5 49152 - 53247
    Locations 49152 to 53247 ($C000 to $CFFF) are unused.
    Unfortunately, this rather large 4K block of memory cannot be written to by the user, so it is
    presently useless.

    ok rozumiem - czytałem wcześniej po łebkach i to mnie zgubiło


    W c64 procesor zapisuje zawsze do RAM jeśli operuje nawet na równoległym obszarze ROM nie ważne jak skonfigurowana jest pamięć.
    wyjątkiem są operacje IO. Domniemałem że ponieważ zapis do rom jest niemozliwy to w Atari jest podobnie jak w C64. Czytanie pamięci przez procesor to już w zależności od komórki 0001. Poza tym układ wizyjny C64 widzi zawsze RAM (oprócz adresów $1000 i $9000 tam widzi rom znaków mimo że fizycznie jest pod $D000 - takie udziwnienie którego do końca nie rozumiem). Widzę że inne "specyficzne" sytuacje są i na Atari.
    wybrałem

    wybrałem inny obszar:
    4.8.3 32768 - 40959
    CARTRIDGE B: 8K
    Locations 32768 to 40959 ($8000 to $9FFF) are used by the right cartridge (Atari 800 only), when
    present. When not present, this RAM area is available for use in programs. When the 8K BASIC
    cartridge is being used, this area most frequently contains the display list and screen memory


    M 8000 wyświetla to co trzeba
    ale wydając komendę POKE 756,128 daje śmieci na ekranie zamiast zapisanych tam wzorów. Pewnie jeszcze coś źle robię...

    nie rozumiem też co to znaczy wczytać DOSa? w c64 formatowałem dysk i już.

    Znaczy ten DOS to program jakiś rozruchowy do operacji IO jak system DOS w Pececie ?
    • 8:
       
      CommentAuthorjhusak
    • CommentTime20 Mar 2012
     
    Atari w systemie ma obsługę tylko magnetofonu jako regularnego urządzenia pamięci masowej. Co do dysków, to SO ma obsługę odczytu i zapisu sektorów. Nie ma obsługi filesystemów, etc.

    Za tym idzie: aby pracować ze stacją (czy hdd, czy innym takim urządzeniem) potrzebne jest oprogramownie, które nada logikę zbiorowi sektorów na dysku. I to właśnie jest DOS. Ponadto dos umożliwia:
    uruchomienie/odczyt/zapis plików z dysku
    inicjalizację systemu plików (sam format nie zapisuje filesystemu, tylko puste sektory, ale jest w SO)
    zabezpieczanie/odbezpieczanie/kopiowanie/usuwanie plików.
    zapisanie dosa na dyskietce.

    To, że Atari nie jest przywiązane do jakiegoś konkretnego filesystemu to jest duża zaleta.

    nie rozumiem też co to znaczy wczytać DOSa? w c64 formatowałem dysk i już.

    Znaczy ten DOS to program jakiś rozruchowy do operacji IO jak w Pececie ?

    Można to tak rozumieć.

    Trzeba mieć na uwadze, jak różne jakościowo są oba systemy operacyjne (C64 i Atari)

    Na SO Atari wzorowało się dużo późniejszych systemów operacyjnych (vide MS-DOS) z tymi literkami a: b: c: d: - jak w Atari.

    W Atari np. definicja nowego urządzenia jest trywialna. literka i wektor do wektora operacji: open close read write (tak z grubsza)

    I możesz hulać sobie. Nieważne, czy zapisujesz na A: D: C: T: czy innych (np E: - czyli edytor ekranowy) obsługa od strony użytkownika jest ta sama.

    Drukowanie ekranu to operacja "while not eof odczytaj bajt z E: i zapisz je na urządzeniu P:"
    • 9: CommentAuthorat0mic
    • CommentTime20 Mar 2012 zmieniony
     
    IO w Atari jest zajefajne :D
    • 10:
       
      CommentAuthorjhusak
    • CommentTime20 Mar 2012
     
    Nooo.
    • 11:
       
      CommentAuthorjhusak
    • CommentTime20 Mar 2012 zmieniony
     
    musisz też wiedzieć tak ogólnie, że:
    atari ma rom od c000 do CFFF ale odłączany.
    rom od D800 do FFFF też odłączany.
    no i basic jako cartridge w przybliżeniu pod A000-BFFF.

    Jak odłączysz ROM, to masz dostęp do ramu pod nim.
    ale trzeba uważać, żeby żadne przerwanie nie wystąpiło, dopóki nie ma procedury jego obsługi w pamięci, czy to ram, czy rom.

    Czyli CLI, zaglądasz pod rom, cośtam robisz, przepisujesz, a na koniec SEI.

    Także o ile spectrum miał 48 kB pamięci: 16 kB na basic i SO + 48 kB ram, na C64 nie wiem, o tyle atari 65 XE ma naprawdę 62 kB ram+24 kb rom czyli 86 kB pamięci :)


    W Atari wszystko jest logiczne i proste. Jeśli czegoś nie rozumiesz, pomyśl, jakbyś Ty to zrobił, żeby było dobrze. I z reguły jest właśnie tak, lub bardzo podobnie. A jak jest inaczej, to jest lepiej, niż wymyśliłeś :)
    To jest naprawdę najlepiej obmyślany ośmiobitowiec z wielkiej czwórki.
    Co z tego, że nie ma trybu atrybutowego? Jakby miał, to byłoby to kompletne wyłamanie się z założeń systemu. A tak naprawdę to jest jedyny brak Atari, a mają to wszystkie komputery dookoła. (ale jest VBXE, który ten problem załatwia, ale wiem, to już jest nasze polskie, a nie Atari. I sporo późniejsze.)
    • 12:
       
      CommentAuthorKrótki
    • CommentTime21 Mar 2012
     

    jhusak:

    Na SO Atari wzorowało się dużo późniejszych systemów operacyjnych (vide MS-DOS) z tymi literkami a: b: c: d: - jak w Atari.

    To już prędzej na CP/M-ie się wzorowali, który też zresztą tego nie wymyślił.
    • 13:
       
      CommentAuthorjhusak
    • CommentTime21 Mar 2012
     
    A swoją drogą to ciekawe, kto pierwszy zastosował te literki do oznaczania napędów/urządzeń.
    • 14: CommentAuthorat0mic
    • CommentTime21 Mar 2012 zmieniony
     
    W Atari wszystko jest logiczne i proste. Jeśli czegoś nie rozumiesz, pomyśl, jakbyś Ty to zrobił, żeby było dobrze. I z reguły jest właśnie tak, lub bardzo podobnie.

    Jak odłączysz ROM, to masz dostęp do ramu pod nim.
    ale trzeba uważać, żeby żadne przerwanie nie wystąpiło, dopóki nie ma procedury jego obsługi w pamięci, czy to ram, czy rom.

    Czyli CLI, zaglądasz pod rom, cośtam robisz, przepisujesz, a na koniec SEI.


    w Atari niestety trzeba stosowac logikę NOT w stosunku do C64.

    w C64 SEI ustawia maskowanie IRQ a CLI włącza IRQ a w Atari jak widać jest odwrotnie. W C64 nie musisz się podłączać do systemu i całkowicie można ROM odłączyć przy używaniu przerwań, a w Atari na czas przerwań trzeba włączyć ROM żeby obsłużyć przerwanie ;) dziwny jest ten świat.

    Mam spory problem z przerwaniami na atari, czy jest jakiś standardowy program obsługi IRQ którego mogę użyć do eksperymentów. Mapa chyba mi nie wystarczy bo mam naleciałości z C64 i ciężko jest mi myśleć z poziomu innej platformy skoro procek 65xx, więc wszystko wydawałoby się to samo powinno być w assemblerze a nie jest.
    • 15: CommentAuthorxxl
    • CommentTime21 Mar 2012
     
    - na atari sei/cli dzialaja tak samo jak na c64
    - na atari mozna wylaczyc ROM calkowicie i uzywac przerwan
    itd. itd.
    • 16: CommentAuthorVidol
    • CommentTime21 Mar 2012
     
    @atomic moze to troche pomoze:
    ->link<-
    i jeszcze to:
    ->link<-
    • 17:
       
      CommentAuthortdc
    • CommentTime21 Mar 2012
     

    at0mic:

    w Atari na czas przerwań trzeba włączyć ROM żeby obsłużyć przerwanie ;) dziwny jest ten świat.

    To nie jest absurdalne tylko system po pierwsze obsługuje rejestry cienie a po drugie musi się gdzieś znajdować program obsługi przerwania i dlatego nie możesz sobie tak po prostu odłączyć systemu bo cały czas funkcjonują przerwania itp. są przez system zainicjowane itp. i działają na jego modłę.

    W Atari wykorzystywanie przerwań jest jak najbardziej wskazane bez systemu, wielu koderów pierwsze co robi to wyłącza system.

    Cały problem w tym że skoro przerwania cały czas działają to przed wyłączeniem systemu trzeba umieć te przerwania wywalić z systemu a następnie przygotować sobie nowe procedury obsługi, które już systemu nie wymagają (co oszczędza nieco czasu CPU).
    • 18: CommentAuthorat0mic
    • CommentTime21 Mar 2012
     
    *** SERDECZNE DZIĘKI WSZYSTKIM ZA POMOC ***
    • 19:
       
      CommentAuthorjhusak
    • CommentTime21 Mar 2012 zmieniony
     
    w Atari niestety trzeba stosowac logikę NOT w stosunku do C64.

    w C64 SEI ustawia maskowanie IRQ a CLI włącza IRQ a w Atari jak widać jest odwrotnie.


    No kopłem się z tym cli i sei, bo na atmedze to działa odwrotnie 8/

    Sory at0mic za zamieszanie.
    • 20:
       
      CommentAuthorjhusak
    • CommentTime21 Mar 2012 zmieniony
     
    Co do kursu asemblera ->link<- - @tebe - błęda znalazłem.
    Bit 3 gdy jest ustawiony, łączy dzielniki generatorów 3 i 4 w jeden dzielnik 16bitowy, który umożliwia bardziej
    precyzyjną regulację częstotliwości. Poszerza to również zakres uzyskiwanych częstotliwości ze 125Hz-32kHz
    do 0.5Hz-32kHz, a po zmianie zegara bazowego przy pomocu bitu 5 na 16Hz-1MHz.


    Otóż pokey na częstotliwości 1.79MHz może z siebie wydobyć nie 1.79/2 ale 1.79/7/2 (tzw hsindex 0) co daje niemal 128 kHz.

    (1 790 000 / 7) / 2 = 127 857.143

    (za altirra hardware reference manual)
    The timers take three cycles to reload after underflowing. With the slow 15KHz or 64KHz clocks, the reload is hidden by the clock, but with the fast 1.79MHz clock, the reload causes a slight change in the timer period. For an 8-bit fast timer with AUDFx value N, the actual period is N+4 clocks. In the paired (16-bit) case, the second timer is delayed by the reload of the first timer, and therefore both timers are not reset until an additional three clocks later, making the period N+7.


    Jednak biorąc pod uwagę możliwość wprowadzania filtru górnoprzepustowego, ta częstotliwość prawdopodobnie może być 2 x wyższa :) tj 256 khz.

    Prawdopodobnie, bo operujemy w mechanice kwantowej :P

    Programowo możemy otrzymać nieco mniej 1790000/8 (ciągi sta stx dwóch wartości do audf, raz na jakiś czas skok oraz opóźnienia na
    odświeżaniu pamięci), czyli niecałe 222 khz.
    • 21:
       
      CommentAuthorjhusak
    • CommentTime11 Dec 2012
     
    @mono, są jakieś wieści z basx?
    • 22: CommentAuthormono
    • CommentTime11 Dec 2012
     
    Chwilowo nie ma. Mam całą listę bugów do poprawki, ale na razie muszę się zabrać za inne tematy. Do końca roku pewnie przy tym nie pogrzebię :(