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 wasnych.¢ Uəyto nast❎puj⇧cych kryteriw:¢¢ 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 (kanau).¢ 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 moduw ROM. Blok informacji moduu 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¢ moduu 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 wywouje program przepisywania pami❎ci i¢ jsr bmovemem oddaje sterowanie do procedury wa③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 moduowi, 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 porwnanie ze¢ cmp $8000 wzorem.¢ sta $8000¢ bne e0134¢¢ lda #$80 Gdy dost❎pne jest tylko 16KB ustawia RAMTOP, suə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 Powrt do procedury RESET.¢¢ pcarini lda #$00 Procedura inicjacji moduu jest podobna z systemow⇧.¢ sta tramsz Najpierw zerowany jest tymczasowy rejestr obecno③ci¢ moduu, 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 pomyek z pami❎ci⇧ RAM.¢ bne e0158¢¢ inc tramsz Nast❎pnie ustawiany jest rejestr obecno③ci i¢ jmp (cartini) nast❎puje inicjacja moduu.¢¢ 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 wywoywana jest procedura¢ sty path procedura BMOVEMEM dla ktrej indeks pobierany jest¢ jsr bmovemem z jest z tablicy BMMIDX_T, poczym sterowanie¢ ldy path sterowanie oddawane jest do wa③ciwej procedury¢ dey inicjuj⇧cej system SDX.¢ bpl eA08B Zmienna PATH suə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 gwna SDX (modu bank 1).¢ Wypenione s⇧ obszary $700-$760 zawieraj⇧ce podstawowe rozkazy skokw,¢ wektory i flagi systemu. Obaszary $800-$A1D, $B97-$BCF oraz $BE6-$C15¢ ktre s⇧ sercem systemu (system kernel) zawieraj⇧ce najwaəniejsze procedury¢ mi❎dzy innymi prze⇧czania bankw pami❎ci, tabele prze⇧cznikw (warto③ci¢ prze⇧czj⇧cych), gwn⇧ procedur❎ obsuguj⇧c⇧ urz⇧dzenia, procedury wej③cia¢ do DOSu i inne. I ostatnie $3800-$3AB2 i $7000-$73B6 ktre traktowa⇨ moəna¢ jako pierwsz⇧ aplikacj❎ ktra odpowiedzialna jest za rozpoznanie ilo③ci¢ pami❎ci w systemie, ustawienie wska♪nikw i zaadowanie systemu z danych¢ zawartych w pliku CONFIG.SYS. W opisie omin❎ szczegy adowania i¢ korzystania z serca aby nie zaciemnia⇨ obrazu startu systemu. Wszystkie¢ pomini❎te procedury opisane b❎d⇧ w odpowiednich dziaach 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 wywouje procedur❎ przepisuj⇧c⇧ pami❎⇨ w¢ jsr bmovemem celu ustalenia wektorw DOSVEC i DOSINI.¢¢ jsr findext P♪niej sprawdza rozmiar pami❎ci dodatkowej.¢¢ ldx #$03 Teraz nast❎puje inicjowanie zmiennych:¢ stx caropt CARTOPT warunkuj⇧ca dziaanie 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 dyskw'.¢¢ 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 moduu.¢ bne e3A5C¢ sta cartck¢ cli¢¢ ldx #$05 Teraz przepisane zostaj⇧ rozkazy skokw do wej③cia¢ e3A68 lda ctabinit,x DOSu oraz procedury obrbki 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 numerw 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 Wywoywane 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 skokw 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 wektorw DOSVEC i DOSINI.¢¢ Na tym koczy si❎ pierwsza cz❎③⇨ inicjacji SDX, omwi❎ teraz procedury¢ w niej wyst❎puj⇧ce.¢¢ Procedura BMOVEMEM przenosi dowolnie dugi obszar pami❎ci pod inny adres.¢ Parametrem jest indeks tablicy BMBLOCK ktra 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❎ bajtw 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 rwna zero.¢¢ ldy #$00 Gdy obszar jest duə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 puapki systemowej.¢ sta errs_v+1¢ rts¢¢ Procedura MDOSVECT zostanie omwiona 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 numerw 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 wywouj❎ funkcj❎ wykrywania dodatkowych¢ lda #$00 bankw 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 bankw 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 znakw 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 porwnania jest rwny.¢ 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 bankw nie wyst❎poway 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 wa③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 bankw czyli 2048 KB.¢¢ ldx #$7F¢ e3918 stx abank Dla wszystkich bankw 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 powtrne¢ stx fbbte uruchomienie SDX nie powoduje utraty danych¢ dex ramdyskw. Warto③ci te s⇧ ustalane na numer banku.¢ bpl e3918¢¢ e3927 inx Dalej warto③ci w bankach porwnywane s⇧ z numerami¢ stx abank bankw. Po pierwszej niezgodno③ci ustalana jest¢ cpx fbbte liczba dost❎pnych bankw komputera.¢ beq e3927¢ dex¢ stx nbnks¢¢ ldx #$00 Nast❎pnie program przywraca stare warto③ci w¢ e3936 stx abank pierwszych bajtach bankw.¢ lda fbbte_t,x¢ sta fbbte¢ inx¢ bpl e3936¢¢ lda #$00¢ sta pbmask Maska dla bankw zostaje skasowana i w⇧czony jest¢ sta abank bank podstawowy.¢ jmp e39D3¢¢ Nieco inaczej przebiega testowanie bankw 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 bankw ATARI,¢ lecz takəe innych. Programi③ci kierowali si❎ istniej⇧cymi rozszeəeniami w¢ ustalaniu wagi bitw sprawdzanych. Testowanie odbywa si❎ raz dla kaədych 4¢ bankw 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 bitw posuə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 bankw, po pierwszym banku z grupy 4¢ sta fbbte_t,x sterowanych bitami AA.¢ dex¢ bpl e3958¢¢ ldy #$01 Dwa przebiegi procedury dla bitw BC i CB.¢¢ e3966 lda chbit1,y Ustala kolejno③⇨ bitw 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 porwnuje 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 porwna dla danego¢ sta passes,y przebiegu.¢ dey¢ bpl e3966 Nast❎pnie powtarza test dla innej kolejno③ci bitw.¢¢ ldx #$0F¢ e399D jsr setportb Po testach ustawia stare warto③ci w bankach dla¢ lda fbbte_t,x zachowania ramdyskw.¢ sta fbbte¢ dex¢ bpl e399D¢¢ ldx passes Pod koniec testu porwnuje dla ktrego przebiegu¢ cpx passes+1 znaleziono wi❎cej grup bankw.¢ bcs e39BE¢¢ ldx #$83 I gdy odwrotna kolejno③⇨ bitw ustala j⇧ w tabeli.¢ stx portb_t+1¢ ldx #$A3¢ stx portb_t+3¢ ldx passes+1 Pobiera do X liczb❎ grup bankw.¢¢ 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❎ bankw¢ 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❎ bankw¢ 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③⇨ bitw.¢ chbit3 dta b($83),b($A3)¢¢ pbmask_t dta b($00) bez bankw dodatkowych,¢ dta b($1C) 4 banki,¢ dta b($5C) 8 bankw,¢ dta b($7C) 12 bankw,¢ dta b($7C) 16 bankw,¢ 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 bitw PORTB maj⇧cych znaczenie¢ dta b($00) w prze⇧czaniu bankw.¢ 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 bankw.¢¢ nmiinit dta a(nmi),a($0000),a(irq) Nowe wektory NMI,RESET,IRQ.¢¢ hvinit sec rts brk Tablica wektorw 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.¢