Aktualności Forum Graffiti Publicystyka Teleport
[#1] C2P na A500oraz 040 ... moze komus sie przyda
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


[#2] Re: C2P na A500oraz 040 ... moze komus sie przyda

@Deftronic/..., post #1

Jak w temacie. Moze komus sie przyda i napisze cos na A500 lub 040 .
Sorry, ze zamieszczam tutaj, ale nie bardzo mialem pomysl gdzie.


Mogłeś lepiej wrzucić to do działu Programowanie wraz z opisem co to w ogóle jest i co robi.

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?

Podeślij na adres redakcji albo do mnie.

Na stronie SCENA.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem