org     $40000
load    $40000

bS=     330*60

x:      move   #$4000,$DFF09A      ; Multitask uitzetten
        move.l #cop,$DFF084        ; Eigen Copperlist aanzetten
        bsr.s  InitC               ; Initialiseer de kleuren

Lus:    cmp.b  #$80,$DFF006        ; Op regel 80 wachten
        bne.s  Lus
        bsr    Muis                ; Muispositie opvragen
        bsr.s  SetAdr              ; Beeldscherm zetten
        btst   #6,$BFE001          ; Wachten op de muistoets
        bne.s  Lus
        rts

InitC:  lea    Pic+[5*BS],A0       ; Einde bitplanes berekenen
        lea    Col,A1
        move   #$180,D0            ; Eerste kleur
        moveq  #31,D7              ; Aantal kleuren
C1:     move   D0,(A1)+
        move   (A0)+,(A1)+
        addq   #2,D0
        dbf    D7,C1
        rts

Muis:   lea    $DFF00A,A0          ; Lees de tekst voor deze routine
        move   (A0),D0
        lea    OldM(pc),A1
        move   D0,D1
        lsr    #8,D1
        sub.b  (A1),D1
        ext    D1
        add    D1,-4(A1)
        sub.b  1(A1),D0
        ext    D0
        add    D0,-2(A1)
        move   (A0),(A1)
        rts

MuisY:  DC.w   0                   ; Y-positie van de muis
MuisX:  DC.w   0                   ; X-positie van de muis
OldM:   DC.w   0
even

SetAdr: move   MuisY(pc),D1        ; Grenzen bepalen
        bpl.s  Yok1
        moveq  #0,D1

Yok1:   cmp    #330-256,D1         ; Scherm is 330 hoog
        blo.s  Yok2
        move   #330-256,D1

Yok2:   move   D1,MuisY
        mulu   #60,D1              ; D1=Y*Bytes per regel
        move   MuisX(pc),D2
        bpl.s  Xok1
        moveq  #0,D2

Xok1:   cmp    #480-320,D2         ; Scherm is 480 breed
        blo.s  Xok2
        move   #480-320,D2

Xok2:   move   D2,MuisX
        add    #$F,D2              ; D2=X-15
        moveq  #-1,D3
        sub.b  D2,D3               ; D3=-1-(X+15)
        and.b  #$F,D3              ; D3=(-1-(X+15))&15 = BPLCON1
        move.b D3,Soft+3           ; Schuiven voor even-planes
        lsl    #4,D3
        or.b   D3,Soft+3           ; Schuiven voor oneven-planes
        lsr    #4,D2
        add    D2,D2
        add    D2,D1
        move.l #Pic-2,D0           ; Startadres van plane
        add.l  D1,D0
        lea    Adr+2(pc),A0        ; Adres in Copperlist schrijven
        moveq  #5-1,D7             ; Aantal bitplanes

Lus1:   move   D0,4(A0)            ; Low-word
        swap   D0
        move   D0,(A0)             ; High-word
        swap   D0
        add.l  #BS,D0              ; Lengte van een plane
        addq.l #8,A0
        dbf    D7,Lus1
        rts

cop:    DC.w   $8E,$3081,$90,$30C1,$92,$30,$94,$D0 ; Schermmaat
        DC.w   $108,20-2,$10A,20-2                 ; Modulo
        DC.w   $100,$5200                          ; Grafische mode
Soft:   DC.w   $102,0                              ; BPLCON1
Col:    BLK.l  32                                  ; Kleuren
Adr:    DC.w   $E0,,$E2,,$E4,,$E6,,$E8,,$EA,,$EC,,$EE,,$F0,,$F2,0
        DC.l   $FFFFFFFE

Even
Pic:    BLK.b  99100
Einde:  DC.l   0

;
; RI
; PIC5.RAW
; Pic
;
