![]() |
Routines |
Prev: 2382 | Up: Map |
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 | 247D | RST $28 | Z | |||||||
247E | DEFB $31 | duplicate: Z, Z | ||||||||
247F | DEFB $28 | sqr: Z, SQR Z | ||||||||
2480 | DEFB $34 | stk_data: Z, SQR Z, 2 | ||||||||
2481 | DEFB $32,$00 | |||||||||
2483 | DEFB $01 | exchange: Z, 2, SQR Z | ||||||||
2484 | DEFB $05 | division: Z, 2/SQR Z | ||||||||
2485 | DEFB $E5 | get_mem_5: Z, 2/SQR Z, G | ||||||||
2486 | DEFB $01 | exchange: Z, G, 2/SQR Z | ||||||||
2487 | DEFB $05 | division: Z, G*SQR Z/2 | ||||||||
2488 | DEFB $2A | abs: Z, G'*SQR Z/2 (G'=ABS G) | ||||||||
2489 | DEFB $38 | end_calc: Z, G'*SQR Z/2=A1, say | ||||||||
248A | CALL FP_TO_A | A1 to A from the stack, if possible. | ||||||||
248D | JR C,USE_252 | If A1 rounds to 256 or more, use 252. | ||||||||
248F | AND $FC | 4*INT (A1/4) to A. | ||||||||
2491 | ADD A,$04 | Add 4, giving the arc-count A. | ||||||||
2493 | JR NC,DRAW_SAVE | Jump if still under 256. | ||||||||
USE_252 | 2495 | LD A,$FC | Here, just use 252. | |||||||
DRAW_SAVE | 2497 | PUSH AF | Now save the arc-count. | |||||||
2498 | CALL STACK_A | Copy it to calculator stack too. | ||||||||
249B | RST $28 | Z, A | ||||||||
249C | DEFB $E5 | get_mem_5: Z, A, G | ||||||||
249D | DEFB $01 | exchange: Z, G, A | ||||||||
249E | DEFB $05 | division: Z, G/A | ||||||||
249F | DEFB $31 | duplicate: Z, G/A, G/A | ||||||||
24A0 | DEFB $1F | sin: Z, G/A, SIN (G/A) | ||||||||
24A1 | DEFB $C4 | st_mem_4: (SIN (G/A) is copied to mem-4) | ||||||||
24A2 | DEFB $02 | delete: Z, G/A | ||||||||
24A3 | DEFB $31 | duplicate: Z, G/A, G/A | ||||||||
24A4 | DEFB $A2 | stk_half: Z, G/A, G/A, 0.5 | ||||||||
24A5 | DEFB $04 | multiply: Z, G/A, G/2*A | ||||||||
24A6 | DEFB $1F | sin: Z, G/A, SIN (G/2*A) | ||||||||
24A7 | DEFB $C1 | st_mem_1: (SIN (G/2*A) is copied to mem-1) | ||||||||
24A8 | DEFB $01 | exchange: Z, SIN (G/2*A), G/A | ||||||||
24A9 | DEFB $C0 | st_mem_0: (G/A is copied to mem-0) | ||||||||
24AA | DEFB $02 | delete: Z, SIN (G/2*A)=S | ||||||||
24AB | DEFB $31 | duplicate: Z, S, S | ||||||||
24AC | DEFB $04 | multiply: Z, S*S | ||||||||
24AD | DEFB $31 | duplicate: Z, S*S, S*S | ||||||||
24AE | DEFB $0F | addition: Z, 2*S*S | ||||||||
24AF | DEFB $A1 | stk_one: Z, 2*S*S, 1 | ||||||||
24B0 | DEFB $03 | subtract: Z, 2*S*S-1 | ||||||||
24B1 | DEFB $1B | negate: Z, 1-2*S*S=COS (G/A) | ||||||||
24B2 | DEFB $C3 | st_mem_3: (COS (G/A) is copied to mem-3) | ||||||||
24B3 | DEFB $02 | delete: Z | ||||||||
24B4 | DEFB $38 | end_calc | ||||||||
24B5 | POP BC | Restore the arc-count to B. | ||||||||
24B6 | RET | Finished. |
Prev: 2382 | Up: Map |