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
     
    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
     
    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
     
    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
     
    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
     
    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
     
    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
     
    Ź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
     
    No to wyszła moja znajomość jedynie MAC65 z assemblerów ;)