Guest User

Untitled

a guest
Feb 22nd, 2012
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "ti83plus.inc"
  2.     .org $9d95-2
  3.     .db $bb,$6d
  4.     bcall(_grbufclr)
  5.     pop bc
  6.     ld hl,25
  7.     push hl
  8.     push hl
  9.     push bc
  10.     ld hl,14
  11.    
  12. _cx .equ 0
  13. _cy .equ 1
  14. _x .equ 2
  15. _y .equ 3
  16. _err .equ 4
  17. _rmask .equ 5
  18. _lmask .equ 6
  19. _off .equ 7
  20. _ptr .equ 8
  21.  
  22. ;###############################
  23. ;draw filled circle
  24. FilledCircle:
  25.     di
  26.     ld ix,cx
  27.     ld (ix+_x),l
  28.     xor a
  29.     ld (y),a
  30.     ld (off),a
  31.     sub l
  32.     ld (err),a
  33.     pop hl
  34.     pop bc
  35.     ex (sp),hl
  36.     ld (ix+_cx),c
  37.     ld (ix+_cy),l
  38.    
  39.     ld a,l
  40.     sub (ix+_x)
  41.     jr nc,+_
  42.     xor a
  43. _:
  44.     ld l,a
  45.     ld a,c
  46.     ;A=cx, L=cy-x
  47.     call GetPtrMask
  48.     ld (rmask),a
  49.     ld (lmask),a
  50.     ld (ptr),hl
  51.    
  52. Main:
  53.     call RotLMask
  54.     bcall(_grBufCpy)
  55.     call RotRMask
  56.     bcall(_grBufCpy)
  57. SkipRotate:
  58.     ld a,(err)
  59.     inc (ix+_y)
  60.     add a,(ix+_y)
  61.     ;inc (ix+_y)
  62.     add a,(ix+_y)
  63.     ld (err),a
  64.     bit 7,a
  65.     jp nz,_skip
  66.     ;draw chunks
  67.     call DrawLChunk
  68.     bcall(_grBufCpy)
  69.     call DrawRChunk
  70.     bcall(_grBufCpy)
  71.         ;change left mask
  72.     ld a,(lmask)
  73.     rla
  74.     jr nc,+_
  75.     ld a,%00000001
  76.     ld (lmask),a
  77.     inc (ix+_off)
  78.     ld hl,(ptr)
  79.     dec hl
  80.     ld (ptr),hl
  81.     jr ++_
  82. _:
  83.     ld b,a
  84.     ld a,(lmask)
  85.     cpl
  86.     and b
  87.     ld (lmask),a
  88. _:      ;change right mask
  89.     ld a,(rmask)
  90.     rra
  91.     jr nc,+_
  92.     ld a,%10000000
  93.     inc (ix+_off)
  94.     ld (rmask),a
  95.     jr ++_
  96. _:
  97.     ld b,a
  98.     ld a,(rmask)
  99.     cpl
  100.     and b
  101.     ld (rmask),a
  102. _:
  103.     ;draw left vertical
  104.     ld a,(cy)
  105.     sub (ix+_y)
  106.     ld l,a
  107.     ld a,(y)
  108.     add a,a
  109.     inc a
  110.     ld d,a
  111.     ld a,(cx)
  112.     sub (ix+_x)
  113.     call GetPtrMask
  114.     ld c,a
  115.     ld b,d
  116.     call DrawVertLoop
  117.     bcall(_grBufCpy)
  118.     ;draw right vertical
  119.     ld a,(cy)
  120.     sub (ix+_y)
  121.     ld l,a
  122.     ld a,(y)
  123.     add a,a
  124.     inc a
  125.     ld d,a
  126.     ld a,(cx)
  127.     add a,(ix+_x)
  128.     call GetPtrMask
  129.     ld c,a
  130.     ld b,d
  131.     call DrawVertLoop
  132.     bcall(_grBufCpy)
  133.         ;sub x
  134.     ld a,(err)
  135.     ;dec (ix+_x)
  136.     sub (ix+_x)
  137.     dec (ix+_x)
  138.     sub (ix+_x)
  139.     ld (err),a
  140.     ld hl,(ptr)
  141.     ld de,12
  142.     add hl,de
  143.     ld (ptr),hl
  144.     ld a,(x)
  145.     sub (ix+_y)
  146.     jp nc,SkipRotate
  147.     ei
  148.     ret
  149. _skip:
  150.     ld a,(x)
  151.     sub (ix+_y)
  152.     jp nc,Main
  153.     ei
  154.     ret
  155.    
  156. GetPtrMask:
  157.     ld h,0
  158.     ld b,h
  159.     ld c,l
  160.     add hl,hl
  161.     add hl,bc
  162.     add hl,hl
  163.     add hl,hl
  164.     ld c,a
  165.     srl c
  166.     srl c
  167.     srl c
  168.     add hl,bc
  169.     ld bc,plotsscreen
  170.     add hl,bc
  171.     and 7
  172.     ld b,a
  173.     ld a,$80
  174.     ret z
  175. _:
  176.     rrca
  177.     djnz -_
  178.     ret
  179.  
  180.    
  181. RotLMask:
  182.     ld a,(lmask)
  183.     rla
  184.     jr nc,+_
  185.     call DrawLChunk
  186.     ld a,%00000001
  187.     ld (lmask),a
  188.     ld hl,(ptr)
  189.     dec hl
  190.     ld (ptr),hl
  191.     inc (ix+_off)
  192.     ret
  193. _:
  194.     ld hl,lmask
  195.     or (hl)
  196.     ld (hl),a
  197.     ret
  198.    
  199. DrawLChunk:
  200.     ld c,(ix+_lmask)
  201.     ld a,(off)
  202.     or a
  203.     jr nz,+_
  204.     ld a,(rmask)
  205.     and c
  206.     xor c
  207.     ld c,a
  208. _:
  209.     ld hl,(ptr)
  210.     ld a,(x)
  211.     add a,a
  212.     inc a
  213.     ld b,a
  214.     jp DrawVertLoop
  215.     ret
  216.    
  217. RotRMask:
  218.     ld a,(rmask)
  219.     rra
  220.     jr nc,+_
  221.     call DrawRChunk
  222.     ld a,%10000000
  223.     ld (rmask),a
  224.     inc (ix+_off)
  225.     ret
  226. _:
  227.     ld hl,rmask
  228.     or (hl)
  229.     ld (hl),a
  230.     ret
  231.    
  232. DrawRChunk:
  233.     ld c,(ix+_rmask)
  234.     ld hl,(ptr)
  235.     ld e,(ix+_off)
  236.     ld d,0
  237.     add hl,de
  238.     ld a,(x)
  239.     add a,a
  240.     inc a
  241.     ld b,a
  242.     jp DrawVertLoop
  243.  
  244. DrawVertLoop:
  245.         ;in: B = height, C=mask, HL = pointer
  246.         ;destroys: A, B, DE, HL
  247.         ld de,12
  248. _:
  249.         ld a,(hl)
  250.         xor c
  251.         ld (hl), a
  252.         add hl,de
  253.         djnz -_
  254.         ret
  255.  
  256.    
  257.    
  258. cx:
  259.     .db 0
  260. cy:
  261.     .db 0
  262. x:
  263.     .db 0
  264. y:
  265.     .db 0
  266. err:
  267.     .db 0
  268. rmask:
  269.     .db 0
  270. lmask:
  271.     .db 0
  272. off:
  273.     .db 0
  274. ptr:
  275.     .dw 0
Advertisement
Add Comment
Please, Sign In to add comment