

        opt     l-
        icl     '..\include\atarihw.h'
        icl     '..\include\atarios.h'
        icl     'vbxe.asm'
        opt     l+

;scrolling w trybie 80-cio kolumnowym
LINE_WIDTH equ 80


        org     $8000

init    rts
        ini     init

        org     $8000

start
        .local

ptr1    equ     0x90
ptr2    equ     0x92


        ;kopiuj XDL i mapę koloru do pamięci VBXE
        ;adres (w VBXE) 0x00000, w ATARI 0x4000 (początek MEMAC_B_WINDOW)

        mva     #0x80 MB_CPU
        ldx     #xdl_end-xdl_address
        jeq     l4
l3      lda     xdl_load_address-1,x
        sta     xdl_address-1,x
        dex
        jne     l3
l4      mwa     #colormap ptr1
        ldx     #cmap_end-colormap
        jeq     l5
l6      txa
        pha
        lda     xdl_load_address+xdl_end-xdl_address-1,x
        sub     #"0"
        asl
        asl
        tax
        ldy     #0
        lda     cmap_data,x
        sta     (ptr1),y
        iny
        inx
        lda     cmap_data,x
        sta     (ptr1),y
        iny
        inx
        lda     cmap_data,x
        sta     (ptr1),y
        iny
        inx
        lda     cmap_data,x
        sta     (ptr1),y
        iny
        inx
        adw     ptr1 #4
        pla
        tax
        dex
        jne     l6
l5

        ;włącz wyświetlanie
        mva     #VC_XDL_ENABLED VIDEO_CONTROL
        mva     #0 MB_CPU

        .endl

        rts

cmap_data
        .byte   0, 0x0a, 0x94, 0
        .byte   0, 0x0a, 0xf4, 0
        .byte   0, 0x0a, 0x84, 0
        .byte   0, 0x0a, 0xc4, 0
        .byte   0, 0x0a, 0x34, 0
        .byte   0, 0x0a, 0x74, 0






;*** XDL ***

;XDL załaduje się do normalnej pamięci ATARI
;następnie zostanie skopiowane przy inicjalizacji programu do pamięci VBXE
;Korzystamy z bufora MEMAC_B
;dodatkowe założenie dla uproszczenia:
;wszystkie dane (XDL, ekran, fonty) dostępne
;są z banku nr 0 MEMAC_B
xdl_load_address equ *

        ;ładuj poza MEMAC_B ale asembluj pod adres MEMAC_B_WINDOW
        org     MEMAC_B_WINDOW,*

;ten adres wskażemy jako początek XDL w rejestrach XDL_ADR0,1,2
xdl_pointer equ *-MEMAC_B_WINDOW

;ten adres jest początkiem XDL widzianego przez okno MEMAC_B
xdl_address equ *

        ;XDLC
        ;24 puste linie od góry ekranu ...
        .word   XDLC_RPTL
        .byte   3*8-1

        ;XDLC
        ;włączam mapę koloru pokrywającą 192 linie
        ;jednocześnie jest to koniec XDL (XDLC_END)
        .word   XDLC_END + XDLC_RPTL + XDLC_MAPON + XDLC_MAPADR + XDLC_MAPPAR

        ;XDLC_RPTL
        ;razem 192 linie z mapą koloru
        .byte   191

        ;XDLC_MAPADR
        ;adres mapy koloru bezpośrednio za XDL w pamięci VBXE
        .long   colormap - MEMAC_B_WINDOW
        ;krok adresu mapy
        .word   20*4

        ;XDLC_MAPPAR
        .byte   0 ;hscroll mapy
        .byte   0 ;vscroll mapy
        .byte   15 ;szerokość pola 16 punktów
        .byte   15 ;wysokość pola 16 punktów

        ;koniec XDL
xdl_end equ *

        ;dane mapy koloru
        ;zostaną też przekopiowane do pamięci VBXE
colormap  equ *
        .byte   "44441111000022225555"
        .byte   "44411110000002222555"
        .byte   "44111100000000222255"
        .byte   "41111000000000022225"
        .byte   "11110000000000002222"
        .byte   "11100000000000000222"
        .byte   "11000000000000000022"
        .byte   "10000000033000000002"
        .byte   "00000000333300000000"
        .byte   "00000003333330000000"
        .byte   "00000033333333000000"
        .byte   "00000333333333300000"
cmap_end equ *
;---------------------------------------------------------------------

        run     start

        end
