atarionline.pl Operacje SIO - 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: CommentAuthorlevi
      • CommentTime11 Apr 2010 14:04
       
      Czy ktoś może mi pomóc w zakodowaniu zapisu na dyskietkę? Korzystam z procedury JSIOINT pod $E459. Z odczytem jest wszystko OK pod warunkiem, że w emulatorze Atari800Win Plus 4.0 jest włączona opcja SIO patch. Kiedy emulacja stacji dysków pracuje z rzeczywistą prędkością mogę czekać w nieskończoność i nic się nie załaduje.
      Większy problem jest z zapisem. Wykonuję program wg kodu:

      lda #$31
      sta $0300
      lda #$01
      sta $0301
      lda #$50
      sta $0302
      lda #$80
      sta $0303
      lda <$4000 ;zapis obszaru od $4000
      sta $0304
      lda >$4000
      sta $0305
      lda #$08
      sta $0306
      lda <$100 ;długośc bloku 256 bajtów
      sta $0308
      lda >$100
      sta $0309
      lda <$ff ;zapis na sektor nr 255
      sta $030a
      lda >$ff
      sta $030b
      jsr $E459

      Po skompilowaniu programu dane zapisują się tylko za pierwszym razem. Przy kolejnych próbach plik .atr się nie zmienia. Sprawdzałem datę modyfikacji i dane w miejscu tego sektora.
      Dyskietkę stworzyłem programem MakeATR jako DD (720 sektorów po 256 bajtów)
      • 2:
         
        CommentAuthorMaW
      • CommentTime11 Apr 2010 15:04
       
      to raczej błąd tego emulatora, podobnie jest w basicu z próbą ponownego odczytu pliku z urządzenia H: przez procedurę ENTER lub BGET - jeżeli nie zmieni się jego data i wielkość to po pierwszym odczycie kolejne są "puste"
      • 3: CommentAuthorlevi
      • CommentTime11 Apr 2010 21:04
       
      Może to rzeczywiście wina emulatora, ale oglądałem na nim różne demka i czytały wszystko bez względu na opcję SIO patch. Zapisywałem też fragmenty pamięci w TURBO DOS 2.5 jak i dane w Music Pro Tracker i wszystko było w porządku. Te dane były zapisywane plikowo, ale SIO to niższy poziom więc jakby emulator nie radziłby sobie z SIO to i z operacjami na plikach byłyby problemy.
      • 4:
         
        CommentAuthorjhusak
      • CommentTime12 Apr 2010 00:04
       
      A ustawiasz wszystkie parametry jeszcze raz (przed każdą operacją na dysku)? Z tego, co pamiętam, SO modyfikuje te parametry, więc za każdym razem trzeba je ustawiać od początku (nie wiem dokładnie, których to dotyczy, ale najlepiej jest wszystko inicjalizować). Tyle pamiętam.
      • 5:
         
        CommentAuthorjhusak
      • CommentTime12 Apr 2010 00:04
       
      A, i jeszcze masz błąd w miejscu:
      lda <$100 ;długośc bloku 256 bajtów
      sta $0308
      lda >$100
      sta $0309
      lda <$ff ;zapis na sektor nr 255
      sta $030a
      lda >$ff
      sta $030b
      Mianowicie, powinno być tam
      lda #0
      sta $0308
      lda #1
      sta $0309
      lda #$ff ;zapis na sektor nr 255
      sta $030a
      lda #0
      sta $030b

      inaczej pobierasz dane z pamięci o adresie podanym w operandzie, a nie z operandu.

      Zakładam, że adresy $03xx podałeś poprawne.
      • 6: CommentAuthor0xF
      • CommentTime12 Apr 2010 10:04
       
      Pod QA/xasm/mads składnia < / > oznacza adresowanie natychmiastowe, więc jest ok. Jeśli działa pierwsza operacja, a następne nie, to najprawdopodobniek $303 jest zapisywany tylko przed pierwszą operacją, a powinien przed każdą, bo jest tam zwracany kod błędu.
      • 7: CommentAuthorlevi
      • CommentTime12 Apr 2010 14:04
       
      Źle mnie zrozumieliście z tymi kolejnymi próbami. Ja za każdym razem uruchamiałem tą sama procedurkę (plik .XEX). Nie ryzykowałbym nie wpisując ponownie wartosci do komórek $03xx. Ale już wszystko jest jasne - po prostu emulator zapisuje obraz dysku w pamięci i od razu nie aktualizuje pliku .ATR.
      Dziekuję i pozdrawiam!
      • 8:
         
        CommentAuthorjhusak
      • CommentTime13 Apr 2010 01:04
       
      No to wyszła moja znajomość jedynie MAC65 z assemblerów ;)