pouët.net

Go to bottom

Authentic World of Commodore colors by Loonies [web]

;; Authentic World of Commodore colors
;; A 256-byte tribute to a classic Amiga demo
;; by Blueberry / Loonies
;;
;; Copper overlay trick inspired by
;; 64-byte intros by Photon / Scoopex
;;
;; Requires an Amiga 500 with kickstart 1.3
;;
;; Released at Riverwash 2011
;; Copyright 2011 Aske Simon Christensen
;; Redistributable according to CC-BY-NC

; 0 to test
; 1 to write executable
; then change $37 into $5e at offset $17
EXPORT  =       0

        section intro,code_c

        ifeq    EXPORT
Test:
        move.w  $dff002,d0
        move.w  $dff01c,d1
        move.l  4.w,a6  ; exec
        move.l  (a6),a6 ; expansion
        move.l  (a6),a6 ; graphics
        move.l  38(a6),d2
        movem.l d0-d2,-(a7)
        lea.l   Intro-4,a3
        moveq.l #1,d0
        jmp     4(a3)

TestExit:
        movem.l (a7)+,d0-d2
        move.l  d2,$dff080
        or.w    #$8200,d0
        or.w    #$c000,d1
        move.w  #$7fff,$dff096
        move.w  #$c000,$dff09a
        move.w  d0,$dff096
        move.w  d1,$dff09a
        rts

        ds.b    25000
        dc.l    $180    ; section size
        dc.l    0
        endc

TEXTHEIGHT      =       112
CENTER          =       136

Intro:
        dc.w    $0182
        bra.b   .entry  ; WoC blue
        dc.l    $00960020
        dc.l    $01001200
        dc.w    $00e0
.entry:
        move.l  a3,a2   ; $244B
        moveq.l #$e2-256,d6
        moveq.l #40,d7  ; $7E28
        moveq.l #$9a-256,d1
        lea.l   $dff040,a6
        move.w  -(a2),(a3)
        move.l  a3,$080-$040(a6)

.textbase:
        lea.l   $fc0034,a0      ; Scrolltext
.tloop:
        moveq.l #8-1,d4
.bloop: lea.l   $fc9134-32,a5   ; Topaz
        add.w   d0,a5
.lloop: cmp.b   d7,d0
        blt.b   .skip
        btst.b  d4,(a5)
        sne.b   d3
        lsl.w   #1,d3
.skip:  lea.l   192(a5),a5
        ror.w   #2,d1
        bmi.b   .lloop

        lsr.w   #8,d3
        move.b  d3,-(a3)
        subq.l  #1,d4
        bge.b   .bloop
        move.b  (a0)+,d0
        bne.b   .tloop

        subq.b  #4,d6
        bmi.b   .textbase

        move.w  #$4E75,d5       ; rts
        move.w  d5,-(a3)
        moveq.l #-67,d3
.frame:
        lea.l   $37E28-320*TEXTHEIGHT/8,a5
.frame_loop:
        moveq.l #56,d6
        bset.l  d6,d0   ; Bit 24 = D enable
        movem.l d0/d4/d5/a0/a4/a5,(a6)
;       move.l  d0,$040-$040(a6); Blitter control
;       move.l  d4,$044-$040(a6); First/last word mask
;       move.l  d5,$048-$040(a6); Dummy
;       move.l  a0,$04c-$040(a6); B Ptr
;       move.l  a4,$050-$040(a6); A Ptr
;       move.l  a5,$054-$040(a6); D Ptr
        movem.l d0/d1,$060-$040(a6)
;       move.l  d0,$060-$040(a6); Dummy / B Modulo
;       move.l  d1,$064-$040(a6); A Modulo / D Modulo
        move.w  #((CENTER+TEXTHEIGHT/2+1)<<6)+20,$058-$040(a6)

        moveq.l #(40-1)*2,D4
.wait:
        btst.b  d4,$002-$040(a6)        ; Bit 6 = Blitter Busy
        bne.b   .wait

        eor.l   #$0d3c0000,d0
        beq.b   .frame

;       move.w  #$050,$dff180

        move.l  a3,a4
        moveq.l #9,d1
.pos:   move.l  d1,d2
        subq.w  #4,d2
        swap.w  d2
        divs.w  d5,d2
        add.w   d6,d2
        muls.w  d7,d2
        move.w  d2,-(a4)
        move.w  #$8D2D,-(a4)    ;or.b   d6,x(a5)
        move.l  #$D2416804,-(a4);add.w  d1,d1
                                ;bvc.b  *+4
        subq.l  #1,d1
        bgt.b   .pos

.byte:  moveq.l #-$80,d6
.bit:   
        swap.w  d2
        move.b  (a2,d2.w),d1
        swap.w  d2
        sub.l   d5,d2
        lsl.w   #7,d1

        jsr     (a4)
;       add.w   d1,d1
;       bvc.b   .nop
;       or.b    d6,0(a5)
;.nop:
        lsr.b   #1,d6
        bne.b   .bit
        addq.l  #1,a5
        subq.l  #2,d4
        bge.b   .byte

        add.w   d3,d5
        tst.b   d5
        bne.b   .notflip
        neg.w   d3
.notflip:
        subq.l  #1,a2

;       move.w  #$010,$dff180

.vsync:
        tst.b   $006-$040(a6)
        bne.b   .vsync

        move.l  a5,a0
        lea.l   320*(CENTER+TEXTHEIGHT/2)/8(a5),a5
        lea.l   -40(a5),a4

        ifeq    EXPORT
        btst.b  #6,$bfe001
        bne.w   .frame_loop
        jmp     TestExit
        else
        bra.b   .frame_loop
        endc

IntroEnd:

        if      EXPORT
        printv  IntroEnd-Intro
        else
        printv  IntroEnd-Intro-16
        endc
Go to top