1

Temat: ladowanie danych z dysku

czy ktos by mogl przyblizyc mi temat?
mam potrzebe zaladowac 400kb danych do atari, ale ni w zab nie wiem jak
dane znajdowac mialy by sie na dysku, w osobnym pliku
oczywiscie danych jest sporo, wec musze sobie je czytac po jakims kawalku i przepychac we wlasciwe miejsce - czy to vbxe czy extram

przechodze na tumiwisizm

2

Odp: ladowanie danych z dysku

Ustawienie banku ext, load w $4000, zmiana banku, goto początek :)

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

3

Odp: ladowanie danych z dysku

rozwin load ;)
nicht parle in basic

przechodze na tumiwisizm

4

Odp: ladowanie danych z dysku

Poczytaj sobie format pliku binarnego, a w szczególności o obszarach specjalnych.

5

Odp: ladowanie danych z dysku

; bank #0

 org $2000
 lda #kod_banku_nr0
 sta PORTB
 rts

 ini $2000

 org $4000            ; bank nr0
 ins 'bank22.dat'    ; plik maksymalnej długości 16KB

; bank #1

 org $2000
 lda #kod_banku_nr1
 sta PORTB
 rts

 ini $2000

 org $4000            ; bank nr1
 ins 'bank22.dat'    ; plik maksymalnej długości 16KB

itd.....

wartość zapisywana do PORTB nie powoduje wyłączenia OS-a

podobnie realizuje się ładowanie do VBXE, z tym że inaczej wygląda blok INI

Ostatnio edytowany przez tebe (2009-04-14 07:46:16)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

6

Odp: ladowanie danych z dysku

przeciez napisal, ze dane maja znalezc sie w osobnym pliku. na jednej stronie dyskietki miesci sie ok 180kb wiec pewnie dane beda miescic sie na 3 stronach.

http://atari.pl/hsc/ad.php?i=1.

7

Odp: ladowanie danych z dysku

Podziel sobie plik wyjściowy na fragmenty po 16 kB, np. przy użyciu Total Commandera (opcja Plik::Podziel plik albo poszukaj na sieci darmowy alternatywe czyli jakiś file splitter). Przerzuć sobie te podzielone pliki do szeregu .atr'ów lub ile tam ich potrzebujesz, ręcznie albo za pomocą frani (http://atariki.krap.pl/index.php/Franny). Następnie napisz sobie krótki skrypt .bat, np. w DOS II/D, coś w stylu:

>D301 A3
LOA BANK00.dat,4000
>D301 A5
LOA BANK01.dat,4000
....
>D301 FF

8

Odp: ladowanie danych z dysku

tak przygotowany program nie jest idiotoodporny ( potrzeba cos wpisac ;-) ), moze lepszym rozwiazaniem jest ladowanie danych z pliku nie pocietego na 16kb tylko np. na ok.90? 180? (zeby miescily sie na jednej stronie) - w archiwum madsa jest taki loader z tego co pamietam - i upychanie ich w odpowiednim miejscu po czym komunikat zmien dyskietke czy cos i jazda dalej.

http://atari.pl/hsc/ad.php?i=1.

9

Odp: ladowanie danych z dysku

W DOS II/D są do tego opcje: !tekst oraz ! (http://atariki.krap.pl/index.php/DOS_II/D).

Jeżeli nie potniemy pliku na równe kawałki po 16 kB to będzie więcej problemów z załadowaniem tego do banków pamięci.

10

Odp: ladowanie danych z dysku

ale ludziki!
dlaczego ciac dane? przeciez sa dyskotki ktore maja 720kb, czy obrazy "dyskow twardych" po 16mb?
sparta dos czy mydos tez sie bawi w takie pitu pitu z dzieleniem plikow??
nie mam fopen, fseek, fread, fclose?

rozwiazanie tebego jest bardzo naturalne, ale kurde... cos mi sie robi :/

przechodze na tumiwisizm

11

Odp: ladowanie danych z dysku

jesli to ma byc program tylko dla Ciebie to oczywiscie mozesz trzymac jeden plik 400kb do ladowania na atari (wez pod uwage ze nie kazdy ma stacje 720/dysk twardy czy inne "cos tam cos tam"tm )
to rozwiazanie tebego faktycznie jest najlepsze zwroc uwage ze wcale nie musisz ciac pliku zobacz na format ins 'bank22.dat' mozesz zapodac indeks od ktorego dolaczyc x bajtow. czyli mozesz trzymac dane w jednym pliczku a podczas kompilacji mads sam go 'potnie'.

http://atari.pl/hsc/ad.php?i=1.

12

Odp: ladowanie danych z dysku

xxl, nie wiem jak ty, ale ja dyskietke 5.25" to mam, zeby nie zapomniec jak wyglada
a sio2pc to raczej ma kazdy
argumentowac sobie w ten sposob bylo mozna, ale w latach 80-90
przeciez mozna program rozpowszechniac w postaci 16mb obrazu dysku atr...

przechodze na tumiwisizm

13

Odp: ladowanie danych z dysku

pewnie, ze nie ma problemu podlaczyc atr 16mb (ba, po co atr? moze byc i com/xex) :-)

a co jesli ktos bedzie chcial zaladowac to z prawdziwej zywej stacji?

czasem tesknie to flipnij dysk i presnij start ;-)

Ostatnio edytowany przez xxl (2009-04-14 14:08:11)

http://atari.pl/hsc/ad.php?i=1.

14

Odp: ladowanie danych z dysku

zywe stacje sa teraz na ojomie i pod kroplowka

przy vbxe czy turbo nie masz szans na ladowanie czegokolwiek z nosnika ktory ma 180kb

przechodze na tumiwisizm

15

Odp: ladowanie danych z dysku

jak to nie ? ;-) nie tak dawno, w zeszlym stuleciu kupowalem gry na amige po 3-4 dyskietki... monkey island chyba 12 dyskietek :)

ciekawe jaka pojemnosc miala kaseta "90" :)

http://atari.pl/hsc/ad.php?i=1.

16

Odp: ladowanie danych z dysku

tyle ile do niej wody wlejesz
ja wszystko rozumiem, ale zauwaz, ze monkey island jest z ilus plikow, pocieta logicznie na lokacje i wczytuje sobie te pliki nie jako include...
ba! nawet w koncu dodali ta dyskietke do MI I, ktorej brakuje w orginale

przechodze na tumiwisizm

17

Odp: ladowanie danych z dysku

Moze ja gupi jestem, ale odpowiedzi juz sporo, a dalej nie widze konkretnego pytania (jak Wy wiecie co koledze podpowiadac?).
Napisz moze kiedy chcesz te dane ladowac, w jaki sposob (program ma je pobierac, czy maja ladowac sie z programem), jaki jezyk, itp..

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

18

Odp: ladowanie danych z dysku

Jeśli chodzi o rozmiar pliku na dyskietce to nie ma tu żadnych ograniczeń prócz fizycznych możliwości nośnika.
Program ładujący do kolejnych banków może wyglądać np tak (wyjęty z jakiegoś mojego kodu i zmodyfikowany, ale nie przetestowany):

load equ *
  ldx #$10
  lda #4    ;read
  sta icaux1,x
  lda #3    ;open
  sta iccmd,x
  lda <filename
  sta icbufa,x
  lda >filename
  sta icbufa+1,x
  lda #filenamelength
  sta icbufl,x
  lda #0
  sta icbufl+1,x
  jsr ciov
  bmi err
  
  ldy #0
  sty bankindex
loadloop equ *
  lda banks,y
  sta portb
  ;zaladowanie bloku do banku
  lda #4   ;read
  sta icaux1,x
  lda #7    ;getbyte
  sta iccmd,x
  lda <$4000
  sta icbufa,x
  lda >$4000
  sta icbufa+1,x
  lda <$4000
  sta icbufl,x
  lda >$4000
  sta icbufl+1,x
  jsr ciov
  bmi doclose

  inc bankindex
  ldy bankindex
  cpy #bankscount
  bcc loadloop
  
doclose equ *
  php

  ;na końcu włączamy podstawowy bank
  lda #$ff
  sta portb

  lda #12    ;close
  sta iccmd,x
  jsr ciov
  plp
err equ *
  rts

filename dta c'D1:DOWOL.DTA'
filenamelength equ *-filename

;tu są wartości dla portb włączające odpowiednie banki - system powinien być włączony!
banks dta b($c3),b($c7)
bankscount equ *-banks

To Ci pozwoli ładować strumieniowo plik (nie musisz go dzielić fizycznie na ileś tam plików, bo nie ma takiej potrzeby) do kilku banków zdefiniowanych w tablicy banks.
Na wyjściu w Y masz kod błędu, rejestr F nienaruszony w tym sensie, że po jsr load możesz zrobić bmi obsługabłędu.

Ostatnio edytowany przez mono (2009-04-14 16:18:27)

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

19

Odp: ladowanie danych z dysku

no i w koncu konkretna odpowiedz :)

ku potomnym jeszcze procedurka epiego:

portb    equ    $d301

bnkreg    equ    portb

    org    $3000

; open
start    ldx    #$10
    mva    #3    $342,x
    mwa    #fname    $344,x
    jsr    $e456

    lda    bnkreg
    sta    nor

    lda    #0
    sta    cnt

; read 1
loop    lda    #7    $342,x
    mwa    #$8000    $344,x
    mwa    #$2000    $348,x
    jsr    $e456
    tya:pha

    lda    #$80
    sta    src+2
    lda    #$40
    sta    dest+2
    lda    #$60
    sta    stop+1
    jsr    copy

    pla
    bmi    koniec

; read 2
    lda    #7    $342,x
    mwa    #$8000    $344,x
    mwa    #$2000    $348,x
    jsr    $e456
    tya:pha

    lda    #$80
    sta    src+2
    lda    #$60
    sta    dest+2
    lda    #$80
    sta    stop+1
    jsr    copy

    pla
    bmi    koniec

    inc    cnt
    lda    cnt
    cmp    #ileb
    bne    loop

koniec    lda    #12    $342,x
    jsr    $e456

    jmp    ($0a)

;--------------------------------------

copy    sei
    lda    #0
    sta    $d40e

    ldy    cnt
    lda    banki,y
    sta    bnkreg

    ldy    #0
src    lda    $8000,y
dest    sta    $4000,y
    iny:bne    src

    inc    src+2
    inc    dest+2
    lda    dest+2
stop    cmp    #$60
    bne    src

    lda    nor
    sta    bnkreg

    sta    $d40e
    cli
    rts

;--------------------------------------

cnt    dta    0
nor    dta    0

fname    dta    c'duzo.dat'
banki    dta    $82,$86,$8A,$8E
ileb    equ    *-banki

    run    $3000

    end
przechodze na tumiwisizm

20

Odp: ladowanie danych z dysku

wersja z dzieleniem na 16KB bloki ma tą zaletę że można te 16KB bloki spakować, blok INIT będzie wówczas wzbogacony o wywołanie depakera, wówczas coś co zajmuje 700KB może zająć 180KB

w sumie można się pokusić aby zrealizować to tylko przy użyciu samego Exomizera bez potrzeby asemblacji

Ostatnio edytowany przez tebe (2009-04-14 17:24:45)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

21

Odp: ladowanie danych z dysku

execo?
tebe, ze mnie taki koder na atari jak z koziej dupy traba
pisz wyraznie
ogolnie rozwiazanie mono i epiego mi sie bardzo podobaja, nawet bardziej mono, bo nie mam pojecia co robi mwa

wiem wiem - nieuk ze mne

ogolnie to na pc mam odpowiednie narzedzia do konwersji picow na formaty typu raw + paleta ktore moge sobie bardzo szybko wykozystac na vbxe, stad waznym bylo, zeby plik byl zewnetzny

ostatnie pytanie:

jesli pliki z danymi mam w katalogu, to moge sobie je odczytac podajac jako nazwe pelna sciezke?

przechodze na tumiwisizm

22

Odp: ladowanie danych z dysku

Tak. Na pewno działa dla Sparta DOS 3.2d (ścieżka np. "D1:KAT1>KAT2>PLIK.EXT"). Nie wiem jak jest w SDX i MyDOS, ale nie sądzę żeby było inaczej.

hex, code and ror'n'rol
niewiedza buduje, wiedza rujnuje

23

Odp: ladowanie danych z dysku

mwa? patrz http://xasm.atari.org/

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

24

Odp: ladowanie danych z dysku

tebe napisał/a:

można te 16KB bloki spakować

To taki specjalny ficzer, żeby się dłużej ładowało. Nostalgia za XC12 itd.

Co do ściezki, nie potrzeba podawać pełnej, jeśli egzek ładujący i plik danych są w tym samym katalogu, to wystarczy podać "D:nazwapliku".

Ostatnio edytowany przez drac030 (2009-04-15 15:21:35)

KMK
? HEX$(6670358)

25

Odp: ladowanie danych z dysku

z SDX 4.xx ładowanie blokami w okno $4000..$7fff (MEMB VBXE) nie działa, SDX zawiesza się (X filename)
najwidoczniej gdy wznawiana jest transmisja dla kolejnego bloku SDX skacze gdzieś do dodatkowej pamięci, tyle że trafia w moje ładowane dane co oznacza zwis

pomaga wyłączenie dodatkowej pamięci (gołe 64KB) wtedy SDX nie padnie, transmisja powiedzie się

p.s.
Ajcek na AtariOnline napisał:

"Jeśli masz SDX-a działającego w trybie banked to każde wywołanie funkcji I/O będzie powodowało zmianę konfiguracji w PORTB ponieważ w tym trybie duża część kodu SDX-a jest w pamięci rozszerzonej. U Ciebie w kodzie mamy tak, że okno vbxe wypada dokładnie tam gdzie jest okno exram-u. W tym przypadku odczyt do pamięci vbxe jest niemożliwy bo po wywołaniu np.: funkcji odczytu SDX przełączy banki w PORTB by dostać się do swojego kodu. Musi to zostać zrealizowane przez jakiś bufor pośredni lub należy przesunąć okno VBXE poza obszar $4000-$7fff."

Ostatnio edytowany przez tebe (2016-05-16 11:06:15)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C