atarionline.pl MAD-Pascal - Początki - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1: CommentAuthorPecet
      • CommentTime18 Jan 2019 19:01
       
      dzięki bocian, zawsze coś nowego.
      I sorry, za ewentualne zamieszanie.
      • 2: CommentAuthorMADRAFi
      • CommentTime18 Jan 2019 23:01
       
      Bardzo duze podziekowania Bocianowi za wskazanie bledow.
      DLI juz dziala jak powinna. Bylem dosyc blisko rozwiazania.

      Jak zwykle wszystko rozbija sie o znajomosc platformy :)
      • 3: CommentAuthorMADRAFi
      • CommentTime19 Jan 2019 15:01 zmieniony
       
      Tebe,
      Czy mozesz powiedziec kiedy MAD-Pascal bedzie obslugiwal nastepujaca deklaracje tablicy?

      type
      Tmytype = record
      price: byte;
      quantity: word;
      end;

      var
      item: array[0..20] of Tmytype;



      Nieukrywam ze byloby to bardzo oczekiwane i pomocne.
      • 4:
         
        CommentAuthorbocianu
      • CommentTime19 Jan 2019 18:01
       
      Też się przychylam!
      Może czas na wersję 1.6 ;)
      • 5: CommentAuthorkski
      • CommentTime21 Jan 2019 15:01
       
      Podpinam się pod ten wątek. Po dodaniu kolejnego bloku asm dostaję błąd przy kompilacji.

      Error: Out of resources, ASMBLOCK

      Jest ograniczenie ilości asm'ów? Nie da się tego zmienić/ominąć?

      Dzięki.
      • 6: CommentAuthortebe
      • CommentTime21 Jan 2019 16:01 zmieniony
       
      zmień linię

      AsmBlock: array [0..255] of string;

      na

      AsmBlock: array [0..4095] of string;

      i ponownie skompiluj, powinno pomóc, na ASMBLOCK
      • 7: CommentAuthorkski
      • CommentTime21 Jan 2019 16:01
       
      Pomogło. Dzięki.
      • 8: CommentAuthorMADRAFi
      • CommentTime23 Jan 2019 12:01 zmieniony
       
      Zaczynam miec problemy z iloscia pamieci :)
      Przekodowalem wiec program na biblioteke b_crt i wylaczylem system.

      No i teraz nie bardzo wiem / rozumiem jak wyglada sytuacja z zainicjalizowaniem wlasnych procedur vbl i dli.

      Jak powinna wygladac sekwencja krokow?
      Wydawalo mi sie ze to sie robi poprzez wywolanie

      SetIntVec(iDLI, @dlic);
      SetIntVec(iVBL, @vblc);


      Przykladowy listing:
      program SystemOff_test;
      {$librarypath '../Libs/lib/';'../Libs/blibs/';'../Libs/base/'}
      uses atari, b_utils, b_system, b_crt, sysutils;


      const
      CHARSET_ADDRESS = $4000;
      DISPLAY_LIST_ADDRESS_MENU = CHARSET_ADDRESS + $400;
      DISPLAY_LIST_ADDRESS_CONSOLE = DISPLAY_LIST_ADDRESS_MENU + $100;
      TXT_ADDRESS = $5000;
      SCROLL_ADDRESS = TXT_ADDRESS + $400; //$F0;
      GFX_ADDRESS = $8000;


      {$r 'systemoff_res.rc'}

      var
      oldvbl, olddli: pointer;


      {$i 'interrupts.inc'}

      {
      --------------------------------------------------------------------------------
      MAIN LOOP
      --------------------------------------------------------------------------------
      }

      begin
      SystemOff;
      SetCharset (Hi(CHARSET_ADDRESS)); // when system is off
      // savmsc:= TXT_ADDRESS;
      // Waitframe;
      // SDLSTL := DISPLAY_LIST_ADDRESS_MENU;
      //
      // GetIntVec(iVBL, oldvbl);
      // GetIntVec(iDLI, olddli);
      //
      // //
      // SetIntVec(iVBL, @vblc);
      // SetIntVec(iDLI, @dlic);
      // nmien:= $c0;


      //

      lmargin:= 0;
      rmargin:= 0;


      CRT_Init;
      CRT_WriteCentered('Loading...'~);

      repeat
      until CRT_Keypressed;

      // restore system
      // SetIntVec(iVBL, oldvbl);
      // SetIntVec(iDLI, olddli);
      // nmien:= $40;
      end.

      • 9: CommentAuthortebe
      • CommentTime23 Jan 2019 15:01
       
      SetIntVec działa kiedy system jest włączony, kiedy go wyłączysz wszystko w Twoich rękach

      main	lda:cmp:req 20

      sei
      mva #0 nmien
      sta dmactl

      mva #$fe portb

      mwa #nmi nmivec

      mva #$40 nmien

      jmp *

      /* ----------------------------------------------------------- */

      .local NMI
      bit nmist
      bpl vbl

      dli rti

      vbl sta nmist

      sta regA
      stx regX
      sty regY

      inc cloc

      mwa #dlist dlptr
      mva #scr40 dmactl

      lda regA
      ldx regX
      ldy regY
      rti
      .endl
      • 10: CommentAuthorMADRAFi
      • CommentTime23 Jan 2019 16:01
       
      wlasnie to "wszystkow twoich rekach" mnie przerasta ;)

      Ogolnie wydaje mi sie ze za malo to opisane jest i udokumentowane. Przydalby sie przeklad dolaczony do mad-pascala z obszernym komentarzem.

      Cos tam odczytuje, ale czy moglbym prosic o ten sam kod ale w Pascalu? :)
      • 11:
         
        CommentAuthorbocianu
      • CommentTime23 Jan 2019 16:01
       
      W blibs masz przykład jak ustawić przerwania bez os'a:
      ->link<-
      • 12: CommentAuthortebe
      • CommentTime23 Jan 2019 16:01
       
      pasintro.pas

      tam jest "wtłoczony" ten kod ASM do procedury Pascala SystemOFF

      sposób programowania z włączonym systemem różni się od tego sposobu z wyłączonym, to są dwie drogi, włączony OS to jak gotowy framework

      framework dla wyłączonego systemu przygotował Bocianu w swojej bibliotece BLIBS (B_SYSTEM.PAS)
      • 13: CommentAuthortebe
      • CommentTime23 Jan 2019 17:01
       
      jest jeszcze inny sposób, możesz skorzystać z pamięci dodatkowej, wtedy nie ma potrzeby wyłączać systemu

      wszelkie dane ładujesz do pamięci dodatkowej i stamtąd przepisujesz do konkretnych buforów pamięci podstawowej
      • 14: CommentAuthormono
      • CommentTime23 Jan 2019 18:01 zmieniony
       
      Istnieje jeszcze 3-cia droga (w teorii, bo być może nie macie jej w Pascalu). Korzysta z niej TurboBASIC XL oraz SpartaDOS X.
      Metoda polega na stworzeniu przelotek przy podniesionym ROM-ie dla:
      - przerwań IRQ i NMI,
      - tablicy wektorów
      które będą na czas wykorzystania mechanizmów OS-a opuszczać ROM, wywoływać co trzeba, a po powrocie odtwarzać konfigurację PORTB. Ten mechanizm działa też podczas korzystania z rozszerzonej pamięci bankowanej.
      Trzeba pamiętać przy tym, że wszystkie bufory, dane które są potrzebne dla procedur OS-a muszą być w pamięci podstawowej (ROM nie sięgnie do pamięci którą ma pod sobą).

      Edit: @tebe: Z ciekawości:
      - czy włączasz BASIC jak korzystasz z funkcji trygonometrycznych które tam są?
      - czy można wykorzystać z MadPascalem szybkie pakiety procedur?
      • 15: CommentAuthortebe
      • CommentTime23 Jan 2019 19:01 zmieniony
       
      nie znałem tej możliwości SDX

      MadPascal ma swoje pakiety, m.in. obsługuje standard IEEE-754 (32bit, typ SINGLE/FLOAT), MadPascal nie korzysta z Atari Basic

      jest też dostępna implementacja dla 65816 typu DOUBLE (64bit), mam taki pomysł aby umieścić ten kod w Weronice i korzystać z niego jak koprocesor (https://www.freepascal.org/docs-html/prog/progsu91.html#x99-980001.3.8 {$e}), tyle że na razie nie potrafię nawet stwierdzić czy Weronika jest zainstalowana, czy nie (dysponuję kartem Weronika)
      • 16: CommentAuthorMADRAFi
      • CommentTime23 Jan 2019 19:01
       
      Ok, Bocianiu jak zwykle okazal sie pomocny i ogarnalem juz te przerwania.
      Po prostu nie bylo dla mnie jasne ze to sa 2 oddzielne drogi i inaczej sie inicjalizuje vbl i dli bez systemu.
      • 17: CommentAuthortatqoo
      • CommentTime27 Jan 2019 20:01
       
      Dopnę się z pytaniem. Ma ktoś gotową receptę jak skonfigurować Notepad++ żeby się nie męczyc z kompilacją i uruchamianiem?. Pewnie z pluginem NPPExec, ale może być jakkolwiek.
      • 18: CommentAuthortatqoo
      • CommentTime27 Jan 2019 20:01
       
      Na razie w NPPExec wymysliłem tylko coś takiego:

      @setlocal
      SET MP = C:\ZZ_PRIV\MadPascal\mp.exe
      SET MADS = C:\ZZ_PRIV\MadPascal\mads.exe
      NPP_SAVE // save current file
      cd $(CURRENT_DIRECTORY) // go to directory of the current file
      "$(MP)" "$(FILE_NAME)"
      "$(MADS)" "$(NAME_PART).a65" -x -i:C:\ZZ_PRIV\MadPascal\base
      • 19: CommentAuthortebe
      • CommentTime27 Jan 2019 21:01
       
      cd $(CURRENT_DIRECTORY)
      mpas.bat $(FILE_NAME)


      mpas.bat
      @echo off

      d:\!Delphi\PAS6502\SP.exe %1

      if exist %~dp1%~n1.a65 (

      mads.exe %~dp1%~n1.a65 -xli:d:\!Delphi\Pas6502\base\

      if exist %~dp1%~n1.obx altirra %~dp1%~n1.obx
      )
      • 20: CommentAuthortatqoo
      • CommentTime28 Jan 2019 10:01
       
      Dzięki Tebe. Czy trzeba ustawiać zmienną PATH jakoś specjalnie dodatkowo?
      • 21: CommentAuthortebe
      • CommentTime28 Jan 2019 10:01
       
      PATH (Zaawansowane ustawienia systemu -> Zmienne środowiskowe)
      mam ustawione na katalog w którym trzymam wszystkie takie BAT-y albo inne przydatne programy, w tym MadAssembler
      • 22: CommentAuthorMADRAFi
      • CommentTime31 Jan 2019 11:01 zmieniony
       
      Moj kod troche zajmuje w pamieci i pojawil sie problem jej alokowania.

      To jest obecna sytuacja:

      ZPFREE: $0000..$007F
      ZPFREE: $00D8..$00FF
      STRINGS SIZE: $013D
      STRINGS : $B800..$B93D
      LOCATIONS SIZE: $010D
      LOCATIONS : $BA00..$BB0D
      ITEMS SIZE: $00F4
      ITEMS : $BC00..$BCF4

      SYSTEM: $21DA..$23AF
      B_UTILS: $23B0..$2406
      B_SYSTEM: $2407..$24F9
      SYSUTILS: $24FA..$2530
      B_CRT: $2531..$2A14
      CODE: $2000..$5240
      DATA: $5241..$747C


      Alokacja wyglada nastepujaco:
      FREE_TOP = $8000;

      CHARSET_ADDRESS = FREE_TOP;
      DISPLAY_LIST_ADDRESS_MENU = CHARSET_ADDRESS + $400;
      DISPLAY_LIST_ADDRESS_CONSOLE = DISPLAY_LIST_ADDRESS_MENU + $100;
      TXT_ADDRESS = DISPLAY_LIST_ADDRESS_CONSOLE + $100;
      SCROLL_ADDRESS = TXT_ADDRESS + $400;
      GFX_ADDRESS = $A000;
      STRINGS_ADDRESS = GFX_ADDRESS + $1800;
      LOCATIONS_ADDRESS = STRINGS_ADDRESS + $200;
      ITEMS_ADDRESS = LOCATIONS_ADDRESS + $200;



      Problem jest taki ze mam czarny ekran.
      Gdy umieszcze GFX_ADDRESS wczesniej - obraz jest wyswietlany ale grafika jest ucieta.

      Dodatkowo jeszcze bede musial wcisnac jakies 3 adresy pod grafike (160x100) i RMT player z modulem.

      Bede wdzieczny za pomoc :)
      • 23: CommentAuthortebe
      • CommentTime31 Jan 2019 16:01
       
      pamięć obrazu dla ANTIC-a jest adresowana na 12 bitach, maks 4KB blok zaadresuje

      jeśli masz większy blok pamięci do wyświetlenia, to układa się oba adresy tak aby zachodziły na siebie

      $A010 (102 linie, 102*40+16 = 4096), $B000 (kolejne 102 linie), obszar ciągły, 204 linie maks, dalej już bez dziury się nie uda
      • 24: CommentAuthorMADRAFi
      • CommentTime31 Jan 2019 18:01 zmieniony
       
      to ze jest linit 4kb to wiem juz. Ale nadal czegos nie rozumiem :)

      o czym tu piszesz

      tebe:

      jeśli masz większy blok pamięci do wyświetlenia, to układa się oba adresy tak aby zachodziły na siebie


      nie rozumiem tez dlaczego grafika umieszoczna pod adresem $9000 wyswietla sie

      a wszystko polozone powyzej (przesuniete o 4kb) juz nie.
      • 25: CommentAuthortebe
      • CommentTime31 Jan 2019 18:01
       
      co 4 KB trzeba załadować od nowa licznik LMS (12bit)

      dlist:
      dta $4e,a($a010) ; -> LMS -> $A010
      :101 dta $e ; razem z LMS to 102 linie
      dta $4e,a($b000) ; nowy LMS -> $B000
      :101 dta $e ; razem z LMS to kolejne 102 linie
      dta $41,a(dlist) ; w sumie wyświetlimy 204 linie
      • 26: CommentAuthorMADRAFi
      • CommentTime31 Jan 2019 21:01
       
      Wydaje mi sie ze wlasnie tak mam:

      dl_start
      dta DL_DLI + DL_BLANK8
      dta DL_MODE_160x192G4 + DL_LMS, a(GFX_ADDRESS)
      :99 dta DL_MODE_160x192G4
      dta DL_DLI + DL_BLANK8
      dta DL_MODE_40x24T2 + DL_LMS, a(TXT_ADDRESS)
      :5 dta DL_MODE_40x24T2
      dta DL_DLI + DL_BLANK8
      dta DL_MODE_40x24T2 + DL_HSCROLL + DL_LMS, a(SCROLL_ADDRESS)
      dta DL_JVB, a(dl_start)
      • 27: CommentAuthortebe
      • CommentTime31 Jan 2019 22:01
       
      wydaje się OK, więc może być problem z adresem samej DLIIST-y w pamięci, jest umiejscowienie też nie jest dowolne

      Pascal nie pozwala ustalić adresu dla stałych, więc lepiej przepisać je pod wskazany adres, wtedy będziesz miał kontrolę nad adresem DLIST-y (chyba że umieścisz DLIST w RESOURCE, choćby jako blok ASM)
      • 28: CommentAuthorMADRAFi
      • CommentTime31 Jan 2019 23:01
       
      moje dlisty sa resoursami w bloku asm

      DISPLAY_LIST_ADDRESS_MENU rcasm 'dlist_menu.asm'
      DISPLAY_LIST_ADDRESS_CONSOLE rcasm 'dlist_console.asm'


      Kazda z nich definiuje rozne dli i vbl, a nawet kilka dli :)
      • 29: CommentAuthortebe
      • CommentTime1 Feb 2019 10:02
       
      Bez listingu się nie obejdzie
      • 30: CommentAuthorMADRAFi
      • CommentTime2 Feb 2019 22:02 zmieniony
       
      Usunalem swoje glupoty, bo znalazlem blad :)
      • 31: CommentAuthorkski
      • CommentTime12 Feb 2019 21:02
       
      Czy są jakieś reguły/ograniczenia użycia "zagnieżdżonych" modułów w mad pascalu (lub pascalu w ogóle)?
      Podczas rozwijania programu (kilkanaście modułów) zaczeły mi się pojawiać błędy podczas kompilacji: Duplicate identifier 'nazwa modułu' lub inne całkiem bez sensu. Oczywiście dalsze moduły używają poprzednich itp.
      Załączam przykład pusty program 10 modułów.

      Przy kompilacji otrzymuję

      Mad Pascal Compiler version 1.5.7 [2018/07/15] for 6502
      Compiling main.pas
      UNIT2.pas (7,9) Error: Duplicate identifier 'UNIT1'
      D:\atariworkspace\bobleman4>mads.exe main.a65 -x -i:d:\MadPascal\base -o:main.xex
      ZPFREE: $0000..$007F
      ZPFREE: $00D8..$00FF
      ; ----------------------------
      main.a65 (169) ERROR: Missing .ENDL
      .....

      Main.a65 jest ucięty.

      Z góry dziękuję za pomoc.
      • 32: CommentAuthorMADRAFi
      • CommentTime12 Feb 2019 22:02
       
      W przykladzie jedynie unit2 stwarza problem. Gdy wykomentujesz linie "uses unit1" to calosc sie kompiluje.

      BTW uses powinien byc przd slowem kluczowym "implementation"
      Dlaczego tak sie dzieje, to moze Tebe odpowie:)
      • 33: CommentAuthorkski
      • CommentTime12 Feb 2019 22:02
       
      Jak zostawię uses unit1 w unit2, a usunę jakiś inny uses w innym unicie to też się kompiluje. Tak jakby się coś przepełniło.

      Niby czemu uses powinno być przed implementation.
      • 34: CommentAuthortebe
      • CommentTime12 Feb 2019 22:02 zmieniony
       
      jest OK to co napisał kski, zabezpieczenie w kompilatorze przed powtórzeniem w linii kilka razy tego samego unitu zgłasza ten błąd, bo sprawdza całą listę nie rozróżniając kolejnych unitów
      • 35: CommentAuthorMADRAFi
      • CommentTime12 Feb 2019 23:02
       
      Probowal ktos uzywac xbios z poziomu MP?

      Jestem w stanie odczytac wersje xbios, otworzyc katalog. nie moge sobie poradzic z prawidlowym przekazaniem nazwy pliku.
      Staram sie w 1 programie uruchomic kolejny komenda Xbios_load_file

      ldy <fname
      ldx >fname
      jmp xBIOS_LOAD_FILE


      probowalem juz przekazywac tablice typu byte jako fname. Niestety bez skutku.
      Jakies sugestie?
      • 36: CommentAuthortebe
      • CommentTime13 Feb 2019 00:02
       
      sysutils

      function DeleteFile(var FileName: TString): Boolean; assembler;
      asm
      { txa:pha

      sec ; iocheck on
      jsr @openfile.lookup
      bmi stop

      lda #33
      sta iccmd,x
      lda FileName
      add #1
      sta icbufa,x
      lda FileName+1
      adc #0
      sta icbufa+1,x
      lda #$00
      sta icax1,x
      sta icax2,x
      jsr ciov

      stop sty MAIN.SYSTEM.IOResult

      bpl ok

      lda #false
      seq

      ok lda #true
      sta Result

      pla:tax
      };
      end;
      • 37: CommentAuthortebe
      • CommentTime13 Feb 2019 00:02
       
      MP po poprawce dla USES
      • 38: CommentAuthorMADRAFi
      • CommentTime13 Feb 2019 09:02
       
      Nie wiem czy to ja zle rozumiem i nie znam assemblera czy nie umiem do xbiosa wyslac odpowiednio danych

      Najpierw mam zaladowac przy uzyciu lda filename+1?
      Jezeli tak to jak to sie robi (wczytanie pod address)

      bo takie cos nie dziala:
      procedure xbios_loadfile(filename: TString);assembler;
      asm {
      ldy <filename+1
      ldx >filename+1
      jmp xBIOS_LOAD_FILE

      };
      end;
      • 39: CommentAuthortebe
      • CommentTime13 Feb 2019 10:02 zmieniony
       
      a dlaczego używasz '<' , '>' ? to jest odpowiednik jak '#<' , '#>' czyli tryb natychmiastowy (immediate)

      STRING jest opisywany przez wskaźnik, przekazałeś do XBIOS-a adres wskaźnika, jeśli już chcesz tym sposobem to daj '<adr.filename+1' , '>adr.filename+1'

      a jeśli przez wskaźnik to
      lda filename
      clc
      adc #1
      tay
      lda filename+1
      adc #0
      tax


      MadPascal oprócz wskaźnika odkłada też adres bezwzględny dla tablic o rozmiarze nie przekraczającym 256 bajtów, a taką tablicą jest 'STRING: array [0..255] of Char'

      podglądając plik *.A65 można to zauważyć

      adr.FILENAME	= DATAORIGIN+$007A
      .var FILENAME = adr.FILENAME .word


      powyżej podałem przykład funkcji DeleteFile z SysUtils, tam jest przekazanie parametru (jako VAR) i jego obsługa z poziomu ASM

      VAR jest bardziej ekonomiczne w warunkach Atari 8-bit, bo tylko wskaźnik jest przekazywany, Twoje podejście rezerwuje pamięć dla wskaźnika i całego ciągu, który jest kopiowany do nowej lokalizacji
      • 40: CommentAuthorkski
      • CommentTime13 Feb 2019 10:02
       
      Dzięki Tebe to było ekspresowe. Działa.
      • 41: CommentAuthorMADRAFi
      • CommentTime13 Feb 2019 18:02 zmieniony
       
      Tebe, dzieki wielkie.

      Probowalem roznych rzeczy, nadal po wywolaniu xbios_load_file na ekranie pojawia sie boot error :(

      xBIOS                      = $800;
      xBIOS_VERSION = xBIOS+$02;
      xBIOS_LOAD_FILE = xBIOS+$06;



      procedure xbios_loadfile(var filename: TString);assembler;
      asm {
      lda filename
      clc
      adc #1
      tay
      lda filename+1
      adc #0
      tax
      jmp xBIOS_LOAD_FILE
      };
      end;
      • 42: CommentAuthortebe
      • CommentTime13 Feb 2019 19:02 zmieniony
       
      JMP zmień na JSR i dodaj zachowanie rejestru X, MP używa rejestru X do zarządzania stosem programowym

      txa
      pha

      lda filename
      clc
      adc #1
      tay
      lda filename+1
      adc #0
      tax
      jsr xBIOS_LOAD_FILE

      pla
      tax

      nazwa pliku (FILENAME) dużymi literami np. 'D:PLIK.DAT', pierwsza litera odnosi się do urządzenia D-isk, chociaż nie wiem czy XBIOS tego wymaga w końcu działa tylko z dyskietką i nie instaluje swojego handlera

      jeśli to nie zadziała to wina XXL-a, na 100% ;)
      • 43: CommentAuthormono
      • CommentTime13 Feb 2019 20:02
       
      asm {
      lda filename
      clc
      adc #1
      tay
      lda filename+1
      adc #0
      tax
      jmp xBIOS_LOAD_FILE
      };

      Skoro wiadomo, że to powędruje do XY to czy nie można by było:
      asm {
      ldy filename
      ldx filename+1
      inx
      sne
      iny
      jmp xBIOS_LOAD_FILE
      };

      Niby drobiazg, bo to nie jest żadna krytyczna czasowo procedura, ale trochę kłuje w oczy :)
      Wiem, czepiam się.
      • 44: CommentAuthorMADRAFi
      • CommentTime13 Feb 2019 20:02
       
      No ja bym na to nie wpadl.
      Wszystko sie rozbijalo o duze litery nazwy pliku chyba :D, bo zadzialal poprzedni kod jak to zmienilem.

      Nie wywoluje tez procedury bezposrednio ze stringiem tylko przez zmienna teraz.

      Ogolnie pomoc Tebe okazala sie nieoceniona! :)
      • 45: CommentAuthortebe
      • CommentTime13 Feb 2019 20:02 zmieniony
       
      my tu mamy podstawy a Ty reprezentujesz poziom wyższy Mono :), poza tym bez JMP-ów tutaj to ma wrócić do procki pascalowej i zakończyć się po bożemu a nie w pół drogi

      p.s.
      pomyliłeś kolejność w Y jest młodszy, powinno być INY ...
      • 46: CommentAuthortebe
      • CommentTime13 Feb 2019 20:02 zmieniony
       
      MADRAFi zajrzyj do przykładów MP, katalog FILE

      i plik 'file.pas', po jego kompilacji dostaniesz taką notkę

      file.pas (9) Note: Only uppercase letters preceded by the drive symbol, like 'D:FILENAME.EXT' or 'S:'

      możesz też obejrzeć pozostałe przykłady, tak wiem zależy Ci na pamięci więc wybrałeś XBios-a ale jakby to jest też taka procka w SYSTEM jak ReadSector :)

      XBios nie korzysta z OS więc wygrywa :)

      p.s.
      gdzie ładujesz kod XBIOS-a, bo w sumie można zrobić z tego unit dla potomności :)
      • 47: CommentAuthorMADRAFi
      • CommentTime13 Feb 2019 20:02
       

      mono:

      Skoro wiadomo, że to powędruje do XY to czy nie można by było


      Nie wiem, moze i mozna by bylo. Ale twoj kod niestety nie dziala :)
      pokazuje sie boot error
      • 48: CommentAuthorxxl
      • CommentTime13 Feb 2019 20:02
       
      bo jest literowka. zamiast inx powinno byc iny a zamiast inx - iny. jak nizej

      asm {
      ldy filename
      ldx filename+1
      iny
      sne
      inx
      jmp xBIOS_LOAD_FILE
      };
      • 49: CommentAuthortebe
      • CommentTime13 Feb 2019 20:02 zmieniony
       
      txa
      pha

      ldy filename
      ldx filename+1
      iny
      sne
      inx
      jsr xBIOS_LOAD_FILE

      pla
      tax


      p.s.
      XXL nie chciałbyś poszerzyć grono odbiorców XBIOS-a tworząc odpowiedni UNIT dla Mad Pascala :) ?
      • 50: CommentAuthorxxl
      • CommentTime13 Feb 2019 21:02
       
      gdybym mial wskazywac wlasciwa i kompetentna osobe to bylby to Bocianu.