; a1 rp
; d0 x
; d1 y
draw_1:  cmp.w rp_cp_x(A1),D0
   bne.b olddraw
  cmpi.w #$FFFF,rp_LinePtrn(A1)
   bne.b olddraw
  move.l rp_AreaPtrn(A1),-(A7)
  movem.l D2-D4/A1,-(A7)
  move.w rp_cp_y(A1),D3
  move.w D1,rp_cp_y(A1)
  cmp.w D1,D3
   bge.b .draw_2
  exg.l D1,D3
.draw_2: suba.l a0,a0
  move.l a0,rp_AreaPtrn(A1)
  move.w D0,D2
   jsr _LVOBltPattern(A6)
  movem.l (A7)+,D2-D4/A1
  move.l (A7)+,rp_AreaPtrn(A1)
 rtS
 cnop 0,4


olddraw: jmp $C0DEC0DE    ;jump to old draw function
 cnop 0,4


Draw:  cmp.w rp_cp_y(A1),D1
   bne.b draw_1
  lea rp_LinePtrn(A1),A0
  cmpi.w #$FFFF,(A0)+
   bne.b .draw_4
  move.l rp_AreaPtrn(A1),-(A7)
  movem.l D2-D4/A1,-(A7)
  move.w (A0),D2
  move.w D0,(A0)
  cmp.w D0,D2
   bge.b .draw_3
  exg.l D0,D2
.draw_3:  move.w D2,D4
  sub.w D0,D4
  sub.b D4,rp_linpatcnt(A1)
  suba.l a0,a0
  move.l a0,rp_AreaPtrn(A1)
  move.w D1,D3
   jsr _LVOBltPattern(A6)
  movem.l (A7)+,D2-D4/A1
  move.l (A7)+,rp_AreaPtrn(A1)
 rtS
 cnop 0,4


.draw_4:  move.l rp_AreaPtrn(A1),-(A7)
  ;move.w rp_DrawMode(A1),-(A7)
  movem.l D2-D4/A1,-(A7)
  move.w (A0),D2
  move.w D0,(A0)
  move.w rp_LinePtrn(A1),D3
  cmp.w D0,D2
   bge.b .draw_5
  exg.l D0,D2
 bra.b .draw_6
 cnop 0,4


.draw_5:  moveq.l #0,D4
  move.b D3,D4
  move.b draw_data(PC,D4.W),D3
  rol.w #8,D3
  move.b D3,D4
  move.b draw_data(PC,D4.W),D3
.draw_6:  moveq.l #0,D4
  move.b rp_linpatcnt(A1),D4
  ror.w D4,D3
  move.w D3,-(A7)
  move.l A7,rp_AreaPtrn(A1)
  move.w D2,D4
  sub.w D0,D4
  sub.b D4,rp_linpatcnt(A1)
  moveq.l #0,D4
  move.b D4,rp_AreaPtSz(A1)
  movea.l D4,A0
  move.w D1,D3
   jsr _LVOBltPattern(A6)
  addq.l #2,A7
  movem.l (A7)+,D2-D4/A1
  ;move.w (A7)+,rp_DrawMode(A1)
  move.l (A7)+,rp_AreaPtrn(A1)
 rtS
 cnop 0,4


draw_data:  dc.b $00
  dc.b $80,$40,$C0
  dc.b " "
  dc.b $A0,$60,$E0
  dc.b $10
  dc.b $90,$50
  dc.b $D0,$30
  dc.b $B0,$70,$F0
  dc.b 8
  dc.b $88,$48
  dc.b $C8,$28
  dc.b $A8,$68,$E8
  dc.b $18
  dc.b $98,$58
  dc.b $D8,$38
  dc.b $B8,$78,$F8
  dc.b $04
  dc.b $84,$44
  dc.b "Ä$"
  dc.b $A4,$64,$E4
  dc.b $14
  dc.b $94,$54
  dc.b $D4,$34
  dc.b $B4,$74,$F4
  dc.b 12
  dc.b $8C,$4C
  dc.b $CC,$2C
  dc.b $AC,$6C,$EC
  dc.b $1C
  dc.b $9C,$5C
  dc.b "Ü<"
  dc.b $BC,$7C,$FC
  dc.b $02
  dc.b $82,$42
  dc.b $C2,$22
  dc.b $A2,$62,$E2
  dc.b $12
  dc.b $92,$52 ;.R
  dc.b $D2,$32 ;.2
  dc.b $B2,$72,$F2 ;.r.
  dc.b 10
  dc.b $8A,$4A ;.J
  dc.b $CA,$2A ;.*
  dc.b $AA,$6A,$EA ;.j.
  dc.b $1A ;.
  dc.b $9A,$5A ;.Z
  dc.b $DA,$3A ;.:
  dc.b $BA,$7A,$FA ;.z.
  dc.b $06 ;.
  dc.b $86,$46 ;.F
  dc.b $C6,$26 ;.&
  dc.b $A6,$66,$E6 ;.f.
  dc.b $16 ;.
  dc.b $96,$56 ;.V
  dc.b "Ö6"
  dc.b $B6,$76,$F6 ;.v.
  dc.b $0E ;.
  dc.b $8E,$4E ;.N
  dc.b $CE,$2E ;..
  dc.b $AE,$6E,$EE ;.n.
  dc.b $1E ;.
  dc.b $9E,$5E ;.^
  dc.b $DE,$3E ;.>
  dc.b $BE,$7E,$FE ;.~.
  dc.b $01 ;.
  dc.b $81,$41 ;.A
  dc.b $C1,$21 ;.!
  dc.b $A1,$61,$E1 ;.a.
  dc.b $11 ;.
  dc.b $91,$51 ;.Q
  dc.b $D1,$31 ;.1
  dc.b $B1,$71,$F1 ;.q.
  dc.b 9
  dc.b $89,$49 ;.I
  dc.b $C9,$29 ;.)
  dc.b "Ši"
  dc.b $E9,$19 ;..
  dc.b $99,$59 ;.Y
  dc.b $D9,$39 ;.9
  dc.b $B9,$79,$F9 ;.y.
  dc.b $05 ;.
  dc.b $85,$45 ;.E
  dc.b $C5,$25 ;.%
  dc.b $A5,$65,$E5 ;.e.
  dc.b $15 ;.
  dc.b $95,$55 ;.U
  dc.b $D5,$35 ;.5
  dc.b $B5,$75,$F5 ;.u.
  dc.b 13
  dc.b $8D,$4D ;.M
  dc.b $CD,$2D ;.-
  dc.b $AD,$6D,$ED ;.m.
  dc.b $1D ;.
  dc.b $9D,$5D ;.]
  dc.b $DD,$3D ;.=
  dc.b $BD,$7D,$FD ;.}.
  dc.b $03 ;.
  dc.b $83,$43 ;.C
  dc.b $C3,$23 ;.#
  dc.b "Łc"
  dc.b $E3,$13 ;..
  dc.b $93,$53 ;.S
  dc.b $D3,$33 ;.3
  dc.b $B3,$73,$F3 ;.s.
  dc.b $0B ;.
  dc.b $8B,$4B ;.K
  dc.b $CB,$2B ;.+
  dc.b $AB,$6B,$EB ;.k.
  dc.b 27
  dc.b $9B,$5B ;.[
  dc.b $DB,$3B ;.;
  dc.b $BB,$7B,$FB ;.{.
  dc.b 7
  dc.b $87,$47 ;.G
  dc.b $C7,$27 ;.'
  dc.b $A7,$67,$E7 ;.g.
  dc.b $17 ;.
  dc.b $97,$57 ;.W
  dc.b $D7,$37 ;.7
  dc.b $B7,$77,$F7 ;.w.
  dc.b $0F ;.
  dc.b $8F,$4F ;.O
  dc.b $CF,$2F ;./
  dc.b $AF,$6F,$EF ;.o.
  dc.b $1F ;.
  dc.b $9F,$5F ;._
  dc.b "ß?"
  dc.b $BF,$7F ;..
  dc.b $FF ;.




; a1 memblock
; d0 bytecount
; d1 flags
BltClearNF:  tst.l D0
   beq.w .exit
  movea.l D1,A0
  btst #1,D1
   beq.b .bc_1
  move.w D0,D1
  swap D0
  mulu D1,D0
   beq.w .exit
.bc_1:  move.l D2,-(A7)
  moveq.l #0,D2
  move.l A0,D1
  btst #2,D1
   beq.b .bc_2
  swap D1
  move.w D1,D2
  swap D2
  move.w D1,D2
.bc_2:  move.l A1,D1
  btst #1,D1
   beq.b .bc_3
  move.w D2,(A1)+
  subq.l #2,D0
.bc_3:  move.l D0,D1
  lsr.l #5,D1
   beq.w .bc_12
  movem.l D3-D7/A2-A4,-(A7)
  move.l D1,D3
  lsl.l #5,D1
  adda.l D1,A1
  movea.l A1,A2
  movea.l D1,A4
   bsr.w OwnBlitter ;jsr _LVOOwnBlitter(A6)
  btst #6,_custom+DMACONR
   beq.b .bc_5
   move.w #$8400,_custom+DMACON
.bc_4: btst #6,_custom+DMACONR
   bne.b .bc_4
   move.w #$0400,_custom+DMACON
.bc_5:  move.l D2,D1
  move.l D2,D4
  move.l D2,D5
  move.l D2,D6
  move.l D2,D7
  movea.l D2,A0
  movea.l D2,A3
  swap D3
  tst.w D3
   beq.b .bc_7
  swap D3
.bc_6:  movem.l D1-D2/D4-D7/A0/A3,-(A1)
  subq.l #1,D3
   bne.b .bc_6
 bra.b .bc_9
 cnop 0,4


.bc_7:  swap D3
  subq.l #1,D3
.bc_8:  movem.l D1-D2/D4-D7/A0/A3,-(A1)
   dbf D3,.bc_8
.bc_9:  sub.l A4,D0
  lsr.l #1,D0
   beq.b .bc_11
  subq.l #1,D0
.bc_10:  move.w D1,(A2)+
   dbf D0,.bc_10
.bc_11:  move.l A6,D3
  movea.l gb_ExecBase(A6),A6
   jsr _LVOCacheClearU(A6)
  movea.l D3,A6
   bsr.w DisownBlitter ;jsr _LVODisownBlitter(A6)
  movem.l (A7)+,D3-D7/A2-A4
  move.l (A7)+,D2
.exit: rtS
 cnop 0,4


.bc_12:  lsr.l #1,D0
   beq.b .bc_15
  subq.l #1,D0
   bsr.w OwnBlitter ;jsr _LVOOwnBlitter(A6)
  btst #6,_custom+DMACONR
   beq.b .bc_14
   move.w #$8400,_custom+DMACON
.bc_13: btst #6,_custom+DMACONR
   bne.b .bc_13
   move.w #$0400,_custom+DMACON
.bc_14:  move.w D2,(A1)+
   dbf D0,.bc_14
  move.l A6,D2
  movea.l gb_ExecBase(A6),A6
   jsr _LVOCacheClearU(A6)
  movea.l D2,A6
   bsr.w DisownBlitter ;jsr _LVODisownBlitter(A6)
.bc_15:  move.l (A7)+,D2
 rtS
 cnop 0,4
