Guest User

Untitled

a guest
Jun 27th, 2018
100
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,4
  7.     push hl
  8.     ld hl,4
  9.     push hl
  10.     push bc
  11.     ld hl,12
  12.  
  13. cx .equ $83CF   ;axe temporary storage area
  14. cy .equ cx+1
  15. x .equ cy+1
  16. y .equ x+1
  17. off .equ y+1
  18. clipsave .equ off+1
  19. _cx .equ 0
  20. _cy .equ 1
  21. _x .equ 2
  22. _y .equ 3
  23. _off .equ 4
  24. _clipsave .equ 5
  25.  
  26.  
  27.     ld de,plotSScreen
  28.     di
  29.     push de
  30.     pop iy
  31.     ld ix,cx
  32.     ld e,l          ;e=R
  33.     ld (ix+_x),e
  34.     pop hl
  35.     pop bc          ;c=CY
  36.     ex (sp),hl      ;l=CX
  37.     ld (ix+_cy),c
  38.     ld (ix+_cx),l
  39.     xor a
  40.     ld h,a
  41.     ld b,a
  42.     ld (y),a
  43.     ld (off),a
  44.     sub e
  45.     ld d,a          ;d=ERR
  46.     ld a,c          ;calculate ptr row [cy-x]
  47.     sub e
  48.     jr nc,+_            ;if x>cy, set y to 0, jump to column calculation
  49.     ld l,h
  50.     jr ++_
  51. _:                  ;row calculation
  52.     ld l,a
  53.     ld c,l
  54.     add hl,hl
  55.     add hl,bc
  56.     add hl,hl
  57.     add hl,hl
  58. _:                  ;column calculation
  59.     ld a,(cx)
  60.     ld c,a
  61.     srl c
  62.     srl c
  63.     srl c
  64.     add hl,bc
  65.     push iy
  66.     pop bc
  67.     add hl,bc       ;hl=PTR
  68.     and 7
  69.     ld b,a
  70.     ld a,$80
  71.     jr z,++_
  72. _:
  73.     rrca
  74.     djnz -_
  75. _:
  76.     ld b,a          ;b=LMASK
  77.                     ;special case RotRMask
  78.     rrca
  79.     ld c,a
  80.     jr nc,SkipRotR
  81.     inc (ix+_off)
  82.     jr SkipRotR
  83. RotateMasks:
  84.     call RotRMask
  85. SkipRotR:
  86.     call RotLMask
  87. SkipRotate:
  88.     ld a,(x)
  89.     dec a
  90.     sub (ix+_y)
  91.     jp c,End
  92.     ld a,d
  93.     inc (ix+_y)
  94.     add a,(ix+_y)
  95.     add a,(ix+_y)
  96.     ld d,a
  97.     jp m,RotateMasks
  98.     push de
  99.         xor a
  100.         cp c
  101.         jr z,+_
  102.         push bc
  103.             push hl
  104.                 call DrawRChunk
  105.                 pop hl
  106.             pop bc
  107. _:
  108.         xor a
  109.         cp b
  110.         jr z,+_
  111.         push bc
  112.             push hl
  113.                 call DrawLChunk
  114.                 pop hl
  115.             pop bc
  116. _:
  117.         pop de
  118. _changeLmask:
  119.     ld a,b          ;change left mask
  120.     or a
  121.     jr z,_changeRmask
  122.     rlc b
  123.     jr nc,++_
  124.     ld a,(cx)
  125.     sub (ix+_y)
  126.     jr nc,+_
  127.     ld b,0
  128.     jr _changeRmask
  129. _:
  130.     ld b,%00000001
  131.     inc (ix+_off)
  132.     dec hl
  133.     jr _changeRmask
  134. _:
  135.     cpl             ;jumps to here if nc after  ld a,b \ rlc b
  136.     and b
  137.     ld b,a
  138. _changeRmask:       ;change right mask
  139.     ld a,c
  140.     or a
  141.     jr z,_testEnd
  142.     rrc c
  143.     jr nc,++_
  144.     ld a,(cx)
  145.     add a,(ix+_y)
  146.     cp 96
  147.     jr c,+_
  148.     ld c,0
  149.     jr _testEnd
  150. _:
  151.     ld c,%10000000
  152.     inc (ix+_off)
  153.     jr _testEnd
  154. _:
  155.     cpl             ;jumps to here if nc after  ld a,c \ rrc c
  156.     and c
  157.     ld c,a
  158. _testEnd:
  159.     ld a,(x)
  160.     dec a
  161.     sub (ix+_y)
  162.     jp c,End
  163. _drawLVert:         ;draw left vertical
  164.     push bc
  165.         push hl
  166.             push de
  167.                 ld a,(cy)
  168.                 sub (ix+_y)
  169.                 jr nc,+_
  170.                 xor a
  171. _:
  172.                 ld l,a
  173.                 ld a,(y)        ;clip height
  174.                 add a,a
  175.                 inc a
  176.                 ld d,a
  177.                 ld a,(cy)
  178.                 add a,(ix+_y)
  179.                 inc a
  180.                 sub d
  181.                 jr nc,+_
  182.                 add a,d
  183.                 jr nc,++_
  184.                 ld d,a
  185. _:
  186.                 ld a,(cy)
  187.                 sub (ix+_x)
  188.                 add a,d
  189.                 ld e,a
  190.                 ld a,64
  191.                 sub e
  192.                 jr nc,+_
  193.                 add a,d
  194.                 jr nc,_vertDone ;if
  195.                 ld d,a
  196. _:                              ;done clipping height
  197.                 ld (ix+_clipsave),d
  198.                 ld a,(cx)
  199.                 sub (ix+_x)
  200.                 jr c,_drawRVert
  201.                 call GetPtrMask
  202.                 ld c,a
  203.                 ld b,d
  204.                 call DrawVertLoop
  205. _drawRVert:
  206.                 ld a,(cy)
  207.                 sub (ix+_y)
  208.                 jr nc,+_
  209.                 xor a
  210. _:
  211.                 ld l,a
  212.                 ld a,(clipsave)
  213.                 or a
  214.                 jr z,+_
  215.                 ld d,a
  216.                 ld a,(cx)
  217.                 add a,(ix+_x)
  218.                 cp 96
  219.                 jr nc,+_
  220.                 call GetPtrMask
  221.                 ld c,a
  222.                 ld b,d
  223.                 call DrawVertLoop
  224. _:
  225. _vertDone:
  226.                 pop de
  227.             pop hl
  228.         ld a,d
  229.         dec (ix+_x)
  230.         sub (ix+_x)
  231.         sub (ix+_x)
  232.         ld d,a
  233.         ld a,(cy)
  234.         sub (ix+_x)
  235.         jr c,+_
  236.         ld bc,12
  237.         add hl,bc
  238. _:
  239.         pop bc
  240.     jp SkipRotate
  241. End:
  242.     ld iy,Flags
  243.     ei
  244.     bcall(_grBufCpy)
  245.     ret
  246.    
  247.    
  248.    
  249. GetPtrMask:
  250.     ld h,0
  251.     ld b,h
  252.     ld c,l
  253.     add hl,hl
  254.     add hl,bc
  255.     add hl,hl
  256.     add hl,hl
  257.     ld c,a
  258.     srl c
  259.     srl c
  260.     srl c
  261.     add hl,bc
  262.     push iy
  263.     pop bc
  264.     add hl,bc
  265.     and 7
  266.     ld b,a
  267.     ld a,$80
  268.     ret z
  269. _:
  270.     rrca
  271.     djnz -_
  272.     ret
  273.    
  274.    
  275.    
  276. RotLMask:
  277.     ld a,b
  278.     or a
  279.     ret z
  280.     rlca
  281.     jr nc,++_
  282.     push de
  283.     push bc
  284.     push hl
  285.     call DrawLChunk
  286.     pop hl
  287.     pop bc
  288.     pop de
  289.     ld a,(cx)
  290.     dec a
  291.     sub (ix+_y)
  292.     jr nc,+_
  293.     ld b,0
  294.     ret
  295. _:
  296.     dec hl
  297.     inc (ix+_off)
  298.     ld b,%00000001
  299.     ret
  300. _:
  301.     or b
  302.     ld b,a
  303.     ret
  304.    
  305.    
  306.    
  307. RotRMask:
  308.     ld a,c
  309.     or a
  310.     ret z
  311.     rrca
  312.     jr nc,++_
  313.     push de
  314.     push bc
  315.     push hl
  316.     call DrawRChunk
  317.     pop hl
  318.     pop bc
  319.     pop de
  320.     ld a,(cx)
  321.     inc a
  322.     add a,(ix+_y)
  323.     cp 96
  324.     jr c,+_
  325.     ld c,a
  326.     ret
  327. _:
  328.     ld c,%10000000
  329.     inc (ix+_off)
  330.     ret
  331. _:
  332.     or c
  333.     ld c,a
  334.     ret
  335.    
  336.    
  337.    
  338. DrawRChunk:
  339.     ld e,0
  340.     ld a,(x)
  341.     add a,a
  342.     inc a
  343.     ld b,a
  344.     ld a,(cy)
  345.     sub (ix+_x)
  346.     jr nc,+_
  347.     add a,b
  348.     ret nc
  349.     ld b,a
  350. _:
  351.     ld a,(cy)
  352.     add a,(ix+_x)
  353.     ld d,a
  354.     dec d
  355.     ld a,64
  356.     sub d
  357.     jp nc,+_
  358.     add a,b
  359.     ret nc
  360.     ld b,a
  361. _:
  362.     ld d,e
  363.     ld e,(ix+_off)
  364.     add hl,de
  365.     ld e,12
  366.     jp DrawVertLoop;+3;skip load
  367.    
  368.    
  369.    
  370. DrawLChunk:
  371.     ld c,b      ;c=mask
  372.     ld a,(x)
  373.     add a,a
  374.     inc a
  375.     ld b,a
  376.     ld a,(cy)
  377.     sub (ix+_x)
  378.     jr nc,+_
  379.     add a,b
  380.     ret nc
  381.     ld b,a
  382. _:
  383.     ld a,(cy)
  384.     add a,(ix+_x)
  385.     ld d,a
  386.     ld a,64
  387.     sub d
  388.     jr nc,+_
  389.     add a,b
  390.     ret nc
  391.     ld b,a 
  392. _:
  393.     ;jp DrawVertLoop
  394.    
  395.    
  396. DrawVertLoop:
  397.     ;in: B = height, C=mask, HL = pointer
  398.     ;destroys: A, B, DE, HL
  399.     ld de,12
  400.     xor a
  401.     or b
  402.     ret z
  403. _:
  404.     ld a,(hl)
  405.     xor c
  406.     ld (hl), a
  407.     add hl,de
  408.     djnz -_
  409.     ret
Add Comment
Please, Sign In to add comment