home *** CD-ROM | disk | FTP | other *** search
/ Syzygy Magazine 6 / Syzygy_Magazine_6_1999___pl_Disk_2_of_3_Side_B.atr / sparta2.arc / SPARTA25.DOC < prev    next >
Text File  |  1988-09-01  |  10KB  |  1 lines

  1. ¢      Ostatni⇧ cz❎③ci⇧ tej bibloteki jest standardowy loader SDX z¢  warto③ciami pola informacji dyskowej.¢¢           org $AE1F Sdx Boot SECtor 1.¢¢  sbsec1   dta b($00) ($AE1F) +0   dflag, zawsze zero.¢           dta b($03)        +$01  dsecn, liczba sektorw odczytu wst❎pnego.¢           dta a($3000)      +$02  boota, adres utuchomienia boot'a.¢           dta a($07E0)      +$04  inita, adres inicjowania boot'a.¢           jmp binit         +$06  jmpld, skok do pocz⇧tku programu  aduj⇧cego.¢¢           dta a($0000)      +$09  msecn, numer pierwszego sektora mapy¢                                   sektorw katalogu g wnego.¢           dta a($0000)      +$0B  total, ca kowita liczba sektorw na dysku.¢           dta a($0000)      +$0D  freesc, aktualna liczba wolnych sektorw.¢           dta b($00)        +$0F  bmplen, liczba sektorw mapy bitowej.¢           dta b($04)        +$10  first, numer pierwszego sektora mapy¢                                   bitowej.¢           dta a($0000)      +$11  fsect, numer pierwszego wolnego sektora dla¢                                   dla plikw.¢           dta a($0000)      +$14  dsect, numer pierwszego wolnego sektora¢                                   dysku.¢           dta c'        '   +$16  volume, nazwa dysku.¢           dta b($00)        +$1E  track, liczba ③cieəek na dysku. Kopia dskid¢                                   percom.¢           dta b($00)        +$1F  secln, d ugo③⇨ sektora w bajtach.¢           dta b($20)        +$20  ver, wersja formatu dysku = 2.0.¢           dta a($0106)      +$21  magic, liczba $106.¢¢           dta b($FF)        +$23  Bajty zarezerwowane.¢           dta b($FF)¢           dta b($00)¢¢           dta b($00)        +$26  seqn, sekwencyjny numer dysku.¢           dta b($00)        +$27  random, losowy numer dysku.¢           dta a($0000)      +$28  bootf, muner pierwszego sektora mapy¢                                   sektorw pliku maj⇧cego by⇨ odczytanym¢                                   podczas odczytu wst❎pnego.¢           dta b($00)        +$2A  Bajty zarezerwowane.¢           dta b($FF)¢           dta b($FF)¢           dta b($FF)¢           dta b($FF)¢           dta b($FF)¢¢           dta c'Error: No DOS',b($9B) message, informacja o b ❎dzie.¢¢           Get One Sector From File Sectors Map¢¢  fsmidx   equ $91¢  daux     equ $30A¢  fsmbuf   equ $2F00¢  bsecln   equ $301F¢  bbootfl  equ $3028¢  rdsec    equ $30F1¢¢  gosffsm  lda bbootfl     Procedura ustawia numer nast❎pnego sektora mapy¢           sta daux        sektorw.¢           lda bbootfl+1¢           sta daux+1¢¢           lda <fsmbuf     Ustawia adres buforu i czyta sektor.¢           ldx >fsmbuf¢           jsr rdsec¢¢           lda fsmbuf      Nast❎pnie ustawia numer nast❎pny sektor do czytania¢           sta bbootfl¢           lda fsmbuf+1¢           sta bbootfl+1¢¢           ldy #$04        oraz ineks buforu mapy sektorw. pierwszy wpis.¢           sty fsmidx¢¢      Procedura pobiera numer nast❎pnego sektora pliku.¢¢           org $3061 Get file Next SECtor NUMber.¢¢  gnsecnum ldy fsmidx      Na pocz⇧tku procedura sprawdza czy nie odczytano juə¢           cpy bsecln      calego buforu mapy sektorw.¢           beq gosffsm¢¢           lda fsmbuf,y    Gdy tak nie jest ustala numer¢           sta daux        nast❎pnego sektoru¢           lda fsmbuf+1,y¢           sta daux+1¢           iny             i zwi❎ksza indeks sektoru¢           iny             o dwa bajty.¢           sty fsmidx¢¢  bp_rts   rts¢¢      Program inicjowania  adowanego programu.¢¢           org $3079 INIT PRoGram.¢¢  finit    equ $2E2¢¢  initprg  jmp (finit)¢¢           dta b($FF)¢           dta b($FF)¢           dta b($FF)¢           dta b($FF)¢¢           org $3080 Boot INIT.¢¢  fileidx  equ $90¢  fsmidx   equ $91¢  blkstr   equ $92¢  blkend   equ $94¢  btmp     equ $96¢  frun     equ $2E0¢  finit    equ $2E2¢  dbyt     equ $308¢  bsecln   equ $301F¢¢  bp_rts   equ $3078¢  initprg  equ $3079¢  gofchar  equ $310A¢  getblock equ $316B¢¢  binit    ldx #$00        Na pocz⇧tku procedura¢           lda bsecln¢           sta fsmidx      ustawia wska♪niki pozycji w buforze mapy¢           sta fileidx     sektorw i buforze plikowym na maksymalne.¢¢           sta dbyt¢           bne e308F       Teraz ustawia takəe d ugo③⇨ sektoru w¢           inx¢  e308F    stx dbyt+1      polu DCB.¢¢           jsr gofchar     Teraz procedura pobiera nag wek pliku.¢           sta btmp¢           jsr gofchar¢           and btmp¢           cmp #$FF        i porwnuje go z $FFFF.¢  e309E    bne error¢¢  getprg   lda <bp_rts     Teraz procedura inicjuje Finit wska♪nikiem do¢           sta finit       rozkazu rts.¢           lda >bp_rts¢           sta finit+1¢¢           jsr gofchar     Nast❎pnie ustala adres  adowania programu¢           sta blkstr¢           jsr gofchar¢           sta blkstr+1¢           ora blkstr¢           beq runprg¢¢           jsr gofchar     i gdy adres taki istnieje¢           sec             pobiera i ustala d ugo③⇨ buforu.¢           sbc blkstr¢           pha¢           php¢           jsr gofchar¢           plp¢           sbc blkstr+1¢           sta blklen+1¢           pla¢           sta blklen¢           jsr getblock    Teraz procedura pobiera blok programu¢           jsr initprg     inicjuje go¢           jmp getprg      i pobiera nast❎pny blok.¢¢  runprg   jmp (frun)      W przypadku koca danych program jest uruchamiany.¢¢      Procedura wypisuje komunikat o b ❎dzie.¢¢           org $30D7   ERROR procedure.¢¢  iccmd    equ $342¢  icbufa   equ $344¢  icbufl   equ $348¢  bmessage equ $3030¢¢  jciomain equ $E456¢¢  error    lda <bmessage   W przypadku wyst⇧pienia b ❎du procedura¢           ldx >bmessage¢           sta icbufa¢           stx icbufa+1¢           stx icbufl      ustawia rejestry zerowego kana u IOCB Atari OS i¢           lda #$09        wy③wietla stosowny komunikat.¢           sta iccmd¢           ldx #$00¢           jsr jciomain¢¢  loop     jmp loop        Po czym oczekuje w p❎tli bez koca na RESET.¢¢      Procedura czyta sektor o ustalonym numerze do bufora AX.¢¢           org $30F1 ReaD Sectors.¢¢  dstats   equ $303¢  dbufa    equ $304¢  daux     equ $30A¢¢  error    equ $30D7¢  jsioint  equ $E459¢¢  rdsec    ldy #$40        Na pocz⇧tku procedura ustala status operacji na¢           sty dstats      czytanie.¢           sta dbufa¢           stx dbufa+1¢           lda daux¢           ora daux+1¢           beq error       Nast❎pnie sprawdza czy nie chodzi o sektor zerowy.¢           jsr jsioint     Gdy tak nie jest czyta sektor.¢           bmi error¢           rts¢¢      Procedura pobiera bajt z pliku.¢¢           org $310A Get One File Char.¢¢  fileidx  equ $90¢  blkstr   equ $92¢  blklen   equ $94¢  dbyt     equ $308¢  filebuf  equ $2E00¢  bsecln   equ $301F¢¢  gnsecnum equ $3061¢¢  gofchar  lda #$00        Procedura ustala d ugo③⇨ buforu na zero co¢           sta blklen+1    oznacza przesy anie bajtu przez akumulator.¢           sta blklen¢¢           org $3110 Get File Chars.¢¢  gfchars  ldx fileidx     Przed pobraniem znaku procedura sprawdza czy indeks¢           cpx bsecln      w buforze pliku nie jest rwny maksymalnej d ugo③ci¢           beq e311D¢¢           lda filebuf,x   i gdy tak nie jest pobiera bajt z buforu po czym¢           inc fileidx     zwi❎ksza indeks w buforze.¢           rts¢¢  e311D    jsr gnsecnum    Gdy bufor pliku jest juə pobrany procedura pobiera¢                           numer kolejnego sektoru pliku.¢           lda blklen+1    Teraz sprawdza czy d ugo③c bloku danych jest¢           bne e313B       wi❎ksza niə 256.¢¢           lda bsecln      Gdy tak nie jest procedura sprawdza czy dysk ma¢           beq e312D       sektory 256 bajtowe.¢¢           lda blklen      Gdy tak nie jest nast❎puje sprawdzanie czy d ugo③⇨¢           bmi e313B       bloku jest wi❎ksza niə 128.¢¢  e312D    lda <filebuf    Gdy tak nie jest sektor jest  adowany do¢           ldx >filebuf¢           jsr rdsec       buforu.¢           sec¢           rol fileidx     Indeks w buforze pliku ustawiany jest na 1 i¢           lda filebuf     pobierany jest pierwszy bajt z buforu.¢           rts¢¢  e313B    lda blkstr      Gdy d ugo③⇨ bloku przekracza wielko③⇨ sektora¢           ldx blkstr+1    procedura czyta sektor bezpo③rednio pod adres¢           jsr rdsec        adowania.¢¢           lda blkstr      Nast❎pnie zwi❎ksza adres  adowania o d ugo③⇨¢           clc             sektoru i¢           adc dbyt¢           sta blkstr¢           lda blkstr+1¢           adc dbyt+1¢           sta blkstr+1¢¢           sec             i zniejsza ilo③⇨ bajtw do za adowania o d ugo③⇨¢           lda blklen      sektoru.¢           sbc dbyt¢           sta blklen¢           lda blklen+1¢           sbc dbyt+1¢           sta blklen+1¢           jmp e311D       Teraz p❎tla si❎ zamyka.¢¢  e3163    lda blklen      Zmniejsza d ugo③⇨ o jeden.¢           bne e3169¢           dec blklen+1¢  e3169    dec blklen¢¢      Procedura pobiera blok programu.¢¢           org $316B GET program BLOCK.¢¢  blkstr   equ $92¢  blklen   equ $94¢¢  gfchars  equ $3110¢¢  getblock jsr gfchars     Procedura pobiera bajty z bufora pod¢           ldy #$00¢           sta (blkstr),y  odpowiedni adres.¢           inc blkstr¢           bne e3178¢           inc blkstr+1    Zwi❎ksza adres  adowania bloku.¢  e3178    lda blklen¢           ora blklen+1¢           bne e3163       I sprawdza czy zosta y jeszcze do pobrania jakie③¢           rts             bajty.¢¢      Uwaga sektory odczytu wst❎pnego ATARI DOS opisane s⇧ w ksi⇧əce¢  Wojciecha Zientary pt.'Dyskowe systemy operacyjne'.¢¢  absec1   equ $AF9F       standardowy boot blok DOSu 2.5.¢¢           end of doc¢