mirror of
https://github.com/mi57730/a2d.git
synced 2025-02-20 02:29:11 +00:00
In fixed calculator, swap ROM in/out only for FP ops, for #36
This commit is contained in:
parent
c9028c41cc
commit
7559715903
@ -74,7 +74,6 @@ save_stack: .byte 0
|
|||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
|
|
||||||
call_init:
|
call_init:
|
||||||
lda ROMIN2
|
|
||||||
jmp init
|
jmp init
|
||||||
|
|
||||||
;; Used after a drag-and-drop is completed;
|
;; Used after a drag-and-drop is completed;
|
||||||
@ -99,8 +98,6 @@ call_init:
|
|||||||
bmi :+
|
bmi :+
|
||||||
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
||||||
|
|
||||||
: lda ROMIN2
|
|
||||||
|
|
||||||
;; Redraw window after drag
|
;; Redraw window after drag
|
||||||
lda #window_id
|
lda #window_id
|
||||||
jsr check_visibility_and_draw_window
|
jsr check_visibility_and_draw_window
|
||||||
@ -757,34 +754,6 @@ create_window_params_top := create_window_params::top
|
|||||||
|
|
||||||
title: PASCAL_STRING "Calc"
|
title: PASCAL_STRING "Calc"
|
||||||
|
|
||||||
cursor: .byte px(%0000000),px(%0000000) ; cursor
|
|
||||||
.byte px(%0100000),px(%0000000)
|
|
||||||
.byte px(%0110000),px(%0000000)
|
|
||||||
.byte px(%0111000),px(%0000000)
|
|
||||||
.byte px(%0111100),px(%0000000)
|
|
||||||
.byte px(%0111110),px(%0000000)
|
|
||||||
.byte px(%0111111),px(%0000000)
|
|
||||||
.byte px(%0101100),px(%0000000)
|
|
||||||
.byte px(%0000110),px(%0000000)
|
|
||||||
.byte px(%0000110),px(%0000000)
|
|
||||||
.byte px(%0000011),px(%0000000)
|
|
||||||
.byte px(%0000000),px(%0000000)
|
|
||||||
|
|
||||||
.byte px(%1100000),px(%0000000) ; mask
|
|
||||||
.byte px(%1110000),px(%0000000)
|
|
||||||
.byte px(%1111000),px(%0000000)
|
|
||||||
.byte px(%1111100),px(%0000000)
|
|
||||||
.byte px(%1111110),px(%0000000)
|
|
||||||
.byte px(%1111111),px(%0000000)
|
|
||||||
.byte px(%1111111),px(%1000000)
|
|
||||||
.byte px(%1111111),px(%0000000)
|
|
||||||
.byte px(%0001111),px(%0000000)
|
|
||||||
.byte px(%0001111),px(%0000000)
|
|
||||||
.byte px(%0000111),px(%1000000)
|
|
||||||
.byte px(%0000111),px(%1000000)
|
|
||||||
|
|
||||||
.byte 1, 1 ; hotspot
|
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
;;; DA Init
|
;;; DA Init
|
||||||
|
|
||||||
@ -796,8 +765,7 @@ init: sta ALTZPON
|
|||||||
A2D_CALL A2D_QUERY_SCREEN, state_params
|
A2D_CALL A2D_QUERY_SCREEN, state_params
|
||||||
A2D_CALL A2D_SET_STATE, state_params ; set clipping bounds?
|
A2D_CALL A2D_SET_STATE, state_params ; set clipping bounds?
|
||||||
A2D_CALL $2B ; reset drawing state?
|
A2D_CALL $2B ; reset drawing state?
|
||||||
lda #$01
|
|
||||||
lda ROMIN2
|
|
||||||
jsr reset_buffer2
|
jsr reset_buffer2
|
||||||
|
|
||||||
lda #window_id
|
lda #window_id
|
||||||
@ -832,21 +800,21 @@ loop: lda adjust_txtptr_copied-1,x
|
|||||||
sta COUT_HOOK+1
|
sta COUT_HOOK+1
|
||||||
|
|
||||||
lda #1
|
lda #1
|
||||||
jsr FLOAT
|
jsr CALL_FLOAT
|
||||||
ldx #<farg
|
ldx #<farg
|
||||||
ldy #>farg
|
ldy #>farg
|
||||||
jsr ROUND
|
jsr CALL_ROUND
|
||||||
lda #0 ; set FAC to 0
|
lda #0 ; set FAC to 0
|
||||||
jsr FLOAT
|
jsr CALL_FLOAT
|
||||||
jsr FADD
|
jsr CALL_FADD
|
||||||
jsr FOUT
|
jsr CALL_FOUT
|
||||||
lda #$07
|
lda #$07
|
||||||
jsr FMULT
|
jsr CALL_FMULT
|
||||||
lda #$00
|
lda #$00
|
||||||
jsr FLOAT
|
jsr CALL_FLOAT
|
||||||
ldx #<farg
|
ldx #<farg
|
||||||
ldy #>farg
|
ldy #>farg
|
||||||
jsr ROUND
|
jsr CALL_ROUND
|
||||||
|
|
||||||
tsx
|
tsx
|
||||||
stx saved_stack
|
stx saved_stack
|
||||||
@ -856,10 +824,6 @@ loop: lda adjust_txtptr_copied-1,x
|
|||||||
lda #'C'
|
lda #'C'
|
||||||
jsr process_key
|
jsr process_key
|
||||||
|
|
||||||
;; previous draws mangle the cursor (why???)
|
|
||||||
A2D_CALL A2D_SET_CURSOR, cursor ; Why not use JUMP_TABLE_CUR_POINTER ?
|
|
||||||
;; fall through
|
|
||||||
|
|
||||||
;;; ==================================================
|
;;; ==================================================
|
||||||
;;; Input Loop
|
;;; Input Loop
|
||||||
|
|
||||||
@ -880,10 +844,7 @@ input_loop:
|
|||||||
;;; On Click
|
;;; On Click
|
||||||
|
|
||||||
on_click:
|
on_click:
|
||||||
lda LCBANK1
|
|
||||||
lda LCBANK1
|
|
||||||
A2D_CALL A2D_QUERY_TARGET, target_params
|
A2D_CALL A2D_QUERY_TARGET, target_params
|
||||||
lda ROMIN2
|
|
||||||
lda target_params::elem
|
lda target_params::elem
|
||||||
cmp #A2D_ELEM_CLIENT ; Less than CLIENT is MENU or DESKTOP
|
cmp #A2D_ELEM_CLIENT ; Less than CLIENT is MENU or DESKTOP
|
||||||
bcc ignore_click
|
bcc ignore_click
|
||||||
@ -906,9 +867,7 @@ ignore_click:
|
|||||||
A2D_CALL A2D_CLOSE_CLICK, close_click_params
|
A2D_CALL A2D_CLOSE_CLICK, close_click_params
|
||||||
lda close_click_params::state
|
lda close_click_params::state
|
||||||
beq ignore_click
|
beq ignore_click
|
||||||
exit: lda LCBANK1
|
exit: A2D_CALL A2D_DESTROY_WINDOW, destroy_window_params
|
||||||
lda LCBANK1
|
|
||||||
A2D_CALL A2D_DESTROY_WINDOW, destroy_window_params
|
|
||||||
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
DESKTOP_CALL DESKTOP_REDRAW_ICONS
|
||||||
lda ROMIN2
|
lda ROMIN2
|
||||||
A2D_CALL $1A, L08D5 ; ??? one byte input value?
|
A2D_CALL $1A, L08D5 ; ??? one byte input value?
|
||||||
@ -936,10 +895,7 @@ loop: lda routine,x
|
|||||||
bne ignore_click
|
bne ignore_click
|
||||||
lda #window_id
|
lda #window_id
|
||||||
sta drag_params::id
|
sta drag_params::id
|
||||||
lda LCBANK1
|
|
||||||
lda LCBANK1
|
|
||||||
A2D_CALL A2D_DRAG_WINDOW, drag_params
|
A2D_CALL A2D_DRAG_WINDOW, drag_params
|
||||||
lda ROMIN2
|
|
||||||
jsr redraw_screen_and_window
|
jsr redraw_screen_and_window
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -1117,10 +1073,10 @@ miss: clc
|
|||||||
lda #'c'
|
lda #'c'
|
||||||
jsr depress_button
|
jsr depress_button
|
||||||
lda #$00
|
lda #$00
|
||||||
jsr FLOAT
|
jsr CALL_FLOAT
|
||||||
ldx #<farg
|
ldx #<farg
|
||||||
ldy #>farg
|
ldy #>farg
|
||||||
jsr ROUND
|
jsr CALL_ROUND
|
||||||
lda #'='
|
lda #'='
|
||||||
sta calc_op
|
sta calc_op
|
||||||
lda #0
|
lda #0
|
||||||
@ -1376,7 +1332,7 @@ rts3: rts
|
|||||||
lda calc_g
|
lda calc_g
|
||||||
bne reparse
|
bne reparse
|
||||||
lda #$00
|
lda #$00
|
||||||
jsr FLOAT
|
jsr CALL_FLOAT
|
||||||
jmp do_op
|
jmp do_op
|
||||||
|
|
||||||
: lda calc_g
|
: lda calc_g
|
||||||
@ -1390,7 +1346,7 @@ reparse:lda #<text_buffer1
|
|||||||
lda #>text_buffer1
|
lda #>text_buffer1
|
||||||
sta TXTPTR+1
|
sta TXTPTR+1
|
||||||
jsr adjust_txtptr
|
jsr adjust_txtptr
|
||||||
jsr FIN
|
jsr CALL_FIN
|
||||||
|
|
||||||
do_op: pla
|
do_op: pla
|
||||||
ldx calc_op
|
ldx calc_op
|
||||||
@ -1400,22 +1356,22 @@ do_op: pla
|
|||||||
|
|
||||||
cpx #'+'
|
cpx #'+'
|
||||||
bne :+
|
bne :+
|
||||||
jsr FADD
|
jsr CALL_FADD
|
||||||
jmp post_op
|
jmp post_op
|
||||||
|
|
||||||
: cpx #'-'
|
: cpx #'-'
|
||||||
bne :+
|
bne :+
|
||||||
jsr FSUB
|
jsr CALL_FSUB
|
||||||
jmp post_op
|
jmp post_op
|
||||||
|
|
||||||
: cpx #'*'
|
: cpx #'*'
|
||||||
bne :+
|
bne :+
|
||||||
jsr FMULT
|
jsr CALL_FMULT
|
||||||
jmp post_op
|
jmp post_op
|
||||||
|
|
||||||
: cpx #'/'
|
: cpx #'/'
|
||||||
bne :+
|
bne :+
|
||||||
jsr FDIV
|
jsr CALL_FDIV
|
||||||
jmp post_op
|
jmp post_op
|
||||||
|
|
||||||
: cpx #'='
|
: cpx #'='
|
||||||
@ -1428,8 +1384,8 @@ do_op: pla
|
|||||||
.proc post_op
|
.proc post_op
|
||||||
ldx #<farg ; after the FP operation is done
|
ldx #<farg ; after the FP operation is done
|
||||||
ldy #>farg
|
ldy #>farg
|
||||||
jsr ROUND
|
jsr CALL_ROUND
|
||||||
jsr FOUT ; output as null-terminated string to FBUFFR
|
jsr CALL_FOUT ; output as null-terminated string to FBUFFR
|
||||||
|
|
||||||
ldy #0 ; count the eize
|
ldy #0 ; count the eize
|
||||||
sloop: lda FBUFFR,y
|
sloop: lda FBUFFR,y
|
||||||
@ -1673,6 +1629,8 @@ draw_title_bar:
|
|||||||
;; Traps FP error via call to $36 from MON.COUT, resets stack
|
;; Traps FP error via call to $36 from MON.COUT, resets stack
|
||||||
;; and returns to the input loop.
|
;; and returns to the input loop.
|
||||||
.proc error_hook
|
.proc error_hook
|
||||||
|
lda LCBANK1
|
||||||
|
lda LCBANK1
|
||||||
jsr reset_buffers_and_display
|
jsr reset_buffers_and_display
|
||||||
bit offscreen_flag
|
bit offscreen_flag
|
||||||
bmi :+
|
bmi :+
|
||||||
@ -1704,4 +1662,93 @@ end: rts
|
|||||||
.endproc
|
.endproc
|
||||||
sizeof_adjust_txtptr_copied := * - adjust_txtptr_copied
|
sizeof_adjust_txtptr_copied := * - adjust_txtptr_copied
|
||||||
|
|
||||||
|
|
||||||
|
CALL_FLOAT:
|
||||||
|
pha
|
||||||
|
lda ROMIN2
|
||||||
|
pla
|
||||||
|
jsr FLOAT
|
||||||
|
pha
|
||||||
|
lda LCBANK1
|
||||||
|
lda LCBANK1
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
|
||||||
|
CALL_FADD:
|
||||||
|
pha
|
||||||
|
lda ROMIN2
|
||||||
|
pla
|
||||||
|
jsr FADD
|
||||||
|
pha
|
||||||
|
lda LCBANK1
|
||||||
|
lda LCBANK1
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
|
||||||
|
CALL_FSUB:
|
||||||
|
pha
|
||||||
|
lda ROMIN2
|
||||||
|
jsr FSUB
|
||||||
|
pha
|
||||||
|
lda LCBANK1
|
||||||
|
lda LCBANK1
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
|
||||||
|
CALL_FMULT:
|
||||||
|
pha
|
||||||
|
lda ROMIN2
|
||||||
|
pla
|
||||||
|
jsr FMULT
|
||||||
|
pha
|
||||||
|
lda LCBANK1
|
||||||
|
lda LCBANK1
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
|
||||||
|
CALL_FDIV:
|
||||||
|
pha
|
||||||
|
lda ROMIN2
|
||||||
|
pla
|
||||||
|
jsr FDIV
|
||||||
|
pha
|
||||||
|
lda LCBANK1
|
||||||
|
lda LCBANK1
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
|
||||||
|
CALL_FIN:
|
||||||
|
pha
|
||||||
|
lda ROMIN2
|
||||||
|
pla
|
||||||
|
jsr FIN
|
||||||
|
pha
|
||||||
|
lda LCBANK1
|
||||||
|
lda LCBANK1
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
|
||||||
|
CALL_FOUT:
|
||||||
|
pha
|
||||||
|
lda ROMIN2
|
||||||
|
pla
|
||||||
|
jsr FOUT
|
||||||
|
pha
|
||||||
|
lda LCBANK1
|
||||||
|
lda LCBANK1
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
|
||||||
|
CALL_ROUND:
|
||||||
|
pha
|
||||||
|
lda ROMIN2
|
||||||
|
pla
|
||||||
|
jsr ROUND
|
||||||
|
pha
|
||||||
|
lda LCBANK1
|
||||||
|
lda LCBANK1
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
da_end := *
|
da_end := *
|
||||||
|
Loading…
x
Reference in New Issue
Block a user