This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
Topics - ZippyDee
16
« on: July 11, 2011, 07:53:52 am »
As you may or may not know, I am quite involved in dance. I recently received a full scholarship to a ballet studio, and I am taking full advantage of that, dancing at least 10 hours a week there, and at least 4 hours a week at another studio as well. Anyway, being that I am so engaged in ballet lately, I have been watching videos of Mikhail Baryshnikov and Rudolph Nureyev, quite possibly the two best male ballet dancers (ballerin os) in the history of forever. Rudolph Nureyev dancing Corsaire with Margot Fonteyne (who is also amazing): Mikhail Baryshnikov also dancing Corsaire (though he does only the male variation, a.k.a. the male solo): Obviously on a personal level I am floored by these performances, as was the rest of the classical ballet community. Nobody had ever seen anything like either of these men. It really helps to know what exactly it is that you're looking at, and to have some understanding of how the moves are executed, so being an actual dancer helps, but they're still pretty amazing to watch. I mean, seriously...HOW THE HELL DOES ANYONE EVER JUMP AS HIGH AS NUREYEV?? (see around 3:20 or so) And those incredible turns in both performances...how do you ever keep your balance like that? It's like they're all superhuman! Oh well...I am aware that many of you may not appreciate this nearly as much as I, but I wish to expand the world's view of dance, especially the concept and acceptance of male dancers. These men were phenomenal, the best there ever was. I hope you can at least appreciate these a little bit.
17
« on: July 11, 2011, 02:31:26 am »
When you get a query in Omnom it displays the message in the current window with (PM) next to the name. It also opens up a new query window in the channel bar...But the query window seems to not log any messages. If switch channels and then switch back, all queries are lost forever in the dark abyss that is deleted data. :'(
18
« on: July 10, 2011, 04:21:52 am »
If this is the wrong section, please move it, but I feel this is music-related enough. I feel very strongly about so-called "Hip-Hop" music these days. I feel this poem by Bridget Gray says it very well. Any other opinions about this? EDIT: She uses the N-word in this poem. Just letting you know ahead of time in case you might be offended by it.
19
« on: July 05, 2011, 05:23:44 am »
you can scroll to the right indefinitely......then it takes that same indefinite amount of time to scroll the channels back to their original positions. I learned that the hard way.
20
« on: July 03, 2011, 10:28:26 pm »
Okay, so I've been working on this for a while now, and I'm pretty happy with how some of my routines are turning out so far. I haven't gotten very far, and I'm still only working on the very basics of it right now, but here's basically what I'm thinking about: zIDE was inspired by Deep Thought's XDE, but this will be for on-calc Assembly programming. If it ever gets done, here's what I'm planning for it to have: - Custom text editor
- 4-level grayscale syntax highlighting
- Line numbering
- Line auto-indenting
- Jump to label / Jump to line
- Relative label support
- On-Calc Compiling with fairly descriptive errors (as much as possible, at least)
- Running
- #include support (hopefully)
- Saving as a program that can be edited in the normal OS editor
- Back-up to AppVar
Note: If #include support ends up working, I will make the ti83plus.inc file a separate file so the app doesn't take up a huge amount of pages. However, the ti83plus.inc file will definitely not be the complete file. I will try to include as much of the basic things as I can, but I doubt it will include things like the two-byte key codes (of which there are A LOT). Honestly I'm not sure how many pages this app will end up being, but it shouldn't be more than two...Hopefully I can get it all into one page. So, that's what I'm planning. We'll see how much I can actually get to, seeing as I'm basically learning ASM as I go with this thing. I already feel like this has been such a great learning experience! Right now I'm working on the text input, so nothing stated above is absolutely positively for certain going to happen, but that also means that it can change and be added to! Any suggestions are welcome (in fact, I'd LOVE suggestions to make it even better). ALSO, I will be asking a lot of questions, and probably have a lot of routines that I'll screw up little things in (or maybe big things) that might need some debugging, so any and all assistance is also welcomed with open arms. I may have a screenshot pretty soon, but that's all for now!
21
« on: July 02, 2011, 09:36:42 pm »
What are the most attractive boys'/girls' names you can think of?
22
« on: July 02, 2011, 12:51:48 am »
I have a program that uses two buffers and it toggles which buffer it's writing to using a flag. Because it uses that flag I figured it would be a good idea to utilize that for drawing routines so they can draw to whichever buffer it's currently set to instead of having to have separate routines for each buffer. While writing those routines, I came up with this set of rectangle drawing routines that I think are pretty good, though they probably could be optimized quite a bit. Anyway, I thought I'd share them: ;;--------------------- ;; Rect Off/On/Inv ;;--------------------- RectOff: ;;Clears a rectangle on the buffer ;;IN: ;; D contains x ;; E contains width ;; H contains y ;; L contains height ;;DESTROYS: All, OP1, 1st byte of OP2 call GetRectLine ld a, 12 sub c ld e, a ld d, 0 _rOffLoop1: push de ld de, OP1 push bc ld b, c _rOffLoop2: ld a, (de) cpl and (hl) ld (hl), a inc hl inc de djnz _rOffLoop2 pop bc pop de add hl, de djnz _rOffLoop1 ret RectOn: ;;Draws a rectangle on the buffer ;;IN: ;; D contains x ;; E contains width ;; H contains y ;; L contains height ;;DESTROYS: All, OP1, 1st byte of OP2 call GetRectLine ld a, 12 sub c ld e, a ld d, 0 _rOnLoop1: push de ld de, OP1 push bc ld b, c _rOnLoop2: ld a, (de) or (hl) ld (hl), a inc hl inc de djnz _rOnLoop2 pop bc pop de add hl, de djnz _rOnLoop1 ret RectInv: ;;Inverts a rectangle on the buffer ;;IN: ;; D contains x ;; E contains width ;; H contains y ;; L contains height ;;DESTROYS: All, OP1, 1st byte of OP2 call GetRectLine ld a, 12 sub c ld e, a ld d, 0 _rInvLoop1: push de ld de, OP1 push bc ld b, c _rInvLoop2: ld a, (de) xor (hl) ld (hl), a inc hl inc de djnz _rInvLoop2 pop bc pop de add hl, de djnz _rInvLoop1 ret
GetRectLine: ;;IN: ;; D contains x ;; E contains width ;; H contains y ;; L contains height ;;OUT: ;; HL points to first byte of rectangle in buffer ;; B contains rows ;; C contains columns ;; OP1 [and possibly first byte of OP2] contains mask data for the line xor a or l ret z ;return if height is zero ld a, d add a, e cp d ret z ;return if the width is zero cp 96 jr c, _grl_widthOK ;if width is > 90 ld a, 96 _grl_widthOK: dec a ld e, a call RectLineToOP1 ;c contains width in bytes ;b contains first column ld a, h add a, l add a, -64 jr nc, _grl_heightOK neg add a, l ld l, a _grl_heightOK: ld a, l ;store height in a ld l, h ld h, 0 ld d, h ld e, l add hl, hl add hl, de add hl, hl add hl, hl ld e, b add hl, de ; This next line gets the current buffer address into DE. ; Obviously zBufMode is the buffer flag in zModeFlags, and backBuffer holds the address of my backBuffer. ; Note that it uses $+# format because I use it normally in a #define. I've just written it out here for you to see. bit zBufMode, (iy+zModeFlags) \ jr z, $+7 \ ld de, plotSScreen \ jr $+5 \ ld de, backBuffer add hl, de ;hl points to first byte of rect in buffer ld b, a ;b contains height, c contains width ret
RectLineToOP1: ;;IN: ;; D contains starting x ;; E contains ending x ;;OUT: ;; C contains length of line ;; B contains starting x byte ;; OP1 [and possibly 1st byte of OP2] contains mask data for the line ;;DESTROYS: All except HL ld a, e cp d ld b, 0 ret z srl a srl a srl a ld c, d srl c srl c srl c ld b, c sub c ;a contains num bytes spanned minus 1 ld c, a push bc push hl ld hl, OP1 ;get mask ld a, d and 7 ld b, a ld a, $FF jr z, _skipmask _maskloop: sla a djnz _maskloop _skipmask: ld b, c ld c, a xor a or b jr z, _lastbyte ld a, c _hloop: ld (hl), a inc hl ld a, $FF djnz _hloop ld c, a _lastbyte: ld a, e cpl and 7 ld b, a ld a, $FF jr z, _skipmask2 _maskloop2: add a, a djnz _maskloop2 _skipmask2: and c ld (hl), a pop hl pop bc inc c ret Honestly I'm not sure that these routines are even the best way to do it, but I feel they're pretty good. If anyone has better routines that I could swap these for, then I'd love to see them! EDIT: Thanks to Calc84maniac, the bugs have been fixed and it now works properly!
23
« on: May 26, 2011, 03:17:10 am »
Hey, I'm working on a program that requires me to calculate the intersection of a moving point and a moving line. The point (and each endpoint of the line) has a known x, y, x-velocity, and y-velocity. I am aware that I'll need to integrate this, but I'm not sure how to go about writing that equation in such a way that I can use it in my program. (Speed and size of the resulting equations when translated into code are both obsolete, so don't worry about 'optimizing' calculations.)
Let's assume that an intersection DOES exist between the current point/line locations and the point/line locations after translation from velocity.
Basically, the way I see it I can either integrate between the starting and ending locations of the points and solve for the intersection, or I can have my program just step through and interpolate when it sees that the point has crossed to the other side of the line.
Either way, I'm not sure exactly how to go about writing equations for either method.
Thanks in advance for any help!
24
« on: May 19, 2011, 03:48:03 pm »
If I wanted to write an app instead of just a normal program, what would I have to do differently? More simply: How different is it from writing a program?
25
« on: May 11, 2011, 08:14:39 am »
So, I've been working on this floodfill routine that uses zero stack, and I've finally finished it........or so I thought. It seems to not be working. It just freezes the calc. When I go to debug in wabbitemu it seems to be frozen at $0CAF, on the line jp $0B65
Here's my hopefully-not-too-hard-to-read code:
#include ti83plus.inc #define ProgStart $9D95 #define BUFF1 plotSScreen ; Location of drawing buffer 1 #define BUFF2 0 ; Location of drawing buffer 2 (for grayscale implementation) .org ProgStart-2 .db $BB, $6D
InitTestData: ;; INIT DATA FOR TESTING ld hl, 1 push hl ld hl, 20 push hl PROGRAM_START: ;; L contains the fill color ;; stack: ;; [0]: y-coordinate ;; [1]: x-coordinate ; Get the fill color and save it to (color) ld a, l ld (color), a ; Calculate the byte address for the pixel ; and save it to (addr) pop hl ld a, 64 cp l ret c ld d, 0 ld e, l add hl, hl add hl, de add hl, hl add hl, hl pop de ld a, 96 cp e ret c ld d, 0 srl e srl e srl e ld a, e ld (xbyte), a ;save the byte column to (xbyte) add hl, de ld (addr), hl ; Calculate the bitmask for the pixel ; and save it to (mask) and 7 ld b, a ld a, $80 jr z, ___skiploop ___loop: rrca djnz ___loop ___skiploop: ld (mask), a ; make sure the starting color is not the fill color ld de, BUFF1 add hl, de and (hl) cp 0 jr z, ___zero ld a, 1 ___zero: ld (icolor), a ld b, a ld a, (color) cp b ret z ; return if the starting point is the fill color call TurnByRule Loop: call GetBoundsPainted ld a, b cp 1 jp nz, _1bound cp 2 jp nz, _2bounds cp 3 jp nz, _3bounds cp 4 jp nz, _4bounds _0bounds: call Paint jp EndLoop _4bounds: call Paint ret _3bounds: call GetAddr_Mask or (hl) ld (hl), a ;remove the mark, and reset rule and findpassage to defaults xor a ld (m_mask),a ld (bool), a ld a, $0F jp EndLoop _2bounds: ; jesus, this one will be tough... ld a, (m_mask) cp 0 jr nz, ___skip_place_mark ld a, (bool) and 1 cp 0 jr nz, ___skip_place_mark ld (findpassage), a ld a, (mask) ld (m_mask), a ld hl, (addr) ld (m_addr), hl ld a, (dir) ld (m_dir), a ___skip_place_mark: call MoveByRule ld a, (m_mask) cp 0 jr nz, ___null_mark ld b, a ld a, (mask) cp b jp nz, Loop ld hl, (m_addr) ld a, h ld b, l ld hl, (addr) cp h jp nz, Loop ld a, b cp l jp nz, Loop ld a, (dir) ld b, a ld a, (m_dir) cp b jr z, ___null_mark ld (dir), a ld a, (bool) xor 1 ld (bool), a xor a ld (findpassage), a ___null_mark: xor a ld (m_mask), a ld a, (bool) and 1 cp 0 call nz, Paint jp Loop _1bound: ld a, (bool) and 1 jr z, __1bound_else ld a, 1 ld (findpassage), a jr EndLoop __1bound_else: ; get opposite corners... ; if both are open ld a, (dir) dec a push af ___find_bound: pop af inc a push af call GetPixelInDir ld b, a ld a, (icolor) cp b jr z, ___find_bound pop af inc a inc a call GetDirOffset push af push de ex de, hl dec a call GetDirOffset ld a, h or d ld d, a ld a, l or e ld e, a call GetPixel ld b, a ld a, (icolor) cp b pop hl pop af jr nz, EndLoop inc a call GetDirOffset ld a, h or d ld d, a ld a, l or e ld e, a call GetPixel ld b, a ld a, (icolor) cp b call z, Paint EndLoop: call MoveByRule jp Loop Paint: ;; Paints the current pixel the fill color ld a, (color) cp 0 jr z, __paint_off call GetAddr_Mask or (hl) ld (hl), a bcall(_GRBufCpy) ; just for testing purposes. ret __paint_off: call GetAddr_Mask xor $FF and (hl) ld (hl), a bcall(_GRBufCpy) ; again just for testing purposes. ret
MoveByRule: ;; Move to next location based on rule ;; OUT: ;; B is 0 if no tile was found to move to. Otherwise, non-zero. call GetCurPixel ld b, a ld a, (icolor) cp b jr nz, ___move_dir ; if the current pixel is filled, just move foward ld a, (dir) call GetPixelInDir ld b, a ld a, (icolor) cp b jr nz, ___no_move ; if the pixel at dir is filled, don't move ; check the corner between the pixel at dir and the pixel to the side specified by rule ; if the pixel is on, just move forward ; otherwise move to that pixel ld a, (bool) and 1 ld c, a ld a, (dir) call GetDirOffset push de inc a sub c sub c call GetDirOffset pop hl push af ld a, h or d ld d, a ld a, l or e ld e, a push de call GetPixel ld b, a ld a, (icolor) cp b pop de pop af jr nz, ___move_dir push af call GetPixelAddr ld (mask), a ld a, d ld (xbyte), a ld (addr), hl pop af ld (dir), a call TurnByRule ld b, 1 ret ___move_dir: ld a, (dir) call GetDirOffset call GetPixelAddr ld (mask), a ld a, d ld (xbyte), a ld (addr), hl ld a, (bool) and 1 ld b, a ld a, (dir) inc a sub b sub b call remap_dir ld (dir), a call TurnByRule ld b, 1 ret ___no_move: ld b, 0 ret
TurnByRule: ;; OUT: ;; B is 0 if no tile was found to turn to. Otherwise non-zero. ld b, 4 ___turn_loop: push bc ld a, (dir) call GetPixelInDir ;if pixel is on, dec ld b, a ld a, (icolor) cp b jr z, __chk_side_turn ld a, (bool) and 1 ld b, a ld a, (dir) dec a add a, b add a, b call remap_dir ld (dir), a pop bc djnz ___turn_loop ret __chk_side_turn: ld a, (bool) and 1 ld b, a ld a, (dir) inc a sub b sub b call remap_dir push af call GetPixelInDir ld b, a ld a, (icolor) cp b pop af pop bc ret nz ld (dir), a djnz ___turn_loop ret remap_dir: ;; Maps the value in A to the range of 0 <= A < 4 cp 4 ret nc cp 128 jr c, ___add sub 4 jr remap_dir ___add: add a, 4 jr remap_dir GetDirOffset: ;; IN: ;; A contains the direction call remap_dir ld b, a xor a cp b jr z, __dir_right inc a cp b jr z, __dir_down inc a cp b jr z, __dir_left __dir_up: ld a, b ld de, $0100 ret __dir_right: ld a, b ld de, $0001 ret __dir_down: ld a, b ld de, $FF00 ret __dir_left: ld a, b ld de, $00FF ret GetPixelInDir: ;; IN: ;; A contains the direction call GetDirOffset jp GetPixel
GetAddr_Mask: ;; OUT: ;; HL contains the addr of the pixel ;; A contains the mask of the pixel ld hl, (addr) ld de, BUFF1 add hl, de ld a, (mask) ret
GetBoundsPainted: ;; OUT: ;; B contains the number of painted boundaries ;; bits 0-3 of C contain which bounds are painted (0:right,1:left,2:top,3:bottom) ld bc, 0 push bc ld de, $0001 call GetPixel ld b, a ld a, (icolor) cp b jr nz, $+9 pop bc inc b ld a, 1 or c ld c, a push bc ld de, $00FF call GetPixel ld b, a ld a, (icolor) cp b jr nz, $+9 pop bc inc b ld a, 2 or c ld c, a push bc ld de, $0100 call GetPixel ld b, a ld a, (icolor) cp b jr nz, $+9 pop bc inc b ld a, 4 or c ld c, a push bc ld de, $FF00 call GetPixel ld b, a ld a, (icolor) cp b pop bc ret nz inc b ld a, 8 or c ld c, a ret GetCurPixel: ;; OUT: ;; A contains the color of the current pixel ld hl, (addr) ld de, BUFF1 add hl, de ld a, (mask) and (hl) cp 0 ret z ld a, 1 ret
GetPixelAddr: ;; IN: ;; D contains y offset ;; E contains x offset ;; OUT: ;; HL contains the addr of the pixel ;; A contains the mask for the pixel, or 0 if the pixel is off screen ;; D contains the xbyte for the pixel ld hl, (addr) __x_offset: ld a, (mask) ld b, e ld e, a ld a, b cp 0 jr z, __y_offset cp 1 ld a, (xbyte) jr z, __shiftRight rlc e jr nc, __chk_side dec a jr __chk_side __shiftRight: rrc e jr nc, __chk_side inc a __chk_side: cp 12 jr c, __edgeaddr __y_offset: push af ld a, d cp 0 jr z, __return_addr cp 1 jr z, __shiftUp ld bc, -24 add hl, bc jr __chk_top __shiftUp: ld bc, 12 add hl, bc __chk_top: push hl ld bc, -768 add hl, bc jr c, __edgeaddr __return_addr: pop hl ld a, e pop de ret __edgeaddr: ld a, 0 ret GetPixel: ;; IN: ;; D contains y offset ;; E contains x offset ;; OUT: ;; A contains the color of the pixel (1 or 0) call GetPixelAddr cp 0 jr z, __edgepxl __getpxl: ld de, BUFF1 add hl, de and (hl) ret __edgepxl: ld a, (color) ; pixel is off-screen, so return (color) ret
addr: ; Initial address (no buffer address added) of the byte containing the current pixel (Y*12+X/8) .dw 0 mask: ; Bitmask for the current pixel .db 0 xbyte: ; The byte column containing the pixel (basically X/8) .db 0 dir: .db 0
m_addr: .dw 0 m_mask: .db 0 ;0 means no mark m_xbyte: .db 0 m_dir: .db 0 bool: ; bit 0=rule ;;;;;I dunno why but I had this and findpassage as the same thing before. I still haven't taken all the "and 1" lines out from when I was testing rule... .db 0 findpassage: .db 0 color: ; The fill color (currently 0 or 1. If I implement grayscale it will be 0-3) .db 1 icolor: .db 0 ; The color of the starting fill point .end I wouldn't be surprised if it's something reeeeeally stupid. I'm new to ASM, so I'm sure I made multiple mistakes.
26
« on: May 10, 2011, 04:59:27 pm »
Here's a song that I wrote with my friend. I wrote the words and we collaborated on the music, but he's a better guitarist, so this is him in the recording. I'm a better singer but we live two states away, so this is all him. http://soupinabox.com/nothingatall.mp3
27
« on: May 09, 2011, 07:07:12 pm »
My grandmother died this morning around 9:45. We knew it was coming, as she'd been getting weaker and weaker by the day, and could no longer even swallow food on her own. Two days ago she stopped being able to breathe without assistance. My mom and her brother decided it was time to just stop the assisted oxygen and let her pass. I'm still not sad. Though now I feel bad about not feeling bad about her death...I don't know why I'm posting this here. I guess I just needed to let it out.
28
« on: May 08, 2011, 07:14:17 pm »
Hey I need some help (obviously...otherwise I wouldn't be posting). I'm trying to figure out how to split a cubic Bezier curve into two separate cubic Bezier curves at a specified point on the curve, but I can't seem to figure out how to do it. I know the control points, and therefore I know the equation. Here's the equation as defined by Wikipedia: Where B(t) is a single point on the bezier curve, and P n is the nth control point. Any help would be greatly appreciated! Edit: Added an example of what I'm talking about. I have a full Bezier (top) and I want to split it at a certain point (of which I know the "t" value for the equation) into two independent Bezier curves.
29
« on: May 04, 2011, 04:05:25 am »
I was watching my dad play Ocarina of Time again, and it occurred to me.....there's nothing to tell you that you need to go find the Ocarina in Dampé's grave in order to get into the Forest Temple. You just have to know that that's what you need.
I am aware that if you enter Dampé's house as a kid and read his diary he mentions "something that grows and shrinks," obviously referencing the hookshot that you get from his grave later on, but there's no way to know (unless you've already played the game) that the item that "grows and shrinks" also allows you to pull yourself up to unreachable places.
Is there any real clue that tells you that the next thing you need to get is the hookshot? If there is something, please let me know!
30
« on: April 25, 2011, 08:20:50 pm »
As part of an entry in a dance competition I have to write an essay. The prompt was "Describe the emotion you feel when you take the stage at competition." Here's my entry:
State of Mind I am a performer. You are a performer. Every one of us is a performer. Every smile, every tear, every interaction, and every conversation is a performance. Likewise, every performance is a conversation. When I get on the stage, I become a vessel for energy and expression. It is my duty to give that to my audience and to make them feel what I feel. But that still brings us down to a final question: what do I feel? What is the emotion, the expression, the power that I cannot help but pass on to my audience? The answer to the question is both surprisingly simple, and unimaginably complex. As I wait to enter the stage I feel relaxed and focused. As I walk onto the stage I feel the surge of energy beginning to flow through me, radiating outward through my limbs all the way to the tips of my fingers and toes. But the instant the music starts is when everything really happens. It took me a while to figure out what goes on inside my head when I dance, but I finally realized that it’s not an overwhelming rush of emotion, but rather an overwhelming rush of music. Even when there is no music, I find my own music either in my mind or in my surroundings. The music engulfs me and sends its energy pulsing through my body. It was only after I understood the source of my energy that I also realized that the music is not just a background track for the choreography. In fact, the complete opposite is true: the choreography is a physical representation of the energy that flows from the music. Thus, I, the dancer, am the only possible means of communication between that choreography and the audience. You see, when I get up on stage, I don’t perform for my audience. I communicate with them. The word “perform” implies that I consider myself to be the main focus of my actions, which is simply not true; it’s all about the music. The music is what I have to communicate, and therefore the music is my emotion. Emotion (n.): a natural instinctive state of mind deriving from one's circumstances, mood, or relationship with others.
|