;512KB VRAM (blitter) fill test

        opt     l-
        icl     'atarihw.ah'
        icl     'atarios.ah'
        icl     'vbxefx.asm'
        opt     l+

;-------------------------------------------------------
;INIT
        .local

        .zpvar  ptr1 .word

        org     0x2000

IClear
        DetectCore
        seq
        rts

        fxs     #0 FX_MEMC

loop0   VFill   val
        jeq     iok
        putli   'Fill ... Error'
        jmp     loop1
iok     putli   'Fill ... OK'
loop1   inc     val
        jne     loop0
        fxs     #0 FX_MEMB
        rts

val     .byte   0

VFill   .proc (.byte fv) .var
        ;ustaw bank 0 w MB
        fxs     #MBCE FX_MEMB
        ;kopiuj blist do vbxe
        ;na sam początek pamięci vram
        ldy     #local_blist_end-local_blist-1
copy    lda     local_blist,y
        sta     MEMAC_B_WINDOW,y
        dey
        jpl     copy
        ;wskaż blitterowi adres blitterlist
        lda     #0
        fxsa    FX_BL_ADR0
        fxsa    FX_BL_ADR1
        fxsa    FX_BL_ADR2
        fxs     #1 FX_BLITTER_START
        ;czekam na zokończenie
        ;wypełniania pamięci
bwait   fxla    FX_BLITTER_BUSY
        jne bwait
        ;sprawdzam czy pamięć (512KB) prawidłowo
        ;wypełniona wartością fv
        ldx     #31
check0  txa
        ora     #MBCE
        fxsa    FX_MEMB
        mwa     #MEMAC_B_WINDOW ptr1
        lda     fv
        ldy     #0
check1  cmp     (ptr1),y
        jne     err
        iny
        jne     check1
        inc     ptr1+1
        jpl     check1
        dex
        bpl     check0
        lda     #0
        rts
err     lda     #1
        rts

local_blist equ *
        ;BCB do wypełniania całego vram vbxe za jednym zamachem
        .long 0
        .word 0
        .byte 0
        .long 0
        .word 512
        .byte 1
        .word 511
        .byte 255
        .byte 0         ;AND mask
fv      .byte 0         ;XOR mask
        .byte 0         ;collision mask
        .byte (3<<4)    ;zoom XY
        .byte 0         ;pattern feature
        .byte 0         ;control - MODE 0, end
local_blist_end equ *
        .endp

        run     IClear

        .endl

        end
        
