;512KB VRAM (blitter) fill test

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

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

        .zpvar  ptr1 .word = 0x90

        org     0x2000

IClear
loop0   VFill   val
        jeq     iok
        Putl    #t1
        jmp     loop1
iok     Putl    #t2
loop1   inc     val
        jne     loop0
        rts

t1      .byte   'Fill ... Error',0x9b
t2      .byte   'Fill ... OK',0x9b
val     .byte   0

Putl    .proc (.word yx) .reg
        jsr     PUTLINE
        lda     #0
        rts
        .endp

VFill   .proc (.byte fv) .var
        ;ustaw bank 0 w MB
        mva     #0x80 MB_CPU
        ;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
        sta     BL_ADR0
        sta     BL_ADR1
        sta     BL_ADR2
        mva     #1 BLITTER_START
        ;czekam na zokończenie
        ;wypełniania pamięci
        lda     BLITTER_BUSY
        rne
        ;sprawdzam czy pamięć (512KB) prawidłowo
        ;wypełniona wartością fv
        ldy     #0
        ldx     #31
check0  txa
        ora     #0x80
        sta     MB_CPU
        mwa     #MEMAC_B_WINDOW ptr1
        lda     fv
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 *
        ;blist do wypełniania całego vram vbxe za jednym zamachem
        .long 0
        .word 0
        .long 0
        .word 512
        .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

        ini     IClear

        .endl

        end
        
