| Routines

09341: THE 'INITIAL PARAMETERS' SUBROUTINE

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π.
Output
B | Arc count
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.
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.