home *** CD-ROM | disk | FTP | other *** search
/ Serious Magazine 12 / Serious_Magazine_12_2003_01_07_Dial_pl_Side_A.atr / sdx_file._12 < prev    next >
Text File  |  2023-02-26  |  8KB  |  1 lines

  1. ¢       Budowa plikw Sparta DOS X¢       --------------------------¢¢  Plik sam w sobie jest tylko  niewiele¢ wartym zbiorem bajtw.  Mnstwo liczb,¢ ktre mog⇧ oznacza⇨ wszystko,  a zara-¢ zem nic, je③li nie wiadomo jak je zin-¢ terpretowa⇨. Wi❎kszo③⇨ plikw wyposaəa¢ si❎ z tego powodu w rənorodne nag w-¢ ki,  w ktrych pami❎tane s⇧ informacje¢ o tym co plik zawiera,  ew. jak go po-¢ tem traktowa⇨ przy odczycie. Do takich¢ naleə⇧ rwnieə pliki wykonywalne,  bi-¢ narne, czy po prostu:  przeznaczone do¢ za adowania z poziomu DOSu.  Wszak DOS¢ to  teə  program  i  jak kaədy inny ma¢ prawo oczekiwa⇨ danych  o  okre③lonej,¢ znanej mu strukturze.¢¢ Tradycyjne pliki binarne, rozpoznawane¢ przez wszystkie  DOSy  dla  komputerw¢ Atari  XL/XE,  maj⇧  budow❎   blokow⇧,¢ gdzie kaədy blok posiada swj nag wek¢ Istniej⇧ dwa rodzaje nag wkw:¢¢ 1. dta a($ffff),a(str_adr),a(end_adr)¢¢ 2. dta a(str_adr),a(end_adr)¢¢ gdzie:¢ str_adr - adres,  pod  ktry  zostanie¢           za adowany pierwszy bajt da-¢           nych,¢ end_adr - adres,  pod  ktry  zostanie¢           za adowany ostatni bajt.¢¢ Pierwszy blok w pliku musi mie⇨ nag -¢ wek typu $ffff, pozosta e bloki dowol-¢ nie.  Za nag wkiem oczywi③cie powinny¢ znale♪⇨ si❎ dane w ilo③ci:¢   (end_adr-str_adr)+1¢¢ Tyle tytu em przypomnienia. Twrcy sy-¢ stemu Sparta DOS X  zachowali powyəszy¢ standard,  dodaj⇧c  jednocze③nie kilka¢ nowych typw  nag wkw.  Ci⇧gle  wi❎c¢ mamy  do czynienia z plikiem podzielo-¢ nym na bloki, z tym əe rodzajw blokw¢ jest teraz duəo wi❎cej. Oto one:¢¢¢ 1. Blok nierelokowalny  ( adowany  pod¢    sta y adres w pami❎ci):¢¢¢    dta a($fffa),a(str_adr),a(end_adr)¢¢¢    Jest to to samo co blok $ffff - nie¢    ma znaczenia, ktry zostanie uəyty.¢    $fffa b❎dzie jednak wyra♪nie  wska-¢    zywa⇨, əe program jest przeznaczony¢    dla SDX  -  inny  DOS takiego pliku¢    nie odczyta.¢¢¢¢ 2. Blok relokowalny ( adowany pod MEM-¢    LO we wskazany rodzaj pami❎ci):¢¢¢    dta a($fffe),b(blk_num),b(blk_id)¢    dta a(blk_off),a(blk_len)¢¢    blk_num - numer bloku w pliku. Kaə-¢       dy blok relokowalny powinien po-¢       siada⇨ swj w asny numer. Ponie-¢       waə adresy  adowania blokw  nie¢       s⇧ znane,  bloki  identyfikowane¢       s⇧ w a③nie poprzez swoje numery.¢       Mog⇧ one przyjmowa⇨  warto③ci  z¢       zakresu 0-7, z tym əe w praktyce¢       stosuje si❎ zwykle numeracj❎  od¢       1 w gr❎.¢    blk_id - bity 1-5  stanowi⇧  indeks¢       pami❎ci,  do ktrej blok ma zos-¢       ta⇨ za adowany.  Spotka em si❎ z¢       dwoma warto③ciami:  $00 - pami❎⇨¢       podstawowa, $02 - pami❎⇨ rozsze-¢       rzona. Ustawienie dodatkowo bitu¢       7 oznacza brak bloku danych. SDX¢       nic wtedy nie  aduje, ale rezer-¢       wuje pami❎⇨.¢    blk_off - tzw. przesuni❎cie adresw¢       w bloku,  czyli po prostu adres,¢       pod ktry by  assemblowany  kod.¢       Jest to potrzebne przy  uaktual-¢       nianiu adresw odwo uj⇧cych  si❎¢       do zawarto③ci bloku.¢    blk_len - d ugo③⇨ bloku.  Tyle  da-¢       nych powinno by⇨  za  nag wkiem¢       chyba,  əe jest to blok rezerwu-¢       j⇧cy pami❎⇨ wtedy danych nie ma.¢¢    Pisz⇧c kod relokowalny trzeba  mie⇨¢    na uwadze  kilka  ogranicze  jakie¢    narzuca  idea   "przemiaszczalnego"¢    kodu.  Wszystkie  adresy odwo uj⇧ce¢    si❎ do obszaru takiego programu mu-¢    sz⇧ zosta⇨ uaktualnione podczas  a-¢    dowania,  w zwi⇧zku z tym nie moəna¢    uəywa⇨ sekwencji takich jak np.:¢       lda <co③¢       ldx >co③¢       ...¢      co③ equ *¢       ...¢    Zamiast tego, pozostaje np.:¢       lda _co③¢       ldx _co③+1¢       ...¢      _co③ dta a(co③)¢       ...¢      co③ equ *¢¢ 3. Blok aktualizacji adresw  odnosz⇧-¢    cych si❎ do bloku relokowalnego:¢¢    dta a($fffd),b(blk_num),a(blk_len)¢¢    blk_num - numer bloku,  do  ktrego¢       odnosz⇧ si❎ uaktualniane adresy.¢    blk_len - d ugo③⇨ bloku  aktualiza-¢       cji  (bez  nag wka).  Jest  ona¢       ignorowana.¢¢    Adresy s⇧ uaktualniane poprzez  do-¢    danie do adresu istniej⇧cego rəni-¢    cy pomi❎dzy adresem, pod ktry zos-¢    ta  za adowany wskazany blok  relo-¢    kowalny, a warto③ci⇧ blk_off (adre-¢    sem asemblacji)  tego bloku.  Moəna¢    to przedstawi⇨ wzorem:¢       ADR=ADR+(blk_adr-blk_off)¢¢    "Cia o" bloku aktualizacji stanowi⇧¢    wska♪niki do  poprawianych  adresw¢    oraz  rozkazy  specjalne.  Wska♪nik¢    jest liczb⇧  z  zakresu  $00-$fb  i¢¢    oznacza przesuni❎cie wzgl❎dem miej-¢    sca poprzedniej aktualizacji. Miej-¢    sce to jest pami❎tane przez program¢     aduj⇧cy jako  bezpo③redni  adres -¢    nazwijmy  go  licznikiem aktualiza-¢    cji.  Licznik ten moəna zainicjowa⇨¢    za pomoc⇧ funkcji specjalnych, kt-¢    rymi s⇧ liczby wi❎ksze od $fb:¢       $fc - oznacza koniec bloku aktu-¢           alizacji,¢       $fd,a(ADDR) - nast❎puje aktuali-¢           zacja adresu wskazanego bez-¢           po③rednio  przez  ADDR.  Tym¢           samym warto③⇨ ADDR jest wpi-¢           sywana do licznika  aktuali-¢           zacji i od niej b❎d⇧ liczone¢           kolejne przesuni❎cia,¢       $fe,b(blk_num) - do licznika ak-¢           tualizacji  wstawiany   jest¢           adres bloku wskazanego przez¢           blk_num, czyli kolejne aktu-¢           alizacje b❎d⇧  si❎  odnosi y¢           do kodu zawartego w tym blo-¢           ku,¢       $ff - licznik aktualizacji zwi❎-¢           kszany jest o $fa (bez aktu-¢           alizacji adresu).¢¢¢ 4. Blok aktualizacji  adresw procedur¢    zdefiniowanych symbolami:¢¢    dta a($fffb),c'SMB_NAME',a(blk_len)¢¢    Gdzie:¢    SMB_NAME - symboliczna nazwa proce-¢       dury (lub tablicy, rejestru sys-¢       temowego itp.)  Osiem  znakw  w¢       kodzie ATASCII,¢    blk_len - jak w bloku $fffd.¢¢    Po nag wku wyst❎puje ci⇧g wska♪ni-¢    kw okre③laj⇧cych po oəenie adresw¢    do  zaktualizowania  -  identycznie¢    jak w bloku $fffd.  Adresy s⇧ zmie-¢    niane poprzez dodanie do  istniej⇧-¢    cego adresu, adresu procedury okre-¢    ③lonej symbolem.  Pozwala to na wy-¢    korzystywanie  w  programach proce-¢    dur, ktrych adresw nie znamy, np.¢    procedur dodawanych przez inne pro-¢    gramy uruchamiane w ③rodowisku SDX.¢    Takəe procedury  systemowe  powinny¢    by⇨  wykorzystywane  w  ten sposb,¢    przecieə mog⇧ one mie⇨ rəne adresy¢    w rənych wersjach Sparty.¢¢¢ 5. Blok definicji nowych symboli:¢¢    dta a($fffc),b(blk_num),a(smb_off)¢    dta c'SMB_NAME'¢¢    blk_num -  numer  bloku,  w  ktrym¢       znajduje si❎ definiowana  proce-¢       dura. Wynika z tego, əe procedu-¢       ra musi by⇨ za adowana jako blok¢       relokowalny.¢    smb_off - przesuni❎cie adresu  pro-¢       cedury  w  bloku,  czyli  offset¢       procedury wzgl❎dem pocz⇧tku blo-¢       ku (pierwszy bajt  ma  numer  0)¢       powi❎kszony  o  warto③⇨  blk_off¢       tego  bloku.  Inaczej:  jest  to¢¢       adres pod jaki procedura zosta a¢       zassemblowana,¢    SMB_NAME - symboliczna nazwa  defi-¢       niowanej procedury.¢¢¢ Bloki typu $fffb, $fffc, $fffd  nie s⇧¢ na sta e zatrzymywane w pami❎ci.  Sys-¢ tem wykorzystuje je tylko podczas   a-¢ dowania programu.¢¢¢ Wygl⇧da to by⇨ moəe na troch❎  zagmat-¢ wane,  lecz w rzeczywisto③ci jest bar-¢ dzo  proste.  Proponuj❎  dla  lepszego¢ zrozumienia  przejrze⇨  budow❎   kilku¢ plikw napisanych specjalnie  dla SDX.¢ W archiwum ze stuffem powinien znajdo-¢ wa⇨ si❎ tekst ♪rd owy (wraz z nag w-¢ kami)  programu בכנבי«צךצ z carta SDX.¢ Jest to do③⇨ ciekawy przypadek, ponie-¢ waə zawiera wszystkie typy blokw i to¢ w rənych wariantach - polecam, z pew-¢ no③ci⇧ u atwi przyswojenie tematu.¢¢¢ Przy pisaniu tego artyku u korzysta em¢ ze  ♪rde   Sparta DOS X  opracowanych¢ przez  Marka M.M. Goderskiego  oraz  z¢ w asnych obserwacji i do③wiadcze. Mam¢ nadziej❎, iə art ten zaoszcz❎dzi zain-¢ teresowanym  czasu i nerww,  oraz  əe¢ przyczyni si❎  do lepszego wykorzysta-¢ nia moəliwo③ci jakie  drzemi⇧  w  SDX.¢¢ ⑧ycz❎ sukcesw w walce z systemem ;)¢¢¢                         Qcyk/Dial¢¢