home *** CD-ROM | disk | FTP | other *** search
/ Syzygy Magazine 6 / Syzygy_Magazine_6_1999___pl_Disk_2_of_3_Side_B.atr / sparta1.arc / SPARTA06.DOC < prev    next >
Text File  |  1999-02-20  |  8KB  |  1 lines

  1.       Omwi❎ teraz procedury pomocnicze programw czytaj⇧cych bloki pliku¢  binarnego.¢¢      Procedura inicjuje warto③ci FRUN i FINIT.¢¢           org $A464   Set FRun and FInit.¢¢  frun     equ $2E0¢  finit    equ $2E2¢  faux1    equ $782¢¢  p_rts    equ $857¢¢  sfrfi    lda frun+1      Na wst❎pie procedura sprawdza czy ustawiony jest¢           ora frun        adres uruchomienia.¢           bne eA478¢¢           lda faux1       Gdy nie jest on ustawiony procedura ustawia go¢           sta frun        na adres pierwszego za adowanego bloku.¢           lda faux1¢           sta frun+1¢¢  eA478    lda <p_rts      Teraz inicjuje ona wektor FINIT wska♪nikiem do¢           sta finit       procedury RTS.¢           lda >p_rts¢           sta finit+1¢           rts¢¢      Procedura pobieraj⇧ca nast❎pny bajt z pliku.¢¢           org $A483   Get Next BYTE.¢¢  ldtmp1   equ $CBE¢¢  notbinfl equ $A491¢  FGETC    equ $ADA1¢¢  gnbyte   php             Na pocz⇧tku procedura zachowuje rejestr statusu i X.¢           stx ldtmp1¢           jsr FGETC       Teraz pobierany jest bajt.¢           bmi notbinfl¢           ldx ldtmp1      Gdy operacja si❎ uda a od③wierzany jest X i F poczym¢           plp¢           rts             procedura si❎ koczy.¢¢      Procedura sygnalizuj⇧ca b ⇧d prby wczytania pliku niewykonywalnego.¢¢           org $A491   NOT BINary File error.¢¢  U_FAIL   equ $A6BE¢  FCLOSE   equ $ACC3¢¢  notbinfl jsr FCLOSE      Na pocz⇧tku plik jest zamykany.¢           lda #$98        Teraz ustawiany jest numer b ❎du i sygnalizowany j¢           jmp U_FAIL      jest b ⇧d.¢¢      Procedura ustawiaj⇧ca adres dodawany w blokach relokowalnych SDX.¢¢           org $A499   Set BloCK Adress ADd.¢¢  blkmll_t equ $B57¢  blkmlh_t equ $B5F¢  blkext_t equ $B67¢  blkofl_t equ $B6F¢  blkofh_t equ $B77¢  blkaad   equ $CBB¢¢  gnbyte   equ $A483¢¢¢  sblkaad  jsr gnbyte      Na pocz⇧tku procedura czyta numer bloku z pliku.¢           tax¢           sec¢           lda blkmll_t,x  Teraz ustawia adres dodawany obliczaj⇧c go poprzez¢           sbc blkofl_t,x  odj❎cie przesuni❎cia bloku wzgl❎dem pocz⇧tku pliku¢           sta blkaad      od warto③ci MEMLO dla danego bloku.¢           lda blkmlh_t,x¢           sbc blkofh_t,x¢           sta blkaad+1¢           rts¢¢      Procedura pobiera nazw❎ symbolu w wstawia j⇧ w odpowiednie pole obszaru¢  SYMBOL.¢¢           org $A4B1   Get SyMBol NAME.¢¢  SYMBOL   equ $B7F¢¢  gnbyte   equ $A483¢¢  gsmbnme  ldy #$00        Na pocz⇧tku kasowany jest indeks pola nazwy.¢  eA4B3    jsr gnbyte      Teraz nast❎puje pobranie znaku i¢           sta SYMBOL+2,y  wstawienie w pole.¢           iny¢           cpy #$08        Poczym po o③miu znakach procedura si❎ koczy.¢           bne eA4B3¢           rts¢¢      Procedura ustawiaj⇧ca numer aplikacji, oraz wska♪niki H_FENCE dla danego¢  poziomu SYSLEVEL.¢¢           org $A1E8   Set APLication number And H_Fence.¢¢  SYSLEVEL equ $C5E¢  sdxmemlo equ $C5F¢  H_FENCE  equ $C67¢  aplnum   equ $C7B¢  aplnum_t equ $C7C¢¢  saplahf  ldx SYSLEVEL    Procedura pobiera poziom systemu, numer¢           lda aplnum      numer aplikacji ustawia w tabeli numerw dla¢           sta aplnum_t,x  poziomw systemu.¢           txa             Nast❎pnie oblicza indeks H_FENCE dla poziomu¢           asl @           systemu¢           asl @¢           tax¢           ldy #$00¢  eA1F7    lda sdxmemlo,y  i ustawia w niej aktualn⇧ warto③⇨ wska♪nikw¢           sta H_FENCE,x   pami❎ci.¢           inx¢           iny¢           cpy #$04¢  eA201    bne eA1F7¢           rts¢¢      Z analizy tych procedur moəna odtworzy⇨ budow❎ plikw SDX.¢  Plik SDX sk ada si❎ z blokw. SDX potrafi za adowa⇨ plik sk adaj⇧cy si❎¢  maksymalniej liczby blokw relokowalnych i dowolnej liczby blokw  adowanych¢  pod sta e adresy w pami❎ci.¢¢      SDX rozrənia nast❎puj⇧ce bloki:¢¢      Blok  adowany pod sta y adres:¢¢           a($FFFA),a(str_adr),a(end_adr) lub¢           a($FFFF),a(str_adr),a(end_adr) lub¢                    a(str_adr),a(end_adr) lecz tylko gdy niepierwszy blok.¢           Gdzie :¢¢               str_adr - adres pierwszego bajtu danych,¢               end_adr - adres ostatniego bajtu danych.¢¢           Po nag wku nast❎puje blok end_adr-str_adr+1 bajtw danych.¢¢      Relokowalny blok programu:¢¢           a($FFFE),b(blk_num),b(blk_id),a(blk_off),a(blk_len)¢           Gdzie:¢¢               blk_num - numer bloku w pliku,¢               blk_id  - &$3E oznacza indeks pami❎ci do ktrej ma by⇨¢                         za adowany blok,¢                         &$80 oznacza brak bloku danych (rezerwacja pami❎ci).¢               blk_off - przesuni❎cie adresw programu wzgl❎dem pocz⇧tku¢                         programu,¢               blk_len - d ugo③⇨ bloku w bajtach.¢¢      Pozosta e bloki maj⇧ charakter uəytkowy i nie s⇧ na sta e zatrzymywane w¢      w pami❎ci.¢¢      Blok aktualizacji adresw w bloku (relokowalnym).¢¢           a($FFFD),b(blk_num),a(reserved),¢                    b(r_off | r_id)¢                    ...............¢¢               blk_num  - numer bloku maj⇧cego by⇨ uaktualniany.¢               reserved - dwa bajty zarezerwowane, nie maj⇧ce znaczenia.¢               r_id     - identyfikator funkcji specjalnej,¢               r_off    - przesuni❎cie wzgl❎dem ostatniej aktualizacji.¢¢               Adresy w program s⇧ aktualizowane o warto③⇨ ADR_AD poprzez jej¢               dodanie do adresu istniej⇧cego. ADR_AD procedura  aduj⇧ca¢               oblicza przez odj❎cie od fizycznego adresu programu warto③ci¢               BLK_OFF podawanej w pliku relokowalnym.¢¢               Warto③⇨ R_OFF jest przesuni❎ciem aktualizacji. Pierwszy bajt¢               programu ma R_OFF=0. Po aktualizacji adresu wska♪nik w programie¢                aduj⇧cym jest zwi❎kszany o R_OFF. Najwi❎ksza dopuszczalna¢               warto③⇨ R_OFF wynosi $FB.¢¢               Warto③ci wi❎ksze s⇧ zarezerwowane dla R_ID.¢¢               R_ID=$FC - oznacza koniec bloku.¢¢               R_ID=$FD,a(adres) - natychmiastowa aktualizacja podanego wprost¢                                   adresu,¢¢               R_ID=$FE,b(blk_num) - ustalenie nowego bloku do aktualizacji.¢¢               R_ID=$FF - przesuni❎cie rwne $FA bez aktualizacji adresu.¢¢      Blok aktualizacji adresw procedur SDX zdefiniowanych symbolami.¢¢           a($FFFB),c'smb_name',a(reserved)¢                    b(r_off | r_id)¢                    ...............¢           SMB_NAME - symboliczna nazwa procedury.¢¢      Blok definicji nowych procedur symbolami.¢¢           a($FFFC),b(blk_num),a(smb_off),c'smb_name'¢¢      Wszystkie wyst❎puj⇧ce nazy pl opisane s⇧ przy pliku¢      aktualizacji adresw i maj⇧ identyczne znaczenie.¢¢¢      Procedur⇧ przeciwstawn⇧ procedurze U_LOAD jest U_UNLOAD zwalniaj⇧ca¢  obszar pami❎ci zajmowany przez program zatrzymany w pami❎ci. Procedura kasuje¢  teə wszystkie symbole zdefiniowane przez program.¢¢           org $A1C7   User_UNLOAD.¢¢  SYSLEVEL equ $C5E¢  sdxmemlo equ $C5F¢  H_FENCE  equ $C67¢  aplnum   equ $C7B¢  aplnum_t equ $C7C¢¢  newmemlo equ $AFCB¢  S_CLEAR  equ $A54C¢¢  U_UNLOAD ldx SYSLEVEL    Na pocz⇧tku procedura ustawia numer aplikacji dla¢           lda aplnum_t,x  podanego w SYSLEVEL poziomu systemu.¢           sta aplnum¢           txa             Teraz obliczany jest indeks dla H_FENCE zaleəny od¢           asl @           tego poziomu.¢           asl @¢           tax¢           ldy #$00¢  eA1D6    lda H_FENCE,x   Teraz ustalane jest SDX MEMLO i¢           sta sdxmemlo,y¢           inx¢           iny¢           cpy #$04¢           bne eA1D6¢           jsr newmemlo    ATARI OS memlo w ostatnim etapie kasowane s⇧ symbole¢           jmp S_CLEAR     danej aplikacji.¢¢      Uəywan⇧ przez U_UNLOAD procedur❎ NEWMEMLO opisz❎ wraz z MALLOC.¢¢¢           end of doc.¢