6 POKE 842,13¢ 7 NEW 3¢¢ Cyfry po strzakach oznaczaj⇧¢ instrukcje, ktre realizuj⇧ poszcze-¢ glne punkty naszego opisu.¢¢¢ Naturalnie moəemy w takim krciutkim¢ programie wczyta⇨ jeszcze jakie③¢ dodatkowe dane, np.fonty czy "wstawki"¢ maszynowe dla wa③ciwego programu,¢ czy teə wy③wietli⇨ jaki③ obrazek...¢¢ W naszym wypadku zaadowany zostanie¢ D:AUTORUNX.BAS, ale oczywi③cie nazw❎¢ t❎ moəna zmieni⇨.¢¢ We wa③ciwym programie konieczne¢ jest rwnieə kilka dziaa dla obsugi¢ dodatkowej pami❎ci. Poniəsze przykady¢ s⇧ tak napisane, əe moəna je umie③ci⇨¢ w dowolnym miejscu w programie.¢¢¢ Pocz⇧tek programu...¢¢ GO# START¢¢ (inicjalizacj❎ zwykle najlepiej sta-¢ wia⇨ na kocu)¢ A oto i inicjalizacja:¢¢ 1 # START¢ GRAPHICS %0¢ POKE 752,%1¢ POSITION 13,11:? "pliiz ejd...";¢ 2 DIM BANKS(31)¢ 3 EXEC CONST¢ 4 EXEC EXTRAM¢ 5 EXEC MAIN¢ 6 GO# EXIT¢¢ 1. to trwa, wi❎c przyda si❎ jaka③ in-¢ formacja dla niecierpliwego¢ 2. istotna z naszego punktu widzenia¢ tablica, zawiera kody bankw pami❎-¢ ci. Najprostsze i najbezpieczniej-¢ sze rozwi⇧zanie - prze⇧czamy 5 bi-¢ tw, co daje 32 kombinacje, czyli¢ 512 kB RAM-u we wszystkich bankach¢ $4000-$7FFF, ⇧cznie z podstawowym¢ 3. deklaracje staych - patrz niəej¢ 4. procedura wykrywaj⇧ca banki XMS¢ 5. program gwny¢ 6. wyj③cie¢ Stae... czyli zmienne, ktre si❎¢ nie zmieniaj⇧ ;) (nawiasem mwi⇧c:¢ przydaoby si❎ w Basicu co③ takiego¢ jak #DEFINE, nie?)¢¢ PROC CONST¢ ...¢ PB=$D301:EXTM=$4000¢ ENDPROC¢¢ PB - PortB - $D301¢ EXTM - adres pocz. banku XMS - $4000¢¢ Detekcja bankw. Metoda prosta, zna-¢ na i oklepana. Na wszelki wypadek opi-¢ sz❎ jej dziaanie.¢¢ PROC EXTRAM¢ 1 FOR I=%0 TO 31¢ POKE PB,$72+I*4¢ POKE EXTM,I¢ NEXT I¢ 2 FOR I=%0 TO 31¢ BANKS(I)=$FE¢ NEXT I:M=%0¢ 3 FOR I=%0 TO 31¢ POKE PB,$72+I*4¢ IF PEEK(EXTM)=I¢ BANKS(M)=PEEK(PB):M=M+%1¢ ENDIF¢ NEXT I¢ 4 POKE PB,$FE¢ ENDPROC¢¢ 1. Pierwsza p❎tla - ustawia odpowiedni¢ kod banku w Porcie B, a nast❎pnie¢ wpisuje jego index pod adres $4000.¢ 2. "Zerowanie" tablicy bankw - zabez-¢ pieczenie przed "nielegalnymi" nu-¢ merami bankw.¢ 3. Sprawdza zawarto③⇨ pami❎ci pod ad-¢ resem $4000. Jeəeli zapisana tam¢ warto③⇨ jest zgodna z aktualnym in-¢ dexem, to bank istnieje i "jest so-¢ b⇧" - jego kod jest wpisywany do¢ tablicy, ilo③⇨ dost❎pnych bankw¢ (M) jest zwi❎kszana o 1¢ 4. Ustawia standardow⇧ warto③⇨ Portu B¢ (od⇧czone OS, Self Test, Basic;¢ ustawiony podstawowy bank pami❎ci).¢ Gwny program...¢¢ PROC MAIN¢ ...hulaj dusza...¢ ENDPROC¢¢ Dost❎p do dodatkowej pami❎ci uzysku-¢ jemy za pomoc⇧ instrukcji:¢¢ POKE PB,BANKS(x)¢¢ gdzie x oznacza numer banku, z ktrego¢ chcemy skorzysta⇨. Podanie numeru¢ wi❎kszego od liczby dost❎pnych bankw¢ powoduje ustawienie banku podstawowego¢¢ Poniewaə podstawowy bank pami❎ci¢ rwnieə nie jest wykorzystany przez¢ TBXL, wi❎c jest on traktowany jako¢ pami❎⇨ dodatkowa.¢¢ Pozostaje jeszcze tylko wyj③cie -¢ musimy zostawi⇨ interpreter w takiej¢ postaci, əeby nikt niczego si❎ nie¢ domy③li.¢ # EXIT¢ 1 POKE PB,$FE¢ 2 DPOKE $02E7,DPEEK($CB)¢ 3 GRAPHICS %0:NEW¢¢ 1. Ustawiamy bank podstawowy¢ 2. Memlo na poprzedni⇧ warto③⇨¢ 3. Czy③cimy ekran i... NEW! - TBXL re-¢ setuje si❎ w standardowy sposb.¢¢ Moəna pro③ciej:¢¢ # EXIT¢ ? USR($E477) - zimny start lub¢ ? USR($E480) - Self Test/Monitor Qmeg¢¢ Metoda ta ma, przy wszystkich swoich¢ zaletach, jedn⇧ niew⇧tpliw⇧ wad❎: nie¢ da si❎ jej wykorzysta⇨ w programach¢ przeznaczonych do skompilowania. Niek-¢ tre instrukcje, ktre s⇧ w tym wypad-¢ ku niezb❎dne, np. NEW - po prostu nie¢ daj⇧ si❎ kompilowa⇨, w kaədym razie¢ nie w standardowym TBXL Compiler¢ F. Ostrowskiego. Niestety.¢¢¢¢ I to juə chyba wszystko. Powyəszej¢ metody uəywaem z powodzeniem w kilku¢ swoich programach i musz❎ przyzna⇨, əe¢ nie znam opisu lepszej, chociaə ch❎t-¢ nie bym taki zobaczy. Metoda jest tak¢ prosta, əe nie zdziwioby mnie, gdyby¢ kto③ wpad na ni⇧ wcze③niej i opraco-¢ wa j⇧ lepiej.¢¢ A wszystkim tym, ktrzy skorzystaj⇧¢ z powyəszego opisu pozostaje mi əyczy⇨¢ jak najwi❎cej wykrytych bankw...¢¢ do przeczytania.¢¢ epi/Allegresse¢