home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 55
/
Amiga_Dream_55.iso
/
RISCOS
/
MAGAZINE
/
NEWS
/
3DENGI.ZIP
/
3DEngine
/
!PlotLib
/
src
/
s
/
plotter8
< prev
Wrap
Text File
|
1998-08-11
|
17KB
|
1,014 lines
AREA |C$$code|, CODE, READONLY
EXPORT PlotterFcore8
EXPORT PlotterFGcore8
EXPORT PlotterFAcore8
EXPORT PlotterFAGcore8
EXPORT PlotterTcore8
EXPORT PlotterTGcore8
EXPORT PlotterTAcore8
EXPORT PlotterTAGcore8
EXPORT PlotterTTcore8
EXPORT PlotterTTGcore8
EXPORT PlotterTTAcore8
EXPORT PlotterTTAGcore8
;EXPORT Screen_Clear
PlotterFcore8
; r0 = int temp
; r1 = int c
; r2 = char *tpos
pfclp
STRB r1,[r2],#1
SUBS r0,r0,#1
BGE pfclp
MOVS PC,R14
PlotterTcore8
; r0 = int su
; r1 = int sv
; r2 = int sdu
; r3 = int sdv
MOV r12,r13
STMFD r13!,{r4-r7,r14}
LDMFD r12,{r4,r5,r12,r14}
; r4 = int temp
; r5 = int rowbytes
; r12= ptemp
; r14= tpos
ptclp
MOV r6,r1,ASR#16
MOV r7,r0,ASR#16
MLA r6,r5,r6,r7
ADD r0,r0,r2
LDRB r6,[r12,r6]
ADD r1,r1,r3
STRB r6,[r14],#1
SUBS r4,r4,#1
BGE ptclp
LDMFD r13!,{r4-r7,PC}^
PlotterFAcore8
; r0 = int temp
; r1 = int c
; r2 = int alpha
; r3 = char *tpos
STMFD r13!,{r4-r6,r14}
ADR r14,alphatab+12*4
ADR r12,alphatab+17
MOV r2,r2,LSR#11
LDRB r5,[r3]
LDR r1,[r14,r1,LSL#2] ; r1 = a = (B<<20)|(G<<10)|(R)
LDR r5,[r14,r5,LSL#2] ; r10= b = (b<<20)|(g<<10)|(r)
pfaclp
SUB r6,r1,r5 ; r7 = a-b
MUL r4,r6,r2 ; r7 = (a-b)*alpha
; Stall
ADD r4,r4,r5,LSL#5 ; r8 = (a-b)*alpha + 32*b
LDRB r6,[r14,-r4,LSR#25]
ANDS r5,r4,#15<<15
LDRNEB r5,[r12,r5,LSR#15]
ANDS r4,r4,#15<<5
LDRNEB r4,[r12,-r4,LSR#5]
ORR r6,r6,r5
ORR r4,r4,r6
STRB r4,[r3],#1
LDRB r5,[r3]
SUBS r0,r0,#1
LDRGE r5,[r14,r5,LSL#2] ; r10= b = (b<<20)|(g<<10)|(r)
BGE pfaclp
LDMFD r13!,{r4-r6,PC}^
PlotterTAcore8
; r0 = int su
; r1 = int sv
; r2 = int sdu
; r3 = int sdv
MOV r12,r13
STMFD r13!,{r4-r11,r14}
LDMFD r12,{r4,r5,r6,r12,r14}
; r4 = int temp
; r5 = int rowbytes
; r6 = int alpha
; r12= ptemp
; r14= tpos
MOV r6,r6,LSR#11
ADR r9,alphatab+12*4
ptaclp
MOV r8,r1,ASR#16
MOV r7,r0,ASR#16
MLA r8,r5,r8,r7
ADD r0,r0,r2
LDRB r8,[r12,r8]
LDRB r10,[r14]
LDR r8,[r9,r8,LSL#2] ; r8 = a = (B<<20)|(G<<10)|(R)
LDR r10,[r9,r10,LSL#2] ; r10= b = (b<<20)|(g<<10)|(r)
ADD r1,r1,r3
SUB r8,r8,r10 ; r8 = a-b
MUL r11,r8,r6 ; r8 = (a-b)*alpha
ADR r8,alphatab+17
ADD r11,r11,r10,LSL#5 ; r8 = (a-b)*alpha + 32*b
LDRB r7,[r9,-r11,LSR#25]
ANDS r10,r11,#15<<15
LDRNEB r10,[r8,r10,LSR#15]
ANDS r11,r11,#15<<5
LDRNEB r11,[r8,-r11,LSR#5]
ORR r7,r7,r10
ORR r11,r11,r7
STRB r11,[r14],#1
SUBS r4,r4,#1
BGE ptaclp
LDMFD r13!,{r4-r11,PC}^
alphatab
DCD &16170000
DCD &12131415
DCD &06071011
DCD &02030405
DCD &02010001
DCD &22212003
DCD &42414023
DCD &62616043
DCD &898A8B63
DCD &81828388
DCD &090A0B80
DCD &01020308
DCD &00000000
DCD &00100401
DCD &00200802
DCD &00300C03
DCD &00000004
DCD &00100405
DCD &00200806
DCD &00300C07
DCD &00400000
DCD &00500401
DCD &00600802
DCD &00700C03
DCD &00400004
DCD &00500405
DCD &00600806
DCD &00700C07
DCD &00000008
DCD &00100409
DCD &0020080A
DCD &00300C0B
DCD &0000000C
DCD &0010040D
DCD &0020080E
DCD &00300C0F
DCD &00400008
DCD &00500409
DCD &0060080A
DCD &00700C0B
DCD &0040000C
DCD &0050040D
DCD &0060080E
DCD &00700C0F
DCD &00001000
DCD &00101401
DCD &00201802
DCD &00301C03
DCD &00001004
DCD &00101405
DCD &00201806
DCD &00301C07
DCD &00401000
DCD &00501401
DCD &00601802
DCD &00701C03
DCD &00401004
DCD &00501405
DCD &00601806
DCD &00701C07
DCD &00001008
DCD &00101409
DCD &0020180A
DCD &00301C0B
DCD &0000100C
DCD &0010140D
DCD &0020180E
DCD &00301C0F
DCD &00401008
DCD &00501409
DCD &0060180A
DCD &00701C0B
DCD &0040100C
DCD &0050140D
DCD &0060180E
DCD &00701C0F
DCD &00002000
DCD &00102401
DCD &00202802
DCD &00302C03
DCD &00002004
DCD &00102405
DCD &00202806
DCD &00302C07
DCD &00402000
DCD &00502401
DCD &00602802
DCD &00702C03
DCD &00402004
DCD &00502405
DCD &00602806
DCD &00702C07
DCD &00002008
DCD &00102409
DCD &0020280A
DCD &00302C0B
DCD &0000200C
DCD &0010240D
DCD &0020280E
DCD &00302C0F
DCD &00402008
DCD &00502409
DCD &0060280A
DCD &00702C0B
DCD &0040200C
DCD &0050240D
DCD &0060280E
DCD &00702C0F
DCD &00003000
DCD &00103401
DCD &00203802
DCD &00303C03
DCD &00003004
DCD &00103405
DCD &00203806
DCD &00303C07
DCD &00403000
DCD &00503401
DCD &00603802
DCD &00703C03
DCD &00403004
DCD &00503405
DCD &00603806
DCD &00703C07
DCD &00003008
DCD &00103409
DCD &0020380A
DCD &00303C0B
DCD &0000300C
DCD &0010340D
DCD &0020380E
DCD &00303C0F
DCD &00403008
DCD &00503409
DCD &0060380A
DCD &00703C0B
DCD &0040300C
DCD &0050340D
DCD &0060380E
DCD &00703C0F
DCD &00800000
DCD &00900401
DCD &00A00802
DCD &00B00C03
DCD &00800004
DCD &00900405
DCD &00A00806
DCD &00B00C07
DCD &00C00000
DCD &00D00401
DCD &00E00802
DCD &00F00C03
DCD &00C00004
DCD &00D00405
DCD &00E00806
DCD &00F00C07
DCD &00800008
DCD &00900409
DCD &00A0080A
DCD &00B00C0B
DCD &0080000C
DCD &0090040D
DCD &00A0080E
DCD &00B00C0F
DCD &00C00008
DCD &00D00409
DCD &00E0080A
DCD &00F00C0B
DCD &00C0000C
DCD &00D0040D
DCD &00E0080E
DCD &00F00C0F
DCD &00801000
DCD &00901401
DCD &00A01802
DCD &00B01C03
DCD &00801004
DCD &00901405
DCD &00A01806
DCD &00B01C07
DCD &00C01000
DCD &00D01401
DCD &00E01802
DCD &00F01C03
DCD &00C01004
DCD &00D01405
DCD &00E01806
DCD &00F01C07
DCD &00801008
DCD &00901409
DCD &00A0180A
DCD &00B01C0B
DCD &0080100C
DCD &0090140D
DCD &00A0180E
DCD &00B01C0F
DCD &00C01008
DCD &00D01409
DCD &00E0180A
DCD &00F01C0B
DCD &00C0100C
DCD &00D0140D
DCD &00E0180E
DCD &00F01C0F
DCD &00802000
DCD &00902401
DCD &00A02802
DCD &00B02C03
DCD &00802004
DCD &00902405
DCD &00A02806
DCD &00B02C07
DCD &00C02000
DCD &00D02401
DCD &00E02802
DCD &00F02C03
DCD &00C02004
DCD &00D02405
DCD &00E02806
DCD &00F02C07
DCD &00802008
DCD &00902409
DCD &00A0280A
DCD &00B02C0B
DCD &0080200C
DCD &0090240D
DCD &00A0280E
DCD &00B02C0F
DCD &00C02008
DCD &00D02409
DCD &00E0280A
DCD &00F02C0B
DCD &00C0200C
DCD &00D0240D
DCD &00E0280E
DCD &00F02C0F
DCD &00803000
DCD &00903401
DCD &00A03802
DCD &00B03C03
DCD &00803004
DCD &00903405
DCD &00A03806
DCD &00B03C07
DCD &00C03000
DCD &00D03401
DCD &00E03802
DCD &00F03C03
DCD &00C03004
DCD &00D03405
DCD &00E03806
DCD &00F03C07
DCD &00803008
DCD &00903409
DCD &00A0380A
DCD &00B03C0B
DCD &0080300C
DCD &0090340D
DCD &00A0380E
DCD &00B03C0F
DCD &00C03008
DCD &00D03409
DCD &00E0380A
DCD &00F03C0B
DCD &00C0300C
DCD &00D0340D
DCD &00E0380E
DCD &00F03C0F
DCD 0
PlotterTAGcore8
; r0 = int su
; r1 = int sv
; r2 = int sdu
; r3 = int sdv
MOV r12,r13
STMFD r13!,{r4-r11,r14}
LDMFD r12,{r4,r5,r6,r7,r10,r12,r14}
; r4 = int temp
; r5 = int rowbytes
; r6 = int alpha
; r7 = int si
; r10= int sdi
; r12= ptemp
; r14= tpos
MOV r6,r6,LSR#11
CMP r7,#0
BLE ptagclp_lt0
ptagclp
MOV r8,r1,ASR#16
MOV r11,r0,ASR#16
MLA r8,r5,r8,r11
ADR r9,alphatab+12*4
LDRB r8,[r12,r8]
ADD r0,r0,r2
LDR r8,[r9,r8,LSL#2] ; r8 = a = (B<<20)|(G<<10)|(R)
ADD r1,r1,r3
AND r11,r8,#15
MUL r11,r7,r11
AND r10,r8,#15<<10
MUL r10,r7,r10
CMP r11,#15<<16
MOVGT r11,#15<<16
MOV r11,r11,LSR#16
MOV r8,r8,LSR#20
MUL r8,r7,r8
CMP r10,#15<<26
MOVGT r10,#15<<26
MOV r10,r10,LSR#26
CMP r8,#15<<16
MOVGT r8,#15<<16
MOV r8,r8,LSR#16
ORR r11,r11,r10,LSL#10
LDRB r10,[r14]
ORR r8,r11,r8,LSL#20
LDR r10,[r9,r10,LSL#2] ; r10= b = (b<<20)|(g<<10)|(r)
; Stall
SUB r8,r8,r10 ; r8 = a-b
MUL r11,r8,r6 ; r8 = (a-b)*alpha
SUB r8,r9,#12*4-17
ADD r11,r11,r10,LSL#5 ; r8 = (a-b)*alpha + 32*b
LDRB r9,[r9,-r11,LSR#25]
ANDS r10,r11,#15<<15
LDRNEB r10,[r8,r10,LSR#15]
ANDS r11,r11,#15<<5
LDRNEB r11,[r8,-r11,LSR#5]
ORR r9,r9,r10
LDR r10,[r13,#(9+4)*4]
ORR r11,r11,r9
ADDS r7,r7,r10
STRB r11,[r14],#1
BLT ptagclp_lt0_entry2
ptagclp_entry2
SUBS r4,r4,#1
BGE ptagclp
LDMFD r13!,{r4-r11,PC}^
ptagclp_lt0
LDRB r10,[r14]
ADD r1,r1,r3
ADR r9,alphatab+12*4
LDR r10,[r9,r10,LSL#2] ; r10= b = (b<<20)|(g<<10)|(r)
ADD r0,r0,r2
RSB r8,r10,#0 ; r8 = a-b
MUL r11,r8,r6 ; r8 = (a-b)*alpha
SUB r8,r9,#12*4-17
ADD r11,r11,r10,LSL#5 ; r8 = (a-b)*alpha + 32*b
LDRB r9,[r9,-r11,LSR#25]
ANDS r10,r11,#15<<15
LDRNEB r10,[r8,r10,LSR#15]
ANDS r11,r11,#15<<5
LDRNEB r11,[r8,-r11,LSR#5]
ORR r9,r9,r10
LDR r10,[r13,#(9+4)*4]
ORR r11,r11,r9
ADDS r7,r7,r10
STRB r11,[r14],#1
BGT ptagclp_entry2
ptagclp_lt0_entry2
SUBS r4,r4,#1
BGE ptagclp_lt0
LDMFD r13!,{r4-r11,PC}^
DCD 0
PlotterTGcore8
; r0 = int su
; r1 = int sv
; r2 = int sdu
; r3 = int sdv
MOV r12,r13
STMFD r13!,{r4-r11,r14}
LDMFD r12,{r4,r5,r7,r10,r12,r14}
; r4 = int temp
; r5 = int rowbytes
; r7 = int si
; r10= int sdi
; r12= ptemp
; r14= tpos
CMP r7,#0
BLE ptgclp_lt0
ptgclp
MOV r8,r1,ASR#16
MOV r11,r0,ASR#16
MLA r8,r5,r8,r11
ADD r0,r0,r2
LDRB r8,[r12,r8]
ADR r9,alphatab+12*4
LDR r8,[r9,r8,LSL#2] ; r8 = a = (B<<20)|(G<<10)|(R)
ADD r1,r1,r3
AND r11,r8,#15
MUL r11,r7,r11
MOV r10,#15
AND r10,r10,r8,LSR#10
MUL r10,r7,r10
CMP r11,#15<<16
MOVGT r11,#15<<16
MOV r11,r11,LSR#16
MOV r8,r8,LSR#20
MUL r8,r7,r8
CMP r10,#15<<16
MOVGT r10,#15<<16
MOV r10,r10,LSR#16
CMP r8,#15<<16
MOVGT r8,#15<<16
MOV r8,r8,LSR#16
ORR r11,r11,r10,LSL#10
ORR r11,r11,r8,LSL#20
SUB r8,r9,#12*4-17
LDRB r9,[r9,-r11,LSR#20]
ANDS r10,r11,#15<<10
LDRNEB r10,[r8,r10,LSR#10]
ANDS r11,r11,#15
LDRNEB r11,[r8,-r11]
ORR r9,r9,r10
LDR r10,[r13,#(9+3)*4]
ORR r11,r11,r9
ADDS r7,r7,r10
STRB r11,[r14],#1
BLE ptgclp_lt0_entry2
ptgclp_entry2
SUBS r4,r4,#1
BGE ptgclp
LDMFD r13!,{r4-r11,PC}^
ptgclp_lt0
ADD r1,r1,r3
ADD r0,r0,r2
LDR r10,[r13,#(9+3)*4]
MOV r11,#0
ADDS r7,r7,r10
STRB r11,[r14],#1
BGT ptgclp_entry2
ptgclp_lt0_entry2
SUBS r4,r4,#1
BGE ptgclp_lt0
LDMFD r13!,{r4-r11,PC}^
PlotterFAGcore8
; r0 = int temp
; r1 = int c
; r2 = int alpha
; r3 = char *tpos
; r7 = int si
; r8 = int sdi
MOV r12,r13
STMFD r13!,{r4-r11,r14}
ADR r14,alphatab+12*4
AND r1,r1,#&ff
MOV r2,r2,LSR#11
MOV r9,#15
LDMFD r12,{r7,r8}
SUB r12,r14,#12*4-17
LDR r1,[r14,r1,LSL#2] ; r1 = a = (B<<20)|(G<<10)|(R)
CMP r7,#0
BLE pfagclp_lt0
pfagclp
LDRB r5,[r3]
AND r11,r1,#15
LDR r5,[r14,r5,LSL#2] ; r10= b = (b<<20)|(g<<10)|(r)
MUL r11,r7,r11
AND r10,r9,r1,LSR#10
MUL r10,r7,r10
CMP r11,#15<<16
MOVGT r11,#15<<16
MOV r11,r11,LSR#16
MOV r6,r1,LSR#20
MUL r6,r7,r6
CMP r10,#15<<16
MOVGT r10,#15<<16
MOV r10,r10,LSR#16
CMP r6,#15<<16
MOVGT r6,#15<<16
MOV r6,r6,LSR#16
ORR r11,r11,r10,LSL#10
ORR r11,r11,r6,LSL#20
SUB r6,r11,r5 ; r7 = a-b
MUL r4,r6,r2 ; r7 = (a-b)*alpha
; Stall
ADD r4,r4,r5,LSL#5 ; r8 = (a-b)*alpha + 32*b
LDRB r6,[r14,-r4,LSR#25]
ANDS r5,r4,#15<<15
LDRNEB r5,[r12,r5,LSR#15]
ANDS r4,r4,#15<<5
LDRNEB r4,[r12,-r4,LSR#5]
ORR r6,r6,r5
ORR r4,r4,r6
ADDS r7,r7,r8
STRB r4,[r3],#1
BLE pfagclp_lt0_entry2
pfagclp_entry2
SUBS r0,r0,#1
BGE pfagclp
LDMFD r13!,{r4-r11,PC}^
pfagclp_lt0
LDRB r5,[r3]
RSB r6,r5,#0 ; r7 = a-b
MUL r4,r6,r2 ; r7 = (a-b)*alpha
; Stall
ADD r4,r4,r5,LSL#5 ; r8 = (a-b)*alpha + 32*b
LDRB r6,[r14,-r4,LSR#25]
ANDS r5,r4,#15<<15
LDRNEB r5,[r12,r5,LSR#15]
ANDS r4,r4,#15<<5
LDRNEB r4,[r12,-r4,LSR#5]
ORR r6,r6,r5
ORR r4,r4,r6
ADDS r7,r7,r8
STRB r4,[r3],#1
BGT pfagclp_entry2
pfagclp_lt0_entry2
SUBS r0,r0,#1
BGE pfagclp_lt0
LDMFD r13!,{r4-r11,PC}^
PlotterFGcore8
; r0 = int temp
; r1 = int c
; r2 = char *tpos
; r3 = int si
; r7 = int sdi
LDR r12,[r13]
STMFD r13!,{r4-r11,r14}
AND r1,r1,#&ff
ADR r14,alphatab+12*4
SUB r7,r14,#12*4-17
LDR r1,[r14,r1,LSL#2] ; r1 = a = (B<<20)|(G<<10)|(R)
MOV r9,#15
CMP r3,#0
BLE pfgclp_lt0
pfgclp
AND r4,r1,#15
MUL r4,r3,r4
AND r5,r9,r1,LSR#10
MUL r5,r3,r5
CMP r4,#15<<16
MOVGT r4,#15<<16
MOV r4,r4,LSR#16
MOV r6,r1,LSR#20
MUL r6,r3,r6
CMP r5,#15<<16
MOVGT r5,#15<<16
MOV r5,r5,LSR#16
CMP r6,#15<<16
MOVGT r6,#15<<16
MOV r6,r6,LSR#16
LDRB r6,[r14,-r6]
LDRNEB r5,[r7,r5]
LDRNEB r4,[r7,-r4]
ORR r6,r6,r5
ORR r4,r4,r6
ADDS r3,r3,r12
STRB r4,[r2],#1
BLE pfgclp_lt0_entry2
pfgclp_entry2
SUBS r0,r0,#1
BGE pfgclp
LDMFD r13!,{r4-r11,PC}^
pfgclp_lt0
MOV r4,#0
ADDS r3,r3,r12
STRB r4,[r2],#1
BGT pfgclp_entry2
pfgclp_lt0_entry2
SUBS r0,r0,#1
BGE pfgclp_lt0
LDMFD r13!,{r4-r11,PC}^
PlotterTTcore8
; r0 = int su
; r1 = int sv
; r2 = int sdu
; r3 = int sdv
MOV r12,r13
STMFD r13!,{r4-r7,r14}
LDMFD r12,{r4,r5,r12,r14}
; r4 = int temp
; r5 = int rowbytes
; r12= ptemp
; r14= tpos
pttclp
MOV r6,r1,ASR#16
MOV r7,r0,ASR#16
MLA r6,r5,r6,r7
ADD r0,r0,r2
LDRB r6,[r12,r6]
ADD r1,r1,r3
CMP r6,#0
STRNEB r6,[r14]
ADD r14,r14,#1
SUBS r4,r4,#1
BGE pttclp
LDMFD r13!,{r4-r7,PC}^
DCD 0
DCD 0
PlotterTTAcore8
; r0 = int su
; r1 = int sv
; r2 = int sdu
; r3 = int sdv
MOV r12,r13
STMFD r13!,{r4-r11,r14}
LDMFD r12,{r4,r5,r6,r12,r14}
; r4 = int temp
; r5 = int rowbytes
; r6 = int alpha
; r12= ptemp
; r14= tpos
MOV r6,r6,LSR#11
ADR r9,alphatab+12*4
pttaclp
MOV r8,r1,ASR#16
MOV r7,r0,ASR#16
MLA r8,r5,r8,r7
ADD r0,r0,r2
LDRB r8,[r12,r8]
LDRB r10,[r14]
CMP r8,#0
BEQ pttaclp_nope
LDR r8,[r9,r8,LSL#2] ; r8 = a = (B<<20)|(G<<10)|(R)
LDR r10,[r9,r10,LSL#2] ; r10= b = (b<<20)|(g<<10)|(r)
ADD r1,r1,r3
SUB r8,r8,r10 ; r8 = a-b
MUL r11,r8,r6 ; r8 = (a-b)*alpha
SUB r8,r9,#12*4-17
ADD r11,r11,r10,LSL#5 ; r8 = (a-b)*alpha + 32*b
LDRB r7,[r9,-r11,LSR#25]
ANDS r10,r11,#15<<15
LDRNEB r10,[r8,r10,LSR#15]
ANDS r11,r11,#15<<5
LDRNEB r11,[r8,-r11,LSR#5]
ORR r7,r7,r10
ORR r11,r11,r7
STRB r11,[r14],#1
SUBS r4,r4,#1
BGE pttaclp
LDMFD r13!,{r4-r11,PC}^
pttaclp_nope
ADD r1,r1,r3
ADD r14,r14,#1
SUBS r4,r4,#1
BGE pttaclp
LDMFD r13!,{r4-r11,PC}^
DCD 0
DCD 0
DCD 0
PlotterTTAGcore8
; r0 = int su
; r1 = int sv
; r2 = int sdu
; r3 = int sdv
MOV r12,r13
STMFD r13!,{r4-r11,r14}
LDMFD r12,{r4,r5,r6,r7,r10,r12,r14}
; r4 = int temp
; r5 = int rowbytes
; r6 = int alpha
; r7 = int si
; r10= int sdi
; r12= ptemp
; r14= tpos
MOV r6,r6,LSR#11
CMP r7,#0
BLE pttagclp_lt0
pttagclp
MOV r8,r1,ASR#16
MOV r11,r0,ASR#16
MLA r8,r5,r8,r11
ADR r9,alphatab+12*4
LDRB r8,[r12,r8]
ADD r0,r0,r2
CMP r8,#0
BEQ pttagc_nope
LDR r8,[r9,r8,LSL#2] ; r8 = a = (B<<20)|(G<<10)|(R)
ADD r1,r1,r3
AND r11,r8,#15
MUL r11,r7,r11
AND r10,r8,#15<<10
MUL r10,r7,r10
CMP r11,#15<<16
MOVGT r11,#15<<16
MOV r11,r11,LSR#16
MOV r8,r8,LSR#20
MUL r8,r7,r8
CMP r10,#15<<26
MOVGT r10,#15<<26
MOV r10,r10,LSR#26
CMP r8,#15<<16
MOVGT r8,#15<<16
MOV r8,r8,LSR#16
ORR r11,r11,r10,LSL#10
LDRB r10,[r14]
ORR r8,r11,r8,LSL#20
LDR r10,[r9,r10,LSL#2] ; r10= b = (b<<20)|(g<<10)|(r)
; Stall
SUB r8,r8,r10 ; r8 = a-b
MUL r11,r8,r6 ; r8 = (a-b)*alpha
SUB r8,r9,#12*4-17
ADD r11,r11,r10,LSL#5 ; r8 = (a-b)*alpha + 32*b
LDRB r9,[r9,-r11,LSR#25]
ANDS r10,r11,#15<<15
LDRNEB r10,[r8,r10,LSR#15]
ANDS r11,r11,#15<<5
LDRNEB r11,[r8,-r11,LSR#5]
ORR r9,r9,r10
LDR r10,[r13,#(9+4)*4]
ORR r11,r11,r9
ADDS r7,r7,r10
STRB r11,[r14],#1
BLT pttagclp_lt0_entry2
pttagclp_entry2
SUBS r4,r4,#1
BGE pttagclp
LDMFD r13!,{r4-r11,PC}^
pttagc_nope
ADDS r7,r7,r10
ADD r14,r14,#1
ADD r1,r1,r3
BLT pttagclp_lt0_entry2
SUBS r4,r4,#1
BGE pttagclp
LDMFD r13!,{r4-r11,PC}^
DCD 0
pttagclp_lt0
MOV r8,r1,ASR#16
MOV r11,r0,ASR#16
MLA r8,r5,r8,r11
LDRB r8,[r12,r8]
ADD r0,r0,r2
CMP r8,#0
BEQ pttagc_nope2
LDRB r10,[r14]
ADR r9,alphatab+12*4
LDR r10,[r9,r10,LSL#2] ; r10= b = (b<<20)|(g<<10)|(r)
ADD r1,r1,r3
RSB r8,r10,#0 ; r8 = a-b
MUL r11,r8,r6 ; r8 = (a-b)*alpha
SUB r8,r9,#12*4-17
ADD r11,r11,r10,LSL#5 ; r8 = (a-b)*alpha + 32*b
LDRB r9,[r9,-r11,LSR#25]
ANDS r10,r11,#15<<15
LDRNEB r10,[r8,r10,LSR#15]
ANDS r11,r11,#15<<5
LDRNEB r11,[r8,-r11,LSR#5]
ORR r9,r9,r10
LDR r10,[r13,#(9+4)*4]
ORR r11,r11,r9
ADDS r7,r7,r10
STRB r11,[r14],#1
BGT pttagclp_entry2
pttagclp_lt0_entry2
SUBS r4,r4,#1
BGE pttagclp_lt0
LDMFD r13!,{r4-r11,PC}^
pttagc_nope2
ADD r1,r1,r3
ADDS r7,r7,r10
ADD r14,r14,#1
BGT pttagclp_entry2
SUBS r4,r4,#1
BGE pttagclp_lt0
LDMFD r13!,{r4-r11,PC}^
DCD 0
DCD 0
DCD 0
PlotterTTGcore8
; r0 = int su
; r1 = int sv
; r2 = int sdu
; r3 = int sdv
MOV r12,r13
STMFD r13!,{r4-r11,r14}
LDMFD r12,{r4,r5,r7,r10,r12,r14}
; r4 = int temp
; r5 = int rowbytes
; r7 = int si
; r10= int sdi
; r12= ptemp
; r14= tpos
CMP r7,#0
BLE pttgclp_lt0
pttgclp
MOV r8,r1,ASR#16
MOV r11,r0,ASR#16
MLA r8,r5,r8,r11
ADD r0,r0,r2
LDRB r8,[r12,r8]
ADD r1,r1,r3
CMP r8,#0
BEQ pttgc_nope
ADR r9,alphatab+12*4
LDR r8,[r9,r8,LSL#2] ; r8 = a = (B<<20)|(G<<10)|(R)
MOV r10,#15
AND r11,r8,#15
MUL r11,r7,r11
AND r10,r10,r8,LSR#10
MUL r10,r7,r10
CMP r11,#15<<16
MOVGT r11,#15<<16
MOV r11,r11,LSR#16
MOV r8,r8,LSR#20
MUL r8,r7,r8
CMP r10,#15<<16
MOVGT r10,#15<<16
MOV r10,r10,LSR#16
CMP r8,#15<<16
MOVGT r8,#15<<16
MOV r8,r8,LSR#16
ORR r11,r11,r10,LSL#10
ORR r11,r11,r8,LSL#20
SUB r8,r9,#12*4-17
LDRB r9,[r9,-r11,LSR#20]
ANDS r10,r11,#15<<10
LDRNEB r10,[r8,r10,LSR#10]
ANDS r11,r11,#15
LDRNEB r11,[r8,-r11]
ORR r9,r9,r10
LDR r10,[r13,#(9+3)*4]
ORR r11,r11,r9
STRB r11,[r14]
pttgc_nope
ADD r14,r14,#1
ADDS r7,r7,r10
BLE pttgclp_lt0_entry2
pttgclp_entry2
SUBS r4,r4,#1
BGE pttgclp
LDMFD r13!,{r4-r11,PC}^
pttgclp_lt0
MOV r8,r1,ASR#16
MOV r11,r0,ASR#16
MLA r8,r5,r8,r11
ADD r0,r0,r2
LDRB r8,[r12,r8]
ADD r1,r1,r3
CMP r8,#0
LDRNE r10,[r13,#(9+3)*4]
MOVNE r11,#0
STRNEB r11,[r14]
ADD r14,r14,#1
ADDS r7,r7,r10
BGT pttgclp_entry2
pttgclp_lt0_entry2
SUBS r4,r4,#1
BGE pttgclp_lt0
LDMFD r13!,{r4-r11,PC}^
END