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

  1.       Bibloteka procedur SDX mie③ci si❎ w bankach 1 i 0 modu u SDX.¢  S⇧ to procedury u atwiaj⇧ce pisanie programw, a takəe powoduj⇧ce ich¢  skrcenie. Opejmuj⇧ one procedury systemu (wej③cie do systemu, inicjacja),¢  procedury zarz⇧dzania pami❎ci⇧, procedury zmiennych ③rodowiskowych, oraz¢  najbardziej rozbudowany blok procedur wej③cia/wyj③cia.¢¢  W pierwszej kolejno③ci opisz❎ procedury inicjowania i wej③cia do systemu.¢  Nast❎pnie  adowania i uwalniania pami❎ci plikw, zarz⇧dzania pami❎ci⇧ oraz¢  symbolami i zmiennymi systemowymi. S⇧ to procedury systemowe. Wszystkie one¢  mieszcz⇧ si❎ w banku 1 modu u.¢¢           org $A02F   INITiation Zero.¢¢  iniflg   equ $47¢  finit    equ $2E2¢  cartck   equ $3EB¢  slvtab   equ $720¢  devtab   equ $740¢  siocbidx equ $760¢  device   equ $761¢  opmode   equ $778¢  calext_i equ $A41¢  extidx   equ $A42¢  magic4   equ $A51¢  conch_i  equ $A5E¢  conswflg equ $A60¢  FILE_P   equ $C5A¢  FLAG     equ $C5C¢  erridx   equ $C85¢  arstal_t equ $CB0¢  arstah_t equ $CB5¢  arstidx  equ $CBA¢  jkernel  equ $703¢  jfinit   equ $9D3¢  conname  equ $A0DA¢  shatabs  equ $A0DF¢  FOPEN    equ $AC56¢  FCLEVEL  equ $AD42¢  clralbf  equ $AF2B¢  newmemlo equ $AFCB¢  cart     equ $BFF0¢¢  _INITZ   ldx #$00    Na wst❎pie procedura oblicza sum❎ kontroln⇧ modu u i¢           txa         ustawia zmienn⇧ systemu ATARI, zapobiega to zawieszeniu¢           clc         si❎ komputera podczas obs ugi przerwania RESET.¢  eA033    adc cart,x¢           inx¢           bne eA033¢           sta cartck¢¢           ldx #$0F¢           lda #$FF¢           sta conswflg    Nast❎pnie ustawiana jest flaga syganlizuj⇧ca brak¢           sta conswflg+1  kierowania con io.¢           sta magic4¢¢  eA049    sta devtab,x    W dalszej cz❎③ci zamykane s⇧ wszystkie kana y SDX¢           sta slvtab,x    IO.¢           dex¢           bpl eA049¢¢           lda #$00        Teraz kasowane s⇧ rejestry¢           sta calext_i    indeks wywo a pami❎ci ext,¢           sta extidx      indeks aktywnej pami❎ci,¢           sta erridx      indeks za oəonych pu apek.¢¢           jsr clralbf     Teraz procedura procedura kasuje wszystkie¢                           mikrobufory operacji IO.¢¢           lda #'D'        W nast❎pnym etapie procedura odszukuje sterownik¢           jsr shatabs     urz⇧dzenia 'D' i ustawia adres tabeli adresowej¢           lda <dhatab     sterownika.¢           sta hatabs+1,y¢           lda >dhatab¢           sta hatabs+2,y¢¢           ldy #$FF        Teraz nast❎puje ustawienie flagi inicjacji DOSu i¢           sty iniflg      inicjowane s⇧ rozszerzenia systemu.¢¢  eA073    iny             Ich ilo③⇨ pami❎tana jest rejsterem ARSTIDX.¢           cpy arstidx     Gdy atualny numer rwny najwi❎kszemu inicjowanie¢           beq eA091       si❎ koczy.¢¢  eA079    sty FLAG        W innym przypadku numer pami❎tany jest w FLAG.¢           lda arstal_t,y  Procedura pobiera adresy z odpowiednich tabel¢           sta finit¢           lda arstah_t,y¢           sta finit+1¢           jsr jfinit      i inicjuje rozszerzenie,¢           ldy FLAG¢           jmp eA073       poczym inicjuje nast❎pne.¢¢  eA091    lda #$01        Flaga inicjacji jest kasowana.¢           sta iniflg¢¢           jsr newmemlo    Teraz ustawiany jest wska♪nik memlo ATARI OS.¢¢           lda #$00¢  eA09A    sta device      W tym etapie nast❎puje inicjaca wszystkich urz⇧dze¢           ldy #$08        SDX.¢           jsr jkernel¢           lda device¢           clc¢           adc #$10¢           bpl eA09A¢¢           lda <conname    Ostatni etap inicjowania SDX to otwarcie urz⇧dzenia¢           sta FILE_P      CON: do odczytu i zapisu.¢           lda >conname    Najpierw procedura ustawia wska♪nik do nazwy urz⇧-¢           sta FILE_P+1    dzenia,¢           lda #$08¢           sta opmode      ustawia tryb otwarcia do zapisu,¢           jsr FOPEN       otwiera kana ,¢           lda siocbidx    ustawia odpowiedni¢           sta conch_i     numer kana u do indeksu kana u kierowania CON IO.¢           lda #$FF        Po czym ustawia poziom systemu dla tego kana u na¢           jsr FCLEVEL     dowolny.¢¢           lda #$04        Teraz otwiera kana  dla odczytu,¢           sta opmode¢           jsr FOPEN       otwiera kana ,¢           lda siocbidx    i wpisuje jego indeks w¢           sta conch_i+1   rejestr indeksu kana u kierowania CON IO.¢           lda #$FF        Ponownie ustawia poziom systemu dla tego kana u na¢           jmp FCLEVEL     dowolny.¢¢           org $A0DA   CON NAME.¢¢  conname  dta c'CON:',b(0)¢¢     Procedura poszukuje danego w A urz⇧dzenia w tabeli sterownikw ATARI OS.¢¢           org $A0DF   Sreach in Handler Adress TABle.¢¢  hatabs   equ $31A¢¢  shatabs  ldy #$00        Na pocz⇧tku procedura ustawia indeks poszukiwa na¢  eA0E1    cmp hatabs,y    zero, nast❎pnie porwnuje dany wpis z wpisem w¢           beq eA0F0       tabeli¢           ldx hatabs,y    i gdy s⇧ one rəne sprawdza czy jest to ostatni wpis¢           beq eA0F0¢           iny             gdy tak nie jest pobiera nast❎pny wpis.¢           iny¢           iny¢           bne eA0E1¢  eA0F0    sta hatabs,y    Gdy znaleziono wpis lub wolne miejsce zostaje on¢           rts             ustawiony i procedura si❎ koczy.¢¢¢      Nast❎pna procedura uəywana jest do wykonywania skokw pod adres inicjacji¢  programu. Poniewaə adres ten moəe znajdowa⇨ si❎ w przestrzeni bibloteki pro-¢  cedur ($A000-$BFFF) wi❎c wykoəystywany jest przez program  aduj⇧cy ten fra-¢  gment kodu znajduj⇧cy si❎ w obszarze j⇧dra systemu.¢¢           org $9D3        Jump File INIT adres.¢¢  finit    equ $2E2¢  jcar_old equ $7FD¢  jcar_of  equ $858¢¢  jfinit   jsr jcar_of     Procedura wy ⇧cza modu ,¢           jsr finitc      inicjuje program i¢           jmp jcar_old    na zakoczenie w ⇧cza modu .¢  jfinitc  jmp (finit)¢¢      Procedury CLRALBF i NEWMEMLO omwione b❎d⇧ przy opisie innych procedur¢  biblotecznych, to znaczy FGET/FPUT i MALLOC. Procedury FOPEN i FCLEVEL¢  omwione b❎d⇧ w cz❎③ci opisuj⇧cej wej③cie/wyj③cie.¢¢      Nast❎pn⇧ waən⇧ procedur⇧ jest podstawowa obs uga b ❎dw SDX.¢  Jest ona wskazywana wektorem ERRSVECT ($CAE). {⇧czy si❎ ona bezpo③rednio z¢  procedur⇧ wej③cia od DOSu.¢¢           org $A10E   SDX main TRAP.¢¢  mdosvect equ $A000¢  _INITZ   equ $A02F¢  U_ERROR  equ $B46D¢¢  sdxtrap  pha         Na pocz⇧tku procedura zapami❎tuje numer b ❎du.¢           jsr mdosvect    Teraz od③wierza najwaəniejsze wektory DOSu,¢           jsr _INITZ  i inicjuje sam DOS.¢           pla         Teraz z numerem b ❎du wywo uje procedur❎ wy③wietlaj⇧c⇧¢           jsr U_ERROR numer lub nazw❎ b ❎du, po czym przechodzi do DOSu.¢¢           org $A119   DOS.¢¢  appmhi   equ $15¢  SYSLEVEL equ $C5E¢  erridx   equ $C85¢  ldccom   equ $A13C¢  clsalsys equ $A1B5¢  U_UNLOAD equ $A1C7¢  FCLoSEAL equ $AD0E¢¢  _DOS     ldx #$FF    Na pocz⇧tku procedura ustwia wska♪nik stosu na pierwsz⇧¢           txs         pozycj❎,¢           inx         nast❎pnie zeruje¢           stx erridx  indeks pu apek i¢           stx appmhi  wektor appmhi.¢           stx appmhi+1¢           inx¢           stx SYSLEVEL    Teraz ustawia poziom systemu na poziom nak adek¢           jsr U_UNLOAD    i je zwalnia.¢           dec SYSLEVEL    Nastepnie ustawia poziom systemu,¢           jsr clsalsys    zamyka wszystkie kana y ATARI OS,¢           jsr FCLOSEAL    i wszystkie kana y SDX.¢¢  eA134    lda #$00    Teraz w p❎tli bez koca  aduje COMMAND.COM,¢           jsr ldccom¢           jmp eA134¢¢     Nast❎pna procedura odpowiedzialna jest za za adowanie pow oki DOSu.¢  Moəna j⇧ wykorzystywa⇨ we w ⇧snych programach (opcja DOS SHELL) poprzez¢  wektor $FFD2.¢¢           org $A13C   LoaD Command.COM¢¢  buf580   equ $580¢  FILE_P   equ $C5A¢  FLAG     equ $C5C¢  dftcspc  equ $A196¢  envcspc  equ $A1AD¢  U_UNLOAD equ $A1C7¢  U_LOAD   equ $A204¢  U_FAIL   equ $A6BE¢  U_XFAIL  equ $A70E¢  GETENV   equ $BA93¢¢  ldccom   sta FLAG        Na pocz⇧tku procedura ustawia rejestr FLAG. Dla¢           lda <envcspc    procedury U_LOAD ma on istotne znaczenie.¢           ldx >envcspc    Nast❎pnie pobierana jest zmienna ③rodowiskowa¢           jsr GETENV      wskazywana przez ENVCSPC.¢           bmi eA14E¢¢           lda <buf580     Gdy jest ona zdeklarowana w systemie podawany jest¢           ldx >buf580     adres jej zwrconej przez GETENV warto③ci.¢           bne eA152¢¢  eA14E    lda <dftcspc    W przeciwnym razie adresem tym jest wska♪nik do¢           ldx >dftcspc    nazwy COMMAND.COM.¢¢  eA152    sta FILE_P      Teraz ten wska♪nik jest ustwiany.¢           stx FILE_P+1¢           jsr slcsfail    Ustawiana jest pu apka i¢           jsr U_LOAD      plik jest  ⇧dowany.¢           cmp #$01        Teraz procedura si❎ rozdziela w¢           bcc eA170       zaleəno③ci od wyniku zwrconego przez pow ok❎ DOSu.¢           beq eA16D¢           cmp #$03¢           bcc eA178¢           beq eA17E       Dla warto③ci innych niə 0,1,2,3 sygnalizowany jest¢           jmp U_FAIL      odpowiedni b ⇧d.¢¢  eA16D    lda #$FF        Dla warto③ci 1 ladowany jest plik z zatrzymaniem¢           dta b($2C) bit  w pami❎ci.¢¢  eA170    lda #$00        Dla warto③ci 0 plik  adowany jest normalnie.¢  eA172    sta FLAG        Jest to rozrəniane przez U_LOAD na podstawie¢           jsr U_LOAD      rejestru FLAG.¢¢  eA178    jsr FCLOSEAL    Teraz po powrocie z danego programu lub dla warto③ci¢           jmp U_XFAIL     2 zwracanej przez pow ok❎ zamykane s⇧ wszystkie¢                           kana y i zdejmowana jest pu apka systemowa.¢¢  eA17E    jsr U_UNLOAD    Dla warto③ci 3 zwalniana jest pami❎⇨ zajmowana przez¢           jmp eA178       pliki w niej zatrzymane.¢¢     Pu apka zak adana przez program  aduj⇧cy pow ok❎ DOSu.¢¢           org $A184   Load Command.com trap.¢¢  gcharflg    equ $CC1¢  slcsfail equ $A196¢  U_XFAIL  equ $A70E¢  FCLOSEAL equ $AD0E¢  U_ERROR  equ $B46D¢¢  lctarp   sta gcharflg       Najpierw zapami❎tuje ona numer b ❎du,¢           jsr slcsfail    nast❎pnie ponownie ustawia pu apk❎,¢           jsr FCLOSEAL    zamyka wszystkie kana y SDX,¢           lda gcharflg       pobiera i wy③wietla numer b ❎du.¢           jsr U_ERROR¢           jmp U_XFAIL     Na koniec zdejmuje pu apk❎ i koczy dzia anie.¢¢      Procedura zak adaj⇧ca pu apk❎ dla LDCCOM.¢¢           org $A196   Set Load Command.com u_SFAIL.¢¢  lctrap   equ $A184¢  U_SFAIL  equ $A6F3¢¢  slcsfail lda <lctarp     Procedura ustawia wska♪nik procedury pu apki,¢           ldx >lctarp¢           jmp U_SFAIL     i j⇧ ustawia.¢¢      Domy③lna nazwa pow oki systemu.¢¢           org $A19D DeFaulT ComSPeC.¢¢  dftcspc  dta c'CAR:COMMAND.COM',b($9B)¢¢      Nazwa zmiennej ③rodowiskowej wywo ywanej przez LDCCOM.¢¢           org $A1AD ENVironment ComSPeC.¢¢  envcspc  dta c'COMSPEC',b($9B)¢¢      Procedura zamykaj⇧ca kana y ATARI OS.¢¢           org $A1B5   CLoSe ALl atari SYStem chanel.¢¢  iccmd    equ $342¢  jciomain equ $E456¢¢  clsalsys lda #$10        Procedura ustawia numer kana u na $10 co oznacza 1¢  eA1B7    tax             kana . Nast❎pnie ustawiaj⇧c kolejno dla kaədego¢           lda #$0C        kana u kod operacji CLOSE i wywo uj⇧c g wna proce-¢           sta iccmd,x     dur❎ CIOMAIN ATARI OS zamyka wszystkie kana y prcz¢           jsr jciomain    0 standardowo otwartego dla edytora 'E:'.¢           txa¢           clc¢           adc #$10¢           bpl eA1B7¢           rts¢¢      Systemowa procedura umieszczj⇧ca rozszerzenia systemu wymagaj⇧ce¢  kaədorazowego inicjowania w czasie przerwania reset do specjalnej kolejki¢  inicjacji systemu. Adres procedury inicjuj⇧cej naleəy umie③ci⇨ w AX¢  i wywo a⇨ procedur❎. Uwaga, kolejka jest ograniczona do pi❎ci miejsc, nie¢  naleəy wi❎c naduəywa⇨ tej procedury.¢¢           org $A0F4   System ADD Initiation Zero.¢¢  dosini   equ $C¢  dosinip  equ $92F¢  arstal_t equ $CB0¢  arstah_t equ $CB5¢  arstidx  equ $CBA¢¢  S_ADDIZ  ldy arstidx     Na pocz⇧tku procedura sprawdza czy jest jeszcze¢           cpy #$05        miejsce w kolejce,¢           beq eA105¢           sta arstal_t,y  gdy jest wpisuje ona adres procedury do specjalnych¢           txa             tablic.¢           sta arstah_t,y¢           inc arstidx¢¢  eA105    lda <dosinip    Na kocu od③wierza adres prcoedury inicjacji DOSu.¢           sta dosini¢           lda >dosinip¢           sta dosini+1¢           rts¢¢           end of doc¢