Jak w temacie. Moze komus sie przyda i napisze cos na A500 lub 040 :).
Sorry, ze zamieszczam tutaj, ale nie bardzo mialem pomysl gdzie.
Mam tez pare archiwalnych wywiadow, nigdzie nie publikowanych z DALTHO'nem/Joker, Tom'em i Python'em, PROBE/VD, Miklesz'em/DAMAGE i OSTER'em/DXP. Gdzie ewentalnie moglbym je wrzucic?
C2P:
;Chunky to plannar converter.
;1x1 pixels version, 8 bitplanes
;optimised for 68040+ (pipelined chip-ram writes)
;coded by OSTER/DiNX Project - 06/96
;a0-first plane
;a6-chunky data
MIX macro
;1 reg1,2 reg2,3 tem1,4 tem2,5 mask,6 shift
rol.l #6,1
move.l 5,3
move.l 3,4
and.l 1,3
and.l 2,4
eor.l 3,1
eor.l 4,2
or.l 4,1
or.l 3,2
ror.l #6,1
endm
MASK1 = %11111111111111110000000000000000
MASK2 = %11111111000000001111111100000000
MASK3 = %11110000111100001111000011110000
MASK4 = %11001100110011001100110011001100
MASK5 = %10101010101010101010101010101010
RSRESET
p0 rs.l 1
p1 rs.l 1
p2 rs.l 1
p3 rs.l 1
p4 rs.l 1
p5 rs.l 1
p6 rs.l 1
p7 rs.l 1
p_sizeof rs.w 1
linesize = 40
move.l a6,a5
add.l #320*256,a5
lea temp_planes(pc),a4
move.l #10,a1
bra.w C2P_start_pipeline
;a0-plane0
;a6-chunky pixels
;chunky data is converted after 5 mixing operations.
cnop 0,4
C2P_start_pipeline
move.l (a6),d0
move.w 16(a6),d0
move.l 8(a6),d2
move.w 24(a6),d2
MIX d0,d2,d5,d7,#mask2,8 ;mask2
move.l 4(a6),d1
move.w 20(a6),d1
move.l 12(a6),d3
move.w 28(a6),d3
MIX d1,d3,d5,d7,#mask2,8 ;mask2
move.l 2(a6),d4
MIX d0,d1,d5,d7,#mask3,4 ;mask3
move.w 18(a6),d4
MIX d2,d3,d5,d7,#mask3,4 ;mask3
move.l 10(a6),d6
move.w 26(a6),d6
MIX d4,d6,d5,d7,#mask2,8 ;mask2
move.l d2,a2
move.l 6(a6),d2
move.w 22(a6),d2
move.l d3,a3
move.l 14(a6),d3
move.w 30(a6),d3
MIX d2,d3,d5,d7,#mask2,8 ;mask2
add.w #32,a6
MIX d4,d2,d5,d7,#mask3,4 ;mask3
MIX d6,d3,d5,d7,#mask3,4 ;mask3
MIX d0,d4,d5,d7,#mask4,2 ;mask4
MIX d1,d2,d5,d7,#mask4,2 ;mask4
exg.l a2,d1
MIX d1,d6,d5,d7,#mask4,2 ;mask4
exg.l a3,d2
MIX d2,d3,d5,d7,#mask4,2 ;mask4
MIX d0,d1,d5,d7,#mask5,1 ;mask5
move.l d0,p7(a4) ;bpl7 inserted
move.l d1,p6(a4) ;bpl6 inserted
MIX d4,d6,d5,d7,#mask5,1 ;mask5
move.l d4,p5(a4) ;bpl5 inserted
move.l a2,d5
move.l d6,p4(a4) ;bpl4 inserted
MIX d5,d2,d0,d1,#mask5,1 ;mask5
move.l d5,p3(a4) ;bpl3 inserted
move.l a3,d7
move.l d2,p2(a4) ;bpl2 inserted
MIX d7,d3,d0,d1,#mask5,1 ;mask5
move.l d7,p1(a4) ;bpl1 inserted
move.l d3,(a4) ;bpl0 inserted
c2p_pipeline
move.l (a6),d0
move.w 16(a6),d0
move.l 8(a6),d2
move.w 24(a6),d2
MIX d0,d2,d5,d7,#mask2,8 ;mask2
move.l 4(a6),d1
move.w 20(a6),d1
move.l 12(a6),d3
move.w 28(a6),d3
MIX d1,d3,d5,d7,#mask2,8 ;mask2
move.l p7(a4),7*linesize(a0)
MIX d0,d1,d5,d7,#mask3,4 ;mask3
move.l 2(a6),d4
move.w 18(a6),d4
MIX d2,d3,d5,d7,#mask3,4 ;mask3
move.l 10(a6),d6
move.w 26(a6),d6
MIX d4,d6,d5,d7,#mask2,8 ;mask2
move.l d2,a2
move.l 6(a6),d2
move.w 22(a6),d2
move.l d3,a3
move.l 14(a6),d3
move.w 30(a6),d3
MIX d2,d3,d5,d7,#mask2,8 ;mask2
add.w #32,a6
move.l p6(a4),6*linesize(a0)
MIX d4,d2,d5,d7,#mask3,4 ;mask3
move.l p5(a4),5*linesize(a0)
MIX d6,d3,d5,d7,#mask3,4 ;mask3
move.l p4(a4),4*linesize(a0)
MIX d0,d4,d5,d7,#mask4,2 ;mask4
move.l p1(a4),1*linesize(a0)
MIX d1,d2,d5,d7,#mask4,2 ;mask4
move.l p3(a4),3*linesize(a0)
exg.l a2,d1
MIX d1,d6,d5,d7,#mask4,2 ;mask4
move.l p2(a4),2*linesize(a0)
exg.l a3,d2
MIX d2,d3,d5,d7,#mask4,2 ;mask4
move.l (a4),(a0)+
MIX d0,d1,d5,d7,#mask5,1 ;mask5
move.l d0,p7(a4) ;bpl7 inserted
move.l d1,p6(a4) ;bpl6 inserted
MIX d4,d6,d5,d7,#mask5,1 ;mask5
move.l d4,p5(a4) ;bpl5 inserted
move.l a2,d5
move.l d6,p4(a4) ;bpl4 inserted
MIX d5,d2,d0,d1,#mask5,1 ;mask5
move.l d5,p3(a4) ;bpl3 inserted
move.l a3,d7
move.l d2,p2(a4) ;bpl2 inserted
MIX d7,d3,d0,d1,#mask5,1 ;mask5
move.l d7,p1(a4) ;bpl1 inserted
move.l d3,(a4) ;bpl0 inserted
subq.l #1,a1
move.l a1,d0
bne.w C2P_pipeline
move.l #10,a1
add.w #7*linesize,a0
cmp.l a5,a6
blt.w C2P_pipeline
; move.l p7(a4),7*linesize(a0)
; move.l p6(a4),6*linesize(a0)
; move.l p5(a4),5*linesize(a0)
; move.l p4(a4),4*linesize(a0)
; move.l p3(a4),3*linesize(a0)
; move.l p2(a4),2*linesize(a0)
; move.l p1(a4),1*linesize(a0)
; move.l (a4),(a0)
rts
cnop 0,4
TEMP_PLANES ds.b p_sizeof
;Fast Chunky to plannar algorithm.
;CPU version 1.1 (dithered !!!)
;4 bitplanes only.
;39 cycles per pixel on MC68000.
;Coded in 1995 by OSTER/SAF
;It's ideal for grayscales.Dithers 64 colors chunky data into 4 bitplanes
;Uses 2x2 cluster-dot dithering.Dithering is faster than 6 or 8 bpl chunky
;to plannar converter.
;8 or 6 bpl converters always took about 60 cycles per pixel.
;My - 38 cycles per pixel and results are great.
;disadvantage : grayscale is not 0-63 , it's 0-60 (very important !)
;You can change dithering matrix.
; I1 | I2
; -------
; I3 | I4
I1 = 3 ;
I2 = 2 ;
I3 = 1 ; / (0 to 3) values only, no repeats
I4 = 0 ;/
MASK1 = ($01000100*I1)!($00010001*I2)
MASK2 = ($01000100*I3)!($00010001*I4)
CTP:
;a0,a1,a2,a3 - planes
;a4 - chunky buffer (long or better aligned)
CTP_width = 320 ;must be multiple of 16
CTP_Height = 256 ;mus be even
move.l #$ff0000ff,d5 ;const (bit mask 1)
move.l #$cccccccc,d6 ;const (bit mask 2)
move.l #$aaaaaaaa,d7 ;const (bit mask 3)
move.l a0,a5
add.l #(CTP_width/8)*CTP_height,a5 ;end of plane 0
jmp CTP_inner
cnop 0,4
CTP_inner
REPT CTP_width/16
movem.l (a4)+,d0/d1/d2/d3 ;44
move.l #MASK1,d4
add.l d4,d0
add.l d4,d1
add.l d4,d2
add.l d4,d3
lsr.l #2,d0
lsr.l #2,d1
lsr.l #2,d2
lsr.l #2,d3
move.l #$0f0f0f0f,d4
and.l d4,d0
and.l d4,d1
and.l d4,d2
and.l d4,d3
rol.l #4,d0 ;16
rol.l #4,d2 ;16
or.l d1,d0 ;8
or.l d3,d2 ;8
swap d2 ;4
move.w d0,d4 ;4
move.w d2,d0 ;4
move.w d4,d2 ;4
swap d2 ;4
move.l d0,d1 ;4
move.l d2,d3 ;4
and.l d5,d0 ;8
and.l d5,d2 ;8
eor.l d0,d1 ;8
eor.l d2,d3 ;8
ror.l #8,d1 ;24
ror.l #8,d3 ;24
move.w d1,d4 ;4
and.w d5,d1 ;4
eor.w d1,d4 ;4
or.w d4,d0 ;4
swap d0 ;4
or.w d1,d0 ;4
swap d0 ;4
move.w d3,d4 ;4
and.w d5,d3 ;4
eor.w d3,d4 ;4
or.w d4,d2 ;4
swap d2 ;4
or.w d3,d2 ;4
swap d2 ;4
ror.l #2,d2 ;12
move.l d0,d1 ;4
move.l d2,d3 ;4
and.l d6,d0 ;8
and.l d6,d2 ;8
eor.l d0,d1 ;8
eor.l d2,d3 ;8
or.l d3,d0 ;8
or.l d1,d2 ;8
rol.l #2,d2 ;12
swap d2 ;4
move.w d0,d4 ;4
move.w d2,d0 ;4
move.w d4,d2 ;4
swap d2 ;4
ror.l #1,d2 ;10
move.l d0,d1 ;4
move.l d2,d3 ;4
and.l d7,d0 ;8
and.l d7,d2 ;8
eor.l d0,d1 ;8
eor.l d2,d3 ;8
or.l d3,d0 ;8
or.l d1,d2 ;8
rol.l #1,d2 ;10
move.w d2,(a0)+ ;8
move.w d0,(a1)+ ;8
swap d0 ;4
swap d2 ;4
move.w d2,(a2)+ ;8
move.w d0,(a3)+ ;8
ENDR
REPT CTP_width/16
movem.l (a4)+,d0/d1/d2/d3 ;44
move.l #MASK2,d4
add.l d4,d0
add.l d4,d1
add.l d4,d2
add.l d4,d3
lsr.l #2,d0
lsr.l #2,d1
lsr.l #2,d2
lsr.l #2,d3
move.l #$0f0f0f0f,d4
and.l d4,d0
and.l d4,d1
and.l d4,d2
and.l d4,d3
rol.l #4,d0 ;16
rol.l #4,d2 ;16
or.l d1,d0 ;8
or.l d3,d2 ;8
swap d2 ;4
move.w d0,d4 ;4
move.w d2,d0 ;4
move.w d4,d2 ;4
swap d2 ;4
move.l d0,d1 ;4
move.l d2,d3 ;4
and.l d5,d0 ;8
and.l d5,d2 ;8
eor.l d0,d1 ;8
eor.l d2,d3 ;8
ror.l #8,d1 ;24
ror.l #8,d3 ;24
move.w d1,d4 ;4
and.w d5,d1 ;4
eor.w d1,d4 ;4
or.w d4,d0 ;4
swap d0 ;4
or.w d1,d0 ;4
swap d0 ;4
move.w d3,d4 ;4
and.w d5,d3 ;4
eor.w d3,d4 ;4
or.w d4,d2 ;4
swap d2 ;4
or.w d3,d2 ;4
swap d2 ;4
ror.l #2,d2 ;12
move.l d0,d1 ;4
move.l d2,d3 ;4
and.l d6,d0 ;8
and.l d6,d2 ;8
eor.l d0,d1 ;8
eor.l d2,d3 ;8
or.l d3,d0 ;8
or.l d1,d2 ;8
rol.l #2,d2 ;12
swap d2 ;4
move.w d0,d4 ;4
move.w d2,d0 ;4
move.w d4,d2 ;4
swap d2 ;4
ror.l #1,d2 ;10
move.l d0,d1 ;4
move.l d2,d3 ;4
and.l d7,d0 ;8
and.l d7,d2 ;8
eor.l d0,d1 ;8
eor.l d2,d3 ;8
or.l d3,d0 ;8
or.l d1,d2 ;8
rol.l #1,d2 ;10
move.w d2,(a0)+ ;8
move.w d0,(a1)+ ;8
swap d0 ;4
swap d2 ;4
move.w d2,(a2)+ ;8
move.w d0,(a3)+ ;8
ENDR
cmp.l a0,a5
bgt.w CTP_inner
rts