### Author Topic: Routines  (Read 225477 times)

0 Members and 1 Guest are viewing this topic.

#### Hayleia

• Programming Absol
• Coder Of Tomorrow
• LV12 Extreme Poster (Next: 5000)
• Posts: 3367
• Rating: +393/-7
##### Re: Routines
« Reply #615 on: February 10, 2013, 02:19:35 am »
Due to multiple requests, I wrote an axe clock library, LIBCLOCK. See CLOCKTST for example code.

Axe Code Function on calculators with a clock (function on calculators without a clock).

Main functions:
ClkOf() Turns the clock off (does nothing).
ClkOn() Turns the clock on (does nothing).
IsClk() Returns 1 if the clock is on, 0 if off (returns 0).
°A:GetDT() Gets the current date and time. Sets 6 consecutive variables, or 6 consecutive words, starting at the passed in address.  In this example, A = year, B = month, C = day, D = hour, E = minute, F = second (returns midnight of January 1, 1997). Do not pass in °r₁.
SetDT(year,month,day,hour,minute,second) Sets the current date and time (does nothing relatively slowly).
DOfWk(year,month,day) Returns the day of the week of the specified date, 1 = Sunday, ..., 7 = Saturday.

Low level functions:
°A:GetRT() Gets the current raw time. Sets 2 consecutive variables, or 2 consecutive words, starting at the passed in address.  In this example, AB = seconds since January 1, 1997 (AB = 0).
°A:SetRT() Sets the current raw time.  Uses 2 consecutive variables, or 2 consecutive words, starting at the passed in address (does nothing).

Bonus functions:
Mul21(r₁,r₂,r₃) Multiplies r₁r₂ by r₃ and stores the result in r₁r₂.
Div21(r₁,r₂,r₃) Divides r₁r₂ by r₃ and stores the result in r₁r₂, and the remainder in r₄. Edit: I think r₃ must be < 256.
But why does setting it does nothing (as mentionned in your post) ?
I own: 83+ ; 84+SE ; 76.fr ; CX CAS ; Prizm ; 84+CSE
Sorry if I answer with something that seems unrelated, English is not my primary language and I might not have understood well. Sorry if I make English mistakes too.

#### Matrefeytontias

• Axe roxxor (kinda)
• LV10 31337 u53r (Next: 2000)
• Posts: 1982
• Rating: +310/-12
• Axe roxxor
##### Re: Routines
« Reply #616 on: July 04, 2013, 06:04:00 am »
Mega bump,

I wrote this for TheMachine02's GLib, and thought it could be useful to others (even if I doubt so ). So here's a clipped triangle filler that takes arguments between -512 and 511 (might be a bit inaccurate though, and is surely unoptimized) :

Triangle(x1,y1,x2,y2,x3,y3)

E90D3→°DX1+2→°DX2+2→°SX1+2→°SX2

Lbl Triangle
If r2>>r4
Exch(°r1,°r3,4)
End
If r4>>r6
Exch(°r3,°r5,4)
End
If r2>>r4
Exch(°r1,°r3,4)
End

If r4-r2→X
r3-r1*64//X
Else
r3-r1*64
End
→DX1
If r6-r2→X
r5-r1*64//X
Else
r5-r1*64
End
→DX2

r1*64→SX1→SX2
r2→Y

For(2)
While 1
If Y<64
!If SX1·SX2ee0
min(max(SX1,0)r/64,95)→Z
min(max(SX2,0)r/64,95)→Θ
.Remember that HLine(Y,X1,X) is broken in 1.2.1, so remember to update it with the next versions of Axe
Line(Z,Y,Θ,Y)
End
End
DX1+SX1→SX1
DX2+SX2→SX2
Y++
EndIf Y+1>>r4
If r6-r4→X
r5-r3*64//X
Else
r5-r3*64
End
→DX1
r6→r4
End

And yeah. This routine uses 10.6 fixed point numbers.
« Last Edit: July 04, 2013, 06:04:42 am by Matrefeytontias »

#### TheMachine02

• LV6 Super Member (Next: 500)
• Posts: 452
• Rating: +105/-0
• me = EF99+F41A
##### Re: Routines
« Reply #617 on: July 04, 2013, 12:20:06 pm »
there is just a little problem in your routine  , wich is, in other part very good
You don't do a perfect clipping due to one line :

Code: [Select]
If Y<64
who let enter in the drawing part even if y<0 ...
you can do this instead :

Code: [Select]
!If Y.π1111111111000000
if y<0 or Y>64 it will not draw anything
« Last Edit: July 04, 2013, 12:21:03 pm by TheMachine02 »
AXE/asm programmer - unleash the power of z80 //C++//C

epic 3D things http://www.ntu.edu.sg/home/ehchua/programming/opengl/CG_BasicsTheory.html

#### Matrefeytontias

• Axe roxxor (kinda)
• LV10 31337 u53r (Next: 2000)
• Posts: 1982
• Rating: +310/-12
• Axe roxxor
##### Re: Routines
« Reply #618 on: July 04, 2013, 12:26:23 pm »
You're wrong : I test if the unsigned value of Y is lesser than 64. If Y is lesser than 0, the 15th bit will be set, making it at least 32768. So it's okay. I would have been wrong if I had used :

If Y<<64

#### TheMachine02

• LV6 Super Member (Next: 500)
• Posts: 452
• Rating: +105/-0
• me = EF99+F41A
##### Re: Routines
« Reply #619 on: July 04, 2013, 12:30:29 pm »
Oh yes effectively.   I take Y<64 for Y<<64
I don't know if   !If Y.π1111111111000000  is more faster  ,thought
AXE/asm programmer - unleash the power of z80 //C++//C

epic 3D things http://www.ntu.edu.sg/home/ehchua/programming/opengl/CG_BasicsTheory.html

#### Matrefeytontias

• Axe roxxor (kinda)
• LV10 31337 u53r (Next: 2000)
• Posts: 1982
• Rating: +310/-12
• Axe roxxor
##### Re: Routines
« Reply #620 on: July 04, 2013, 12:31:16 pm »
I don't know ... I guess we'll have to test it (I won't do it though )

#### Streetwalrus

• LV12 Extreme Poster (Next: 5000)
• Posts: 3821
• Rating: +80/-8
##### Re: Routines
« Reply #621 on: August 09, 2013, 05:32:08 pm »
Asm(DB02CB7FC8)
This opcode is a conditional Return. If run on an 83+BE it will return else it will continue along. More efficient than Return!If Full:Normal.

#### nikitouzz

• Posts: 215
• Rating: +22/-1
##### Re: Routines
« Reply #622 on: May 08, 2014, 04:49:25 pm »
Runer112 : "Decimal display: Disp Pointer to number to display sub(DEC) - Note that this does not return a string of a fixed length padded on the left with spaces like the usual Disp ►Dec. The string returned has any leading zeros clipped and consists only of the number itself."

When i try to use the fonctions dec.... text(32,71,°Osub(DEC^^r)) the programm don't function and the calto crash.... but on another programme, it work...

Then i want replace all the E8499 and Eblabla by L2 and L2+100 i've make this :

L2→r1
L2+100→r2
and i replace all the E... by r1 or r2 but... the calculator crash...

Code: [Select]
:Lbl DEC :L2→r1 :L2+100→r2 :  conj(,R1,3) :  0→{R2}r :  Fill(1+R2,8) :  R2→{10+R1}r :  0+R1→r1 :  4+R1→r2 :  0+R1→r3 :  ([806967]) :  sub(DE0) :  ([C0BDF0]) :  sub(DE0) :  ([6079FE]) :  sub(DE0) :  ([F0D8FF]) :  sub(DE0) :  ([18FCFF]) :  sub(DE0) :  ([9CFFFF]) :  sub(DE0) :  ([F6FFFF]) :  sub(DE0) :  ([FFFFFF]) :  sub(DE0) :  R2 :  Return :  Lbl DE0 :  conj(,4+R1,3) :  '0'-1→{8+R1}r :  Lbl DE1 :  {8+R1}r+1→{8+R1}r :  If {2+R1}≥{sub(ADD)} :       Goto DE1 :  End :  sub(SUB) :  Return!If {4+R1}+1/256+{8+R1}r-'0'+{R2}r :     {8+R1}r→{{10+R1}r}+1→{10+R1}r :Return

PS : i don't use L2 in my programme
« Last Edit: May 08, 2014, 05:05:53 pm by nikitouzz »
mes records personels :

2x2x2 : 2.18 secondes / 2x2x2 une main : 21.15 secondes / 2x2x2 yeux bandés : 47.59
3x3x3 : 5.97 secondes / 3x3x3 une main : 49.86 secondes
4x4x4 : 1.49 minutes / 4x4x4 une main : 6.50 minutes
5x5x5 : 4.10 minutes / 5x5x5 une main : 18.02 minutes
6x6x6 : 8.10 minutes
7x7x7 : 16.03 minutes
9x9x9 : 58.26 minutes

megaminx : 5.59 minutes / pyraminx : 7.91 secondes / square-one : 1.07 minutes