home *** CD-ROM | disk | FTP | other *** search
/ Serious Magazine 12 / Serious_Magazine_12_2003_01_07_Dial_pl_Side_A.atr / xmstbxl._12 < prev   
Text File  |  2023-02-26  |  6KB  |  1 lines

  1. ¢¢         XMS w Turbo BASIC XL¢¢¢   Zapewne wielu pocz⇧tkuj⇧cych koderw¢ stan❎ o kiedy③ przed  problemem  wyko-¢ rzystania dodatkowej pami❎ci w progra-¢ mie napisanym w j❎zyku  wysokiego  po-¢ ziomu,  np.  Pascalu,  C,  czy Action!¢ O ile wi❎kszo③⇨ operacji wykonuje  si❎¢ w nich bajecznie prosto, o tyle braku-¢ je  kontroli po oəenia kodu w pami❎ci,¢ przez co  prze ⇧czaj⇧c  banki  pami❎ci¢ ryzykujemy zawieszenie komputera.¢   Moəna  wykorzysta⇨  dodatkow⇧ pami❎⇨¢ przy pomocy DOS-owego  ramdysku.  Niby¢ jest to sposb, ale moim  zdaniem  nie¢ najlepszy.  Wymaga   on  przepisywania¢ danych do  podstawowej  pami❎ci, a ko-¢ nieczno③⇨ odwo ywania si❎ do  procedur¢ WEj③cia/WYj③cia   powoduje   olbrzymie¢ straty czasu. Nie  zawsze  teə ramdysk¢ ze swoj⇧ plikow⇧ organizacj⇧ idzie nam¢ na r❎k❎.¢¢   Jednak  klony  Atari BASIC posiadaj⇧¢ ciekaw⇧ zalet❎,  ktr⇧  jest moəliwo③⇨¢ przeniesienia   dolnej   granicy  kodu¢ w dowolne miejsce  pami❎ci.¢ Tak  wi❎c problem... z g owy!¢ Wystarczy ustali⇨ Lomem na $8000 i juə¢ moəemy cieszy⇨ si❎  atwym dost❎pem  do¢ ca ej dodatkowej pami❎ci. Pami❎⇨ poni-¢ əej  $4000 pozostaje   niewykorzystana¢ i moəna do niej przenie③⇨  np.  pami❎⇨¢ ekranu, procedury maszynowe, fonty.. W¢ TBXL¢¢ Wolna pami❎⇨ zaczyna si❎ nieco poniəej¢ $3800.¢¢   Praktycznie realizuje si❎ to w nas-¢ t❎puj⇧cy sposb:¢¢ 1. Zapami❎tujemy gdzie③  dotychczasow⇧¢    zawarto③⇨ s owa Memlo ($02e7) - aby¢    moəna by o wrci⇨ do czystej posta-¢    ci interpretera;¢ 2. Wpisujemy $8000 do Memlo¢¢ 3. Wykonujemy instrukcj❎ NEW, po  kt-¢    rej  Basic  automatycznie   ustawia¢    wszystkie swoje  wektory  pocz⇧wszy¢    od Lomem ($80) do  Memtop ($90)  na¢    odpowiednie warto③ci, wed ug zawar-¢    to③ci wektora Memlo.¢¢   Najwygodniej  jest   stworzy⇨   plik¢ AUTORUN.BAS,  ktry wykona wszystko za¢ nas. W Turbo BASIC XL moəe on wygl⇧da⇨¢ tak:¢¢ 1 GRAPHICS %0:POKE 710,%0:POKE 709,%0¢ 2 DPOKE $CB,DPEEK($02E7)  1¢ 3 DPOKE $02E7,$8000  2¢ 4 ? :? :? :? "POKE 842,12:RUN ""D:AUTO¢ RUNX.BAS"""¢ 5 POSITION %0,%0¢ 6 POKE 842,13¢ 7 NEW  3¢¢   Cyfry   po    strza kach   oznaczaj⇧¢ instrukcje, ktre  realizuj⇧  poszcze-¢ glne punkty naszego opisu.¢¢¢   Naturalnie moəemy w takim krciutkim¢ programie   wczyta⇨   jeszcze   jakie③¢ dodatkowe dane, np.fonty czy "wstawki"¢ maszynowe  dla   w a③ciwego  programu,¢ czy teə wy③wietli⇨ jaki③ obrazek...¢¢   W naszym wypadku za adowany zostanie¢ D:AUTORUNX.BAS, ale  oczywi③cie  nazw❎¢ t❎ moəna zmieni⇨.¢¢   We  w a③ciwym   programie  konieczne¢ jest rwnieə kilka dzia a dla obs ugi¢ dodatkowej pami❎ci. Poniəsze przyk ady¢ 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 kocu)¢   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 bankw pami❎-¢    ci.  Najprostsze i najbezpieczniej-¢    sze rozwi⇧zanie - prze ⇧czamy 5 bi-¢    tw, co daje 32  kombinacje,  czyli¢    512 kB RAM-u we wszystkich  bankach¢    $4000-$7FFF,  ⇧cznie z  podstawowym¢ 3. deklaracje sta ych - patrz niəej¢ 4. procedura wykrywaj⇧ca banki XMS¢ 5. program g wny¢ 6. wyj③cie¢    Sta e... czyli zmienne, ktre  si❎¢ nie  zmieniaj⇧ ;)  (nawiasem   mwi⇧c:¢ przyda oby 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 bankw. Metoda prosta, zna-¢ na i oklepana. Na wszelki wypadek opi-¢ sz❎ jej dzia anie.¢¢    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 bankw - zabez-¢    pieczenie przed "nielegalnymi"  nu-¢    merami bankw.¢ 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  bankw¢    (M) jest zwi❎kszana o 1¢ 4. Ustawia standardow⇧ warto③⇨ Portu B¢    (od ⇧czone  OS,  Self Test,  Basic;¢    ustawiony podstawowy bank pami❎ci).¢   G wny 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 ktrego¢ chcemy  skorzysta⇨.   Podanie   numeru¢ wi❎kszego od liczby dost❎pnych  bankw¢ powoduje ustawienie banku podstawowego¢¢   Poniewaə  podstawowy   bank  pami❎ci¢ rwnieə 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 sposb.¢¢   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-¢ tre instrukcje, ktre 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əywa em 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 zdziwi oby mnie,  gdyby¢ kto③ wpad  na ni⇧ wcze③niej i  opraco-¢ wa  j⇧ lepiej.¢¢   A wszystkim  tym, ktrzy skorzystaj⇧¢ z powyəszego opisu pozostaje mi əyczy⇨¢ jak najwi❎cej wykrytych bankw...¢¢   do przeczytania.¢¢                        epi/Allegresse¢