.include "../platform/c64header.oph" .include "../platform/c64kernal.oph" * `print_str angle_prompt jsr get_num `fp_store theta ;; Range-check result: 1-90 `fp_subtract f_1 jsr fac1_sign cmp #$ff beq - `fp_load theta `fp_subtract f_90 jsr fac1_sign cmp #$01 beq - ;; Range check passes, convert to radians `fp_load theta `fp_multiply f_pi `fp_divide f_180 `fp_store theta * `print_str speed_prompt jsr get_num `fp_store speed ;; Range-check result: 1-100 `fp_subtract f_1 jsr fac1_sign cmp #$ff beq - `fp_load speed `fp_subtract f_100 jsr fac1_sign cmp #$01 beq - `fp_load theta jsr sin_fac1 `fp_multiply speed `fp_store v_y `fp_load theta jsr cos_fac1 `fp_multiply speed `fp_store v_x ;; Compute impact time `fp_load v_y `print_str impact_time_1 `fp_divide f_0_5 `fp_divide f_9_8 `fp_store time jsr fac1out `print_str impact_time_2 `print_str impact_point_1 `fp_load time `fp_multiply v_x jsr fac1out `print_str impact_point_2 `print_str height_1 `fp_load f_0_5 `fp_multiply v_y `fp_multiply v_y `fp_divide f_9_8 jsr fac1out `print_str impact_point_2 rts angle_prompt: .byte "CHOOSE FIRING ANGLE (1-90): ",0 speed_prompt: .byte "CHOOSE FIRING SPEED (1-100): ",0 impact_time_1: .byte "IMPACT AT ",0 impact_time_2: .byte " SECONDS",13,0 impact_point_1: .byte "IMPACT AT ",0 impact_point_2: .byte " METERS",13,0 height_1: .byte "MAXIMUM HEIGHT OF ",0 f_0_125: .cbmfloat "0.125" f_9_8: .cbmfloat "9.8" f_90: .cbmfloat "90" f_100: .cbmfloat "100" f_180: .cbmfloat "180" get_num: .scope lda #$00 ; Turn on blinky cursor sta $cc sta numindx _lp: jsr getin cmp #$14 ; DEL? bne + ldx numindx beq _lp dex stx numindx jsr $ffd2 jmp _lp * cmp #$0d ; RETURN? bne + ldx numindx beq _lp bne _got * cmp #'0 ; digit? bcc _lp cmp #'9+1 bcs _lp ldx numindx ; Room for character? cpx #$0f beq _lp sta numbuf,x inx stx numindx jsr $ffd2 jmp _lp _got: ldx numindx lda #$00 sta numbuf,x lda #$01 ; Disable blinky cursor again sta $cc lda #$20 jsr $ffd2 lda #$0d jsr $ffd2 lda #numbuf jmp ld_fac1_string .scend .include "../platform/libbasic64.oph" ;;; Post-program data space .space numindx 1 .space numbuf 16 .space speed 5 .space theta 5 .space v_x 5 .space v_y 5 .space time 5