Routines |
Prev: 09090 | Up: Map | Next: 09399 |
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.
|
||||||||
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. |
Prev: 09090 | Up: Map | Next: 09399 |