Prev: 09090 Up: Map Next: 09399
09341: THE 'INITIAL PARAMETERS' SUBROUTINE
Used by the routines at CIRCLE and DRAW.
This subroutine is called by both CIRCLE and DRAW to set their initial parameters. It is called by CIRCLE with X, Y and the radius Z on the top of the stack, reading upwards. It is called by DRAW with its own X, Y, SIN (G/2) and Z, as defined in DRAW i., on the top of the stack. In what follows the stack is only shown from Z upwards.
The subroutine returns in B the arc-count A as explained in both CIRCLE and DRAW, and in mem-0 to mem-5 the quantities G/A, SIN (G/2*A), 0, COS (G/A), SIN (G/A) and G. For a circle, G must be taken to be equal to 2π.
Input
Output
CD_PRMS1 09341 RST 40 Z
09342 DEFB 49 duplicate: Z, Z
09343 DEFB 40 sqr: Z, SQR Z
09344 DEFB 52 stk_data: Z, SQR Z, 2
09345 DEFB 50,0
09347 DEFB 1 exchange: Z, 2, SQR Z
09348 DEFB 5 division: Z, 2/SQR Z
09349 DEFB 229 get_mem_5: Z, 2/SQR Z, G
09350 DEFB 1 exchange: Z, G, 2/SQR Z
09351 DEFB 5 division: Z, G*SQR Z/2
09352 DEFB 42 abs: Z, G'*SQR Z/2 (G'=ABS G)
09353 DEFB 56 end_calc: Z, G'*SQR Z/2=A1, say
09354 CALL FP_TO_A A1 to A from the stack, if possible.
09357 JR C,USE_252 If A1 rounds to 256 or more, use 252.
09359 AND 252 4*INT (A1/4) to A.
09361 ADD A,4 Add 4, giving the arc-count A.
09363 JR NC,DRAW_SAVE Jump if still under 256.
USE_252 09365 LD A,252 Here, just use 252 decimal.
DRAW_SAVE 09367 PUSH AF Now save the arc-count.
09368 CALL STACK_A Copy it to calculator stack too.
09371 RST 40 Z, A
09372 DEFB 229 get_mem_5: Z, A, G
09373 DEFB 1 exchange: Z, G, A
09374 DEFB 5 division: Z, G/A
09375 DEFB 49 duplicate: Z, G/A, G/A
09376 DEFB 31 sin: Z, G/A, SIN (G/A)
09377 DEFB 196 st_mem_4: (SIN (G/A) is copied to mem-4)
09378 DEFB 2 delete: Z, G/A
09379 DEFB 49 duplicate: Z, G/A, G/A
09380 DEFB 162 stk_half: Z, G/A, G/A, 0.5
09381 DEFB 4 multiply: Z, G/A, G/2*A
09382 DEFB 31 sin: Z, G/A, SIN (G/2*A)
09383 DEFB 193 st_mem_1: (SIN (G/2*A) is copied to mem-1)
09384 DEFB 1 exchange: Z, SIN (G/2*A), G/A
09385 DEFB 192 st_mem_0: (G/A is copied to mem-0)
09386 DEFB 2 delete: Z, SIN (G/2*A)=S
09387 DEFB 49 duplicate: Z, S, S
09388 DEFB 4 multiply: Z, S*S
09389 DEFB 49 duplicate: Z, S*S, S*S
09390 DEFB 15 addition: Z, 2*S*S
09391 DEFB 161 stk_one: Z, 2*S*S, 1
09392 DEFB 3 subtract: Z, 2*S*S-1
09393 DEFB 27 negate: Z, 1-2*S*S=COS (G/A)
09394 DEFB 195 st_mem_3: (COS (G/A) is copied to mem-3)
09395 DEFB 2 delete: Z
09396 DEFB 56 end_calc
09397 POP BC Restore the arc-count to B.
09398 RET Finished.
Prev: 09090 Up: Map Next: 09399