; @com.wudsn.ide.asm.mainsourcefile=mixgraphicmodes.asm
;******************************************************************
                ORG $2000

                jsr main_init
                
main            nop
                jmp main

                icl "memory_map"

main_init       sei
                
                jsr disable_roms
                jsr disable_irq
                jsr setup_nmi
                jsr setup_dma
                jsr setup_colors
                jsr setup_dli
                jsr switch_vbi
                ;jsr fill_screen
                cli
                rts

fill_screen     lda #<SCREENA
                sta ad1
                lda #>SCREENA
                sta ad1+1
                lda #<SCREENB
                sta ad2
                lda #>SCREENB
                sta ad2+1
                ldx #96
fill_screen_2   ldy #39
fill_screen_1   lda RANDOM
                sta (ad1),y
                and #$0F
                sta (ad2),y
                dey
                bpl fill_screen_1
                clc
                lda ad1
                adc #40
                sta ad1
                lda ad1+1
                adc #0
                sta ad1+1
                lda ad2
                adc #40
                sta ad2
                lda ad2+1
                adc #0
                sta ad2+1
                
                dex
                bne fill_screen_2

                rts

disable_roms    lda PORTB
                and #%01111100
                ora #%10000010
                sta PORTB
                rts
                
disable_irq     lda #$00
                sta IRQEN
                rts
                
setup_nmi       lda <vbi_handler0
                sta vbi_handler_jmp+1
                lda >vbi_handler0
                sta vbi_handler_jmp+2
                
                lda #<nmi_handler
                sta NMI
                lda #>nmi_handler
                sta NMI+1
                lda #%11000000
                sta NMIEN
                rts
                
switch_vbi      lda <vbi_handler
                sta vbi_handler_jmp+1
                lda >vbi_handler
                sta vbi_handler_jmp+2
                rts
                
setup_dli       lda #<DLIST
                sta DLISTL
                lda #>DLIST
                sta DLISTH
                rts
                
setup_colors    MVA #color_Black COLBK
                MVA #18 COLPF0
                MVA #14 COLPF1    ;PAPER
                MVA #4 COLPF2
                MVA #32 COLPF3
                MVA #0 COLPM0
                MVA #2 COLPM1
                MVA #20 COLPM2
                MVA #24 COLPM3
                rts

setup_dma       lda #%00110010 ;DListEnable+OneLinePMResolution+PMEnable+Wide
                sta DMACTL
                lda #0
                sta CHACTL
                lda #%111
                sta GRACTL
                rts

;INTERUPTS
nmi_handler     bit NMIST
                bpl nmi_not_dli 
                bmi dli_handler
nmi_not_vbi     lda #%00100000
                bit NMIST
                bne nmi_not_reset
                sta nmires
                rti
nmi_not_reset   pla
                rti
nmi_not_dli     pha
                bvc nmi_not_vbi
                txa
                pha
                tya
                pha
                sta NMIRES
vbi_handler_jmp jmp vbi_handler

dli_handler     pha
                txa
                pha
                tya
                pha
                lda #96
                sta POM

dli_handler_1   lda #0
                ldy #%00000100
                sta WSYNC
                sta COLBK
                sty GPRIOR
                
                lda #170
                ldy #%10000100
                sta WSYNC
                sta COLBK
                sty GPRIOR
                dec POM
                bne dli_handler_1
 
                pla
                tay
                pla
                tax                
                pla
                rti
                
vbi_handler0    pla
                tay
                pla
                tax
                pla
                rti

vbi_handler      LDA DLIST
                 EOR #%00010000
                 STA DLIST

                pla
                tay
                pla
                tax
                pla
                rti

;*** DISPLAY LIST

                ORG DLISTSTART
DLIST           DTA BLANK8,BLANK8,BLANK8+DLI
DLIST_SCREEN
                DTA LMS+MODEE,a(SCREENA),MODEF
:47             DTA MODEE,MODEF
                DTA LMS+MODEE,a(SCREENB),MODEF
:47             DTA MODEE,MODEF

                DTA DLIJUMPEND,a(DLIST) ;temporary until dynamic dli is finished.

                ORG SCREENA
                ins "raw_image.bin"