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

  1.        Dokumentacja Sparta DOS X.¢¢       Marek M.M. Goderski¢¢       W dokumentacji uəyto nazw zmiennych ATARI OS podanych przez Wojciecha¢       Zientar❎, do opisu zmiennych SDX uəyto nazw podanych przez Konrada K.¢       Kokoszkiewicza, a w wi❎kszo③ci w asnych.¢       Uəyto nast❎puj⇧cych kryteriw:¢¢       nazwa_t/nazwatab - tablica,¢       nazwa_i/nazwaidx - indeks (tablicy),¢       nazwa_p/nazwaptr - wska♪nik pami❎ci,¢       nazwa_o/nazwaoff - przesyni❎cie (w wierszu),¢       nazwa_n/nazwanum - numer (kana u).¢       nazwa_v/nazwavec - wektor.¢¢       Duəymi literami w tek③cie programu oznaczono znane SYMBOLE SDX.¢¢       Start systemu Sparta DOS X.¢¢       Wej③cie do systemu SDX nastepuje poprzez procedur❎ RESET komputera,¢  podobnie jak do innych modu w ROM. Blok informacji modu u CART ($BFF0)¢  zawiera dane :¢¢           cbank 0,1,2,3,4,5,6,7¢           org $BFF0¢¢  pcartrun equ $A078¢¢  cart     sta cbank_0¢           jmp pcartrun¢¢           org $BFFA¢¢  cartrun  dta a(0)¢  cartins  dta b(0)¢  cartopt  dta b(1)¢  cartini  dta a(cart)¢¢  Powoduj⇧ one skok poprzez CARTINI do CART a tym samym uaktywnienie banku 0¢  modu u i skok do procedury PCARTRUN.¢¢           cbank 0¢           org $A078   Procedure CARTridge RUN.¢¢  abank    equ $CFFF¢  bmovemem equ $A000¢  pcarstck equ $110¢¢¢  pcartrun lda #$00        Procedura dezaktywuje rozszerzenia pami❎ci standardu¢           sta abank       Axlon,¢           ldx #$36        wywo uje program przepisywania pami❎ci i¢           jsr bmovemem    oddaje sterowanie do procedury w a③nie umieszczonej¢           jmp pcarstck    pod adresem $110.¢¢¢           org $110    Procedure CARtridge run continue on the STaCK.¢¢  tramsz   equ $06¢  warmst   equ $08¢  boot?    equ $09¢  dosini   equ $0C¢  ramtop   equ $6A¢  gintkl   equ $03FA¢  cartins  equ $BFFC¢  cartini  equ $BFFE¢  trig3    equ $D013¢  cart_on  equ $D500¢  cbankoff equ $D5E8¢¢  pcarstck sta cbankoff    Procedura dezaktywuje modu  SDX i udost❎pnia¢           sta cart_on     przestrze adresow⇧ innemu modu owi, aktualizuje¢           lda trig3       teə istnienie tego w rejesrze GINTKL aby zapobiec¢           sta gintkl      programowemu zawieszeniu systemu.¢¢           lda $8000       Nast❎pnie program sprawdza dost❎pno③⇨ pami❎ci po¢           inc $8000       wyəej 16KB, poprzez zwi❎kszenie i porwnanie ze¢           cmp $8000       wzorem.¢           sta $8000¢           bne e0134¢¢           lda #$80        Gdy dost❎pne jest tylko 16KB ustawia RAMTOP, s uəy¢           sta ramtop      on w p♪niejszej fazie procedury do rozpoznania¢                           modelu ATARI 800.¢¢  e0134    jsr pcarini     Procedura inicjuje inny modu  rom.¢¢           bit warmst      Sprawdzany jest tryb procedury RESET.¢           bmi e0141¢¢           lda <bpdosini   Gdy zimny start ustawiany jest wektor DOSINI oraz¢           sta dosini      zmieniane s⇧ warto③ci WARMST i BOOT? w celu zmiany¢           lda >bpdosini   przebiegu procedury RESETCD na RESETWM i BOOT na¢           sta dosini+1    wykonanie skoku JMP (DOSINI) i dalszego przebiegu¢           dec warmst      'BOOTowania' SDX.¢           inc boot?¢¢  e0141    rts             Powrt do procedury RESET.¢¢  pcarini  lda #$00        Procedura inicjacji modu u jest podobna z systemow⇧.¢           sta tramsz      Najpierw zerowany jest tymczasowy rejestr obecno③ci¢                           modu u, nast❎pnie sprawdzana jest jego fizyczna¢           ldx cartins     obecno③⇨. (CARTINS=00).Potem procedura zwi❎ksza¢           bne e0158       rejestr i ponownie sprawdza jego zerow⇧ warto③⇨. To¢           inc cartins     zabezpieczenie ma na celu wyeliminowanie¢           ldx cartins     ewentualnych pomy ek z pami❎ci⇧ RAM.¢           bne e0158¢¢           inc tramsz      Nast❎pnie ustawiany jest rejestr obecno③ci i¢           jmp (cartini)   nast❎puje inicjacja modu u.¢¢  e0158    rts¢¢  bpdosini sta cbank_0     Ostatnia cz❎③⇨ procedury PCARSTCK uruchamiana jest¢           lda #$01        poprzez procedur❎ BOOT. W ⇧cza ona bank 0 SDX i¢           sta gintkl      ustawia rejestr GINTKL przechodz⇧c do dalszej cz❎③ci¢           jmp coldcnt     'BOOTowania' SDX zawartej w module.¢¢           cbank 0¢           org $A085   cartridge COLD start CoNTinue.¢¢  warmst   equ $08¢  boot?    equ $09¢  path     equ $7A0¢  bootsdx  equ $3A1E¢¢¢  coldcnt  inc warmst      Zmienne WARMST i BOOT? uzyskuj⇧ ponownie warto③ci¢           dec boot?       sygnalizuj⇧ce zimny start.¢¢           ldy #$05¢  eA08B    ldx eA09D,y     Nast❎pnie 6 krotnie wywo ywana jest procedura¢           sty path        procedura BMOVEMEM dla ktrej indeks pobierany jest¢           jsr bmovemem    z jest z tablicy BMMIDX_T, poczym sterowanie¢           ldy path        sterowanie oddawane jest do w a③ciwej procedury¢           dey             inicjuj⇧cej system SDX.¢           bpl eA08B       Zmienna PATH s uəy jako zmienna tymczasowa.¢           jmp bootsdx¢¢  bmmidx_t dta b($2A),b($12),b($24),b($18),b($1E),b($30)¢¢  Po wykonaniu tej procedury system SDX jest juə wst❎pnie zainicjowany.¢  Pod adresami $A000-$BFFF znajduje si❎ bibloteka g wna SDX (modu  bank 1).¢  Wype nione s⇧ obszary $700-$760 zawieraj⇧ce podstawowe rozkazy skokw,¢  wektory i flagi systemu. Obaszary $800-$A1D, $B97-$BCF oraz $BE6-$C15¢  ktre s⇧ sercem systemu (system kernel) zawieraj⇧ce  najwaəniejsze procedury¢  mi❎dzy innymi prze ⇧czania bankw pami❎ci, tabele prze ⇧cznikw (warto③ci¢  prze ⇧czj⇧cych), g wn⇧ procedur❎ obs uguj⇧c⇧ urz⇧dzenia, procedury wej③cia¢  do DOSu i inne. I ostatnie $3800-$3AB2 i $7000-$73B6 ktre traktowa⇨ moəna¢  jako pierwsz⇧ aplikacj❎ ktra odpowiedzialna jest za rozpoznanie ilo③ci¢  pami❎ci w systemie, ustawienie wska♪nikw i za adowanie systemu z  danych¢  zawartych w pliku CONFIG.SYS. W opisie omin❎ szczeg y  adowania i¢  korzystania z serca aby nie zaciemnia⇨ obrazu startu systemu. Wszystkie¢  pomini❎te procedury opisane b❎d⇧ w odpowiednich dzia ach dotycz⇧cych serca¢  jak i procedur wej③cia/wyj③cia bibloteki SDX.¢¢           org $3A1E   BOOT SDX.¢¢  ramtop   equ $6A¢  coldst   equ $244¢  cartck   equ $3EB¢  basicf   equ $3F8¢  gintlk   equ $3FA¢  s_flag   equ $700¢  lsiouser equ $860¢  jdos_    equ $9B7¢  jcrunch_ equ $9AB¢  memflg   equ $A44¢  lsio     equ $A4E¢  caropt   equ $A55¢  magic2   equ $A57¢  COMTAB   equ $A58¢  sver_p   equ $A63¢  dosflg   equ $A78¢  CURDEV   equ $C5D¢  setvar   equ $3800¢  mdosvect equ $A000¢  cart     equ $BFF0¢  trig3    equ $D013¢  portb    equ $D301¢  cart_of  equ $D508¢  cbank_1  equ $D5E1¢¢  bootsdx  lda ramtop      Procedura sprawdza ilo③⇨ dost❎pnej pami❎ci i je③li¢           cmp #$C0        jest jej mniej niə $C0 stron¢           beq e3A27¢¢           sta memflg      ustawia flag❎ memflg.¢¢  e3A27    ldx #$00        Nast❎pnie wywo uje procedur❎ przepisuj⇧c⇧ pami❎⇨ w¢           jsr bmovemem    celu ustalenia wektorw DOSVEC i DOSINI.¢¢           jsr findext     P♪niej sprawdza rozmiar pami❎ci dodatkowej.¢¢           ldx #$03        Teraz nast❎puje inicjowanie zmiennych:¢           stx caropt      CARTOPT warunkuj⇧ca dzia anie polecenia CAR,¢           lda #$00        nast❎pnie kasowane s⇧ flagi BASICa i zimnego startu,¢           sta basicf¢           sta coldst¢           sta dosflg      a takəe flaga wykonywania DOSVEC z DOSINI.¢¢           lda #$01        Znacznik odczytu wst❎pnego zostaje ustalony na¢           sta boot?       warto③⇨ 'udany odczyt ze stacji dyskw'.¢¢           sei             W kolejnym etapie w ⇧czony zostaje bank 1 SDX i¢           sta cbank_1     wy ⇧czony dodatkowy modu , oraz basic.¢           sta cart_of¢           lda portb¢           ora #$02¢           sta portb¢           lda trig3       Ustalony zostaje rejestr GINTKL.¢           sta gintkl¢¢           ldx #$00¢           txa¢           clc¢  e3A5C    adc cart,x      Procedura oblicza i zapami❎tuje sum❎ kontroln⇧¢           inx             modu u.¢           bne e3A5C¢           sta cartck¢           cli¢¢           ldx #$05        Teraz przepisane zostaj⇧ rozkazy skokw do wej③cia¢  e3A68    lda ctabinit,x  DOSu oraz procedury obrbki wiersza,¢           sta COMTAB,x¢           dex¢           bpl e3A68¢           ldx #$02¢  e3A73    lda sioinit,x   a takəe skok do procedury szybkich operacji SIO.¢           sta lsio,x¢           dex¢           bpl e3A73¢¢           lda <s_flag     Ustalany jest wska♪nik do wersji i numeru dosu.¢           sta sver_p¢           lda >s_flag¢           sta sver_p¢¢           ldx #$09        Nast❎pnie inicjowana jest tablica numerw urz⇧dze¢  e3A88    txa             SIO.¢           sta sioidx,x¢           dex¢           bne e3A88¢¢           lda #$FF¢           sta magic2      Ustawiana jest flaga o nieznanym znaczeniu.¢¢           jsr mdosvect    Ustawiane s⇧ najwaəniejsze wektory wewnetrzne DOSu.¢           jsr setvar      Ustawiane s⇧ əywotne zmienne DOSu.¢           jsr jhdosini    Wywo ywane jest bezwarunkowe inicjowanie DOSu.¢           lda #$21¢           sta CURDEV      Ustalane jest urz⇧dzenie domy③lne na CAR1:.¢           jmp lddosdvc    Odczytywane s⇧ urz⇧dzenia DOSu.¢¢  ctabinit jmp jdos_       Tablice skokw do DOSu i ZCRUNCH oraz¢           jmp jcrunch_¢  sioinit  jmp lsiouser    LSIO.¢¢           org $3AAE¢¢  COMTAB   equ $A58¢  dosinip  equ $91B¢¢           dta a(COMTAB),a(dosinip) Tablica wektorw DOSVEC i DOSINI.¢¢  Na tym koczy si❎ pierwsza cz❎③⇨ inicjacji SDX, omwi❎ teraz procedury¢  w niej wyst❎puj⇧ce.¢¢  Procedura BMOVEMEM przenosi dowolnie d ugi obszar pami❎ci pod inny adres.¢  Parametrem jest indeks tablicy BMBLOCK ktra ma posta⇨ :¢  a(sk⇧d),a(dok⇧d),a(ile). Indeks niesiony jest w rejestrze X.¢¢           cbank 0¢           org $A000   Boot MOVE MEMory.¢¢  bufr     equ $32¢  bufen    equ $34¢  bmblock  equ $A03C¢¢¢  bmovemem lda bmblock,x       Na pocz⇧tku procedura ustala parametry sk⇧d,¢           sta bufr            dok⇧d w zmiennych SIO, bufr i bufen, liczb❎¢  eA005    lda bmblock+1,x     stron do przepisania w X, a liczb❎ bajtw na¢           sta bufr+1          na stosie.¢           lda bmblock+2,x¢           sta bufen¢           lda bmblock+3,x¢           sta bufen+1¢           lda bmblock+4,x¢           pha¢           lda bmblock+5,x¢           tax¢           beq eA02E           Gdy liczba stron rwna zero.¢¢           ldy #$00            Gdy obszar jest d uəszy niə jedna strona¢  eA020    lda (bufr),y        procedura przepisuje strony.¢           sta (bufen),y¢           iny¢           bne eA020¢  eA027    inc bufen+1¢           inc bufr+1¢           dex¢           bne eA020¢¢  eA02E    pla                  Nast❎pnie przepisywany jest blok mniejszy niə¢           tay                  strona pami❎ci.¢¢  eA030    tya¢           beq eA03B¢           dey¢           lda (bufr),y¢           sta (bufen),y¢           clc¢           bcc eA030¢  eA03B    rts¢¢           org $A03C¢¢               sk⇧d      dok⇧d     ile¢¢  bmblock  dta a($3AAE),a($000A),a($0004)¢           dta a($E000),a($3C00),a($0400)¢           dta a($3C00),a($E000),a($0400)¢           dta a($B11F),a($0800),a($021D)¢           dta a($B33B),a($0B97),a($0038)¢           dta a($B373),a($0BE6),a($002A)¢           dta a($B39D),a($0700),a($0060)¢           dta a($B3FD),a($3800),a($02B2)¢           dta a($B6AF),a($7000),a($03B6)¢           dta a($A0A3),a($0110),a($0054)¢¢           org $3800   SET VARiable.¢¢  SYSLEVEL equ $C5E¢  sdxmemlo equ $C5F¢  sdxmemhi equ $C63¢  apl_n    equ $C7B¢  smb_p    equ $C80¢  errs_v   equ $CAE¢  magic3   equ $CBA¢  endofvar equ $CC4¢  sdxtrap  equ $A10E¢  saplahf  equ $A1E8¢¢  setvar   lda <smbu_load  Procedura ustawia w wska♪niku do symbolu adres¢           sta smb_p       pierwszego symbolu zdefiniowanego w ci⇧gu symboli¢           lda >smbu_load  SDX.¢           sta smb_p+1¢¢           lda <endofvar   Ustalane jest memlo  i¢           sta sdxmemlo¢           lda >endofvar¢           sta sdxmemlo+1¢           lda >$9C1F      memhi dla SDX.¢           sta sdxmemhi+1¢           lda <$9C1F¢           sta sdxmemhi¢¢           lda #$00¢           sta apl_n       Nast❎pnie ustawia numer aplikacji na zero,¢           sta SYSLEVEL    poziom systemu na procedury systemowe, oraz¢           sta magic3      zmienn⇧ nieznan⇧.¢¢           jsr saplahf     Ustawia numer aplikacji i wska♪nik h_fence.¢¢           lda <sdxtrap¢           sta errs_v¢           lda >sdxtrap    Ustawia wektor pu apki systemowej.¢           sta errs_v+1¢           rts¢¢  Procedura MDOSVECT zostanie omwiona przy opisie j⇧dra systemu, przenosi ona¢  najwaəniejsze wektory i skoki DOSu w obszar j⇧dra ($7E0).¢  Procedura SAPLAHF zostanie opisana przy opisie bibloteki SDX, ustawia ona¢  numer aplikacji w tablicy numerw i ustawia wska♪niki H_FENCE.¢¢           org $732B   FIND EXTended memory.¢¢  _800flg  equ $A73¢  nbnks    equ $A75¢  bankflg  equ $A76¢  osrmflg  equ $A77¢  procfind equ $38C9¢¢  findext  jsr procfind    Procedura wywo uj❎ funkcj❎ wykrywania dodatkowych¢           lda #$00        bankw pami❎ci.¢           sta bankflg     Nast❎pnie inicjuje flagi pami❎ci uəywanej przez DOS,¢           sta osrmflg     domy③lne NONE.¢¢           bit _800flg¢           bpl e7344       Teraz sprawdza rodzaj komputera i gdy jest to¢¢           ldx nbnks       model 800 i istniej⇧ banki dodatkowej pami❎ci¢           beq e7343       ustawiane jest domy③lne korzystanie z pami❎ci¢  e7340    dec bankflg     BANKED.¢  e7343    rts¢¢  e7344    lda nbnks       Dla modeli XE/XL gdy liczba bankw mniejsza jest niə¢           cmp #$05        4 ustawiane jest domy③lne koəystanie z OSRAM.¢           bcs e7340¢           dec osrmflg¢           rts¢¢           org $38C9   PROCedure FIND extended memory.¢¢  rtclock  equ $12¢  portb_t  equ $90A¢  xldccom  equ $9C0¢  nmi      equ $9F1¢  irq      equ $9F3¢  pbmask   equ $A74¢  _800flg  equ $A73¢  nbnks    equ $A75¢  fbbte_t  equ $2F00¢  setportb equ $38F8¢  fbbte    equ $4000¢  bmovemem equ $A000¢  abank    equ $CFFF¢  portb    equ $D301¢  nmien    equ $D40E¢  nmivec   equ $FFFA¢  resetvec equ $FFFC¢  highvect equ $FFC0¢¢¢  procfind ldx #$06        Na pocz⇧tku procedura przepisuje dane znakw pod¢           jsr movemem     adres $3C00.¢¢           lda rtclock+2   Nast❎pnie oczekuje na przerwanie NMI.¢  e38D0    cmp rtclock+2¢           beq e38D0¢¢  e38D4    ldx #$FF        Po przerwaniu procedura ustala rejestr X jako¢           lda portb       domy③ln⇧ flag❎ _800flg, wy ⇧cza OSRAM zapami❎tuj⇧c¢           pha             poprzednie ustawienie na stosie.¢           and #$FE¢           sta portb¢¢           lda resetvec    Nast❎pnie sprawdza czy pod ROM znajduje si❎ pami❎⇨¢           dec resetvec    RAM, gdy tak nie jest wektor RESETVEC nie daje si❎¢           cmp resetvec    zmniejszy⇨ i wynik porwnania jest rwny.¢           sta resetvec¢           beq e390A¢¢           ldy #$05        Je③li jest tam pami❎⇨ RAM, program ustala nowe¢  e38EF    lda nmiinit,y   wektory NMI,RESET,IRQ.         NMIVEC...¢           sta nmivec,y¢           dey¢           bpl e38EF¢           ldy #$1D        A takəe skoki do procedur SDX, dla zachowania¢  e38FA    lda hvinit,y    zgodno③ci z poprzednimi wersjami systemu.¢           sta highvect,y¢           dey¢           bpl e38FA¢¢           ldx #$0C        Nast❎pnie przepisuje 'pod ROM' fonty systemowe, aby¢           jsr movemem     w czasie prze ⇧czania bankw nie wyst❎powa y efekty¢                           uboczne.¢¢           ldx #$00        Kasuje X jako flag❎ _800flg.¢¢  e390A    pla¢           sta portb       Teraz program ustawia star⇧ warto③⑥ PORTB i¢           stx _800flg     flag❎ _800flg.¢           bit _800flg     Dalszy przebieg procedury zaleəy w a③nie od tej¢           bpl e394D       flagi. Wykrywana jest ilo③⇨ dost❎pnej pami❎ci ext.¢¢¢  Dla ATARI 800 dost❎pne jest rozszerzenie pami❎ci standardu Axlon i badane¢  badane jest 128 bankw czyli 2048 KB.¢¢           ldx #$7F¢  e3918    stx abank       Dla wszystkich bankw warto③ci warto③ci pierwszego¢           lda fbbte       bajtu zostaj⇧ zapami❎tane w tablicy fbbte_t dla¢           sta fbbte_t,x   p♪niejszego odtworzenia. Dzi❎ki temu powtrne¢           stx fbbte       uruchomienie SDX nie powoduje utraty danych¢           dex             ramdyskw. Warto③ci te s⇧ ustalane na numer banku.¢           bpl e3918¢¢  e3927    inx             Dalej warto③ci w bankach porwnywane s⇧ z numerami¢           stx abank       bankw. Po pierwszej niezgodno③ci ustalana jest¢           cpx fbbte       liczba dost❎pnych bankw komputera.¢           beq e3927¢           dex¢           stx nbnks¢¢           ldx #$00        Nast❎pnie program przywraca stare warto③ci w¢  e3936    stx abank       pierwszych bajtach bankw.¢           lda fbbte_t,x¢           sta fbbte¢           inx¢           bpl e3936¢¢           lda #$00¢           sta pbmask      Maska dla bankw zostaje skasowana i w ⇧czony jest¢           sta abank       bank podstawowy.¢           jmp e39D3¢¢  Nieco inaczej przebiega testowanie bankw sterowanych przez PORTB, standard¢  ATARI. Tu przewidziano do sterowania bankami dwa bity (oznaczone liter⇧ A)¢  jednak przemy③lni elektronicy rozszerzyli standard wpierw o 6 nieuəywany bit¢  (B), p♪niej o inne.¢¢  PORTB¢  7 E =0 procedura testuj⇧ca - Self Test lub dodatkowe banki,¢  6 B =1 dodatkowe banki,¢  5 C =0 dost❎p ANTICa do dodatkowej pami❎ci lub dodatkowe banki,¢  4 _ =0 dost❎p CPU do dodatkowej pami❎ci,¢  3 A =1 Bank pami❎ci dla ATARI 130 XE,¢  2 A =1 Bank pami❎ci dla ATARI 130 XE,¢  1 D =0 basic w obszarze $A000-$BFFF lub dodatkowe banki,¢  0 _ =1 system operacyjny w obszarze $C000-$FFFF.¢¢  Procedura sprawdza obecno③⇨ nie tylko bankw ATARI,¢  lecz takəe innych. Programi③ci kierowali si❎ istniej⇧cymi rozszeəeniami w¢  ustalaniu wagi bitw sprawdzanych. Testowanie odbywa si❎ raz dla kaədych 4¢  bankw ustalanych bitami AA=00. Tak wi❎c najpierw testowany jest bit B,¢  nast❎pnie C,D i E. Ponadto sprawdzana jest takəe kolejno③⇨ C,B,D i E,¢  co powoduje əe przy rozszerzeniu do 128 KB procedura rozpoznaje aktywny bit¢  B jak i C, jednak gdy bitem kontrolnym jest D lub E rozszerzenie takie nie¢  zostanie wykryte. Poniewaə taka struktura sterowanie nie jest proste do¢  przyporz⇧dkowania numerowi banku odpowiedniej kombinacji bitw pos uəono si❎¢  tablic⇧. Kaədy elment steruje 4 bankami ustalonymi bitami AA. Procedura¢  potrafi wykry⇨ do 1024KB pami❎ci (64 banki).¢¢  e394D    lda portb       Na pocz⇧tku warto③⇨ PORTB jest zapami❎tywana i¢           pha¢           lda #$00        wy ⇧czone zostaj⇧ przerwania NMI.¢           sta nmien¢¢           ldx #$0F¢  e3958    jsr setportb    Nast❎pnie w tablicy FBBTE_T zostaj⇧ zapami❎tane¢           lda fbbte       warto③ci 16 bankw, po pierwszym banku z grupy 4¢           sta fbbte_t,x   sterowanych bitami AA.¢           dex¢           bpl e3958¢¢           ldy #$01        Dwa przebiegi procedury dla bitw BC i CB.¢¢  e3966    lda chbit1,y    Ustala kolejno③⇨ bitw BC dla danego przebiegu.¢           sta portb_t+1¢           lda chbit2,y¢           sta portb_t+3¢¢           ldx #$0F¢  e3974    jsr setportb    Ustawia w bankach warto③ci odpowiadaj⇧ce ich¢           stx fbbte       numerom.¢           dex¢           bpl e3974¢¢           stx portb       Ustawia bank podstawowy i warto③⇨ w banku¢           stx $00¢           stx fbbte       podstawowym.¢¢           ldx #$00¢  e3987    jsr setportb    Teraz porwnuje warto③ci w bankach z ich numerami.¢           cpx fbbte¢           bne e3994       Przy niezgodno③ci¢           inx¢           cpx #$10¢           bne e3987¢¢  e3994    txa             zapami❎tuje liczb❎ poprawnych porwna dla danego¢           sta passes,y    przebiegu.¢           dey¢           bpl e3966       Nast❎pnie powtarza test dla innej kolejno③ci bitw.¢¢           ldx #$0F¢  e399D    jsr setportb    Po testach ustawia stare warto③ci w bankach dla¢           lda fbbte_t,x   zachowania ramdyskw.¢           sta fbbte¢           dex¢           bpl e399D¢¢           ldx passes      Pod koniec testu porwnuje dla ktrego przebiegu¢           cpx passes+1    znaleziono wi❎cej grup bankw.¢           bcs e39BE¢¢           ldx #$83        I gdy odwrotna kolejno③⇨ bitw ustala j⇧ w tabeli.¢           stx portb_t+1¢           ldx #$A3¢           stx portb_t+3¢           ldx passes+1    Pobiera do X liczb❎ grup bankw.¢¢  e39BE    lda pbmask_t,x  Ustalana jest teraz odpowiednia maska na PORTB¢           sta pbmask      ustalaj⇧ca waəne bity steruj⇧ce.¢           txa¢           asl @           A liczba grup mnoəona przez 4 daje liczb❎ bankw¢           asl @           wykrytych przez procedur❎.¢           sta nbnks¢           pla¢           sta portb       Na koniec przywracany jest stan PORTB i¢           lda #$C0        uaktywniane s⇧ przerwania NMI.¢           sta nmien¢  e39D3    rts¢¢  setportb lda portb_t,x   Odpowiednia warto③⇨ w ⇧czaj⇧ca grup❎ bankw¢           eor portb       pobierana jest z tablicy portb_t i po zapaleniu¢           and #$FE        bitu 0 (w ⇧czeniu OS) wstawiana jest w PORTB.¢           eor portb¢           sta portb¢           rts¢¢  chbit1   dta b($A3),b($83) Warto③ci zamieniaj⇧ce kolejno③⇨ bitw.¢  chbit3   dta b($83),b($A3)¢¢  pbmask_t dta b($00)      bez bankw dodatkowych,¢           dta b($1C)      4 banki,¢           dta b($5C)      8 bankw,¢           dta b($7C)      12 bankw,¢           dta b($7C)      16 bankw,¢           dta b($00)¢           dta b($00)¢           dta b($00)¢           dta b($7E)      32 banki,¢           dta b($00)¢           dta b($00)¢           dta b($00)      Tablica masek dla bitw PORTB maj⇧cych znaczenie¢           dta b($00)      w prze ⇧czaniu bankw.¢           dta b($00)¢           dta b($00)¢           dta b($00)¢           dta b($FE)      64 banki.¢¢  passes   dta b($FF),b($FF) Zmienne okra③laj⇧ce ilo③⇨ wykrytych bankw.¢¢  nmiinit  dta a(nmi),a($0000),a(irq) Nowe wektory NMI,RESET,IRQ.¢¢  hvinit   sec rts brk     Tablica wektorw high vectors.¢           sec rts brk¢           sec rts brk¢           sec rts brk¢           sec rts brk¢           sec rts brk¢           jmp xldccom¢           sec rts brk¢           sec rts brk¢           sec rts brk¢¢           end of doc.¢