atarionline.pl Blitowanie VBXE i MAD Pascal - 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: CommentAuthorVagant
      • CommentTime31 May 2026 16:19 (55 minut temu) zmieniony
       
      Chciałbym pobawić się trochę w VBXE Mad Pascalem i próbuję zrobić prosty przykład, który skopiuje kawałek ekranu z jednego miejsca do innego i nie bardzo mi to działa. Podglądam różne przykłady ale one zwykle nie są takei proste.

      Co źle tu robię?

      program Blit;

      uses
      crt, vbxe;

      const
      ScreenWidth = 320;
      ScreenHeight = 192;

      var
      BCB : TBCB;
      src, dst: cardinal;

      procedure DrawTestPattern;
      var x, y: integer;
      begin
      vbxe.setcolor(Red);
      for y := 0 to 63 do
      for x := 0 to 63 do
      vbxe.PutPixel(x, y);
      end;


      procedure BlitBlock;
      begin
      FillByte(BCB, SizeOf(BCB), 0);

      src := VBXE_OVRADR;

      BCB.src_adr.byte0 := src;
      BCB.src_adr.byte1 := src shr 8;
      BCB.src_adr.byte2 := src shr 16;

      dst := VBXE_OVRADR + (120 * ScreenWidth) + 120;

      BCB.dst_adr.byte0 := dst;
      BCB.dst_adr.byte1 := dst shr 8;
      BCB.dst_adr.byte2 := dst shr 16;

      BCB.src_step_x := 1;
      BCB.dst_step_x := 1;

      BCB.src_step_y := ScreenWidth;
      BCB.dst_step_y := ScreenWidth;

      BCB.blt_width := 63;
      BCB.blt_height := 63;


      BCB.blt_and_mask := $FF;
      BCB.blt_xor_mask := 0;
      BCB.blt_collision_mask := 0;
      BCB.blt_zoom := 0;
      BCB.pattern_feature := 0;

      BCB.blt_control := 0;

      RunBCB(BCB);

      while BlitterBusy do;
      end;



      begin

      VBXEMode(VBXE.VGAmed, 0);

      DrawTestPattern;

      BlitBlock;

      ReadKey;
      end.
      • 2: CommentAuthortebe
      • CommentTime31 May 2026 16:53 (21 minut temu) zmieniony
       
      musisz włączyć okno umożliwiające dostęp do pamięci VBXE (przed modyfikacją BCB)

      włącz
      asm
      fxs FX_MEMS #$80
      end;


      wyłącz
      asm
      fxs FX_MEMS #$00
      end;
      • 3: CommentAuthortebe
      • CommentTime31 May 2026 17:02 (12 minut temu)
       
      w tym przykładzie

      ->link<-

      ten fragment włącza okno z dostępem do pamięci VBXE
      vram.position:=VBXE_BCBADR;
      vram.SetBank;


      i tak zostawia

      informacja o oknie VBXE w Mad Pascal jest w pliki 'systemh_atari.inc'
      VBXE_XDLADR = $0000;		// XDLIST
      VBXE_BCBTMP = $00E0; // BLITTER TEMP
      VBXE_BCBADR = $0100; // BLITTER LIST ADDRESS
      VBXE_MAPADR = $1000; // COLOR MAP ADDRESS (row = 256b default)
      VBXE_CHBASE = $1000; // CHARSET BASE ADDRESS
      VBXE_OVRADR = $5000; // OVERLAY ADDRESS
      VBXE_WINDOW = $B000; // 4K WINDOW $B000..$BFFF
      • 4: CommentAuthortebe
      • CommentTime31 May 2026 17:05 (9 minut temu)
       
      Arkanoid-VBXE jest lepszym przykładem, bo włącza/wyłącza okno VBXE zależnie od potrzeb

      ->link<-

      procedure blitZERO(src: cardinal; w : word; h: byte); register;
      {
      dst = vram
      }
      begin

      asm
      fxs FX_MEMS #$80
      end;

      blt_zero.src_adr.byte2:=src shr 16;
      blt_zero.src_adr.byte1:=src shr 8;
      blt_zero.src_adr.byte0:=src;

      blt_zero.dst_adr.byte1:=hlp shr 8;
      blt_zero.dst_adr.byte0:=hlp;

      blt_zero.src_step_y:=w;

      blt_zero.blt_height:=h-1;

      blt_zero.blt_width:=w-1;

      asm
      fxs FX_MEMS #$00
      end;

      RunBCB(blt_zero);
      while BlitterBusy do;

      end;