|
|
1.1 root 1: # cursblt draws the cursor. It is assumed that
2: # the cursor is 16x16 in a texture16
3: # the move is in XOR mode
4: # the destination is on the screen
5: # arguments are &display, &texture, destination point
6:
7: .globl cursblt
8: .align 8
9: cursblt:
10: SAVE %r6
11: MOVW &16,%r7 # scan count and source position value
12: MOVW 0(%ap),%r2 # get screen bitmap pointer
13: ARSH3 &4,8(%ap),%r0 # p.x >> 4 -> r0 (half word address)
14: MOVH 10(%ap),%r1 # p.y -> r1
15: MULW2 &50,%r1 # p.y * 50 = # of words from base of display
16: # to start of scan line
17: ADDW2 %r1,%r0 # x + y
18: ADDW2 %r0,%r0 # convert words to bytes
19: ADDW2 0(%r2),%r0 # add in the base of display for address of dest
20: MOVW 4(%ap),%r1 # start of cursor to move
21: ANDH3 &31,8(%ap),%r2 # need the shift distance
22: SUBW2 %r7,%r2 # r2 - 16
23: BEB CB_ALIGNED # No shift at all, will we be quick
24: MOVW &0xFFFF0000,%r6 # load a mask needed in loop
25: BITB &2,%r0 # if set, we are dest straddling
26: BNEB CB_DEST_ST
27: .align 4
28: CB_NO_STRADDLE: # just rotate the 16 bits, other bits are 0's
29: ROTW %r2,{uhalf}0(%r1),%r8
30: XORW2 %r8,0(%r0) # and store
31: ADDW2 &100,%r0 # next scanline 100bytes=display width=800 bits
32: ADDW2 &2,%r1
33: DECW %r7 # for count of 16
34: BNEB CB_NO_STRADDLE
35: RESTORE %r6
36: RET
37: .align 4
38: CB_ALIGNED: # no shift, so just xor mem to mem..
39: XORH2 0(%r1),0(%r0) # and store
40: ADDW2 &100,%r0 # next scanline 100bytes=display width=800 bits
41: ADDW2 &2,%r1
42: DECW %r7 # for count of 16
43: BNEB CB_ALIGNED
44: RESTORE %r6
45: RET
46: .align 4
47: CB_DEST_ST: # we straddle, so rotw the halfword...
48: ROTW %r2,{uhalf}0(%r1),%r8
49: XORH2 %r8,0(%r0) # xor the left half of the straddling dest
50: ANDW2 %r6,%r8 # now mask out what you just wrote &
51: XORW2 %r8,2(%r0) # xor the right half as a full word (faster)
52: ADDW2 &2,%r1
53: ADDW2 &100,%r0 # next scanline 100bytes=display width=800 bits
54: DECW %r7
55: BNEB CB_DEST_ST
56: RESTORE %r6
57: RET
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.