diff --git a/desk.acc/a2d.inc b/desk.acc/a2d.inc index bce7d1f..83dcdda 100644 --- a/desk.acc/a2d.inc +++ b/desk.acc/a2d.inc @@ -174,9 +174,9 @@ A2D_DRAW_TEXT := $19 ; Drawn at last SET_POS as left, baseline ;; .addr data ;; .byte length -A2D_UNK_1A := $1A ; Unknown - used in calculator before window creation, - ; and after destruction +A2D_CONFIGURE_ZP_USE := $1A ; Configure ZP usage by API (speed vs. convenience) ;; (input length 1 byte) + ;; .byte flag (AWS_CZP_*; high bit set = preserve ZP during calls) A2D_SET_CURSOR := $24 ; Change cursor pattern ;; (input not copied) @@ -394,6 +394,10 @@ A2D_CWS_SCROLL_THUMB := 1 << 6 A2D_CWS_SCROLL_TRACK := 1 << 0 A2D_CWS_SCROLL_NORMAL := A2D_CWS_SCROLL_ENABLED | A2D_CWS_SCROLL_THUMB | A2D_CWS_SCROLL_TRACK +;;; Used in A2D_CONFIGURE_ZP_USE +A2D_CZP_PRESERVE := 1<<7 +A2D_CZP_OVERWRITE := 0 + ;;; Used in various state blocks A2D_DEFAULT_MSKAND := $FF A2D_DEFAULT_MSKOR := $00 diff --git a/desk.acc/calc_fixed.s b/desk.acc/calc_fixed.s index 4cc87ea..9402c87 100644 --- a/desk.acc/calc_fixed.s +++ b/desk.acc/calc_fixed.s @@ -198,11 +198,13 @@ id: .byte 0 .endproc query_state_params_id := query_state_params::id - ;; param block for a 1A call -L08D4: .byte $80 +.proc preserve_zp_params +flag: .byte A2D_CZP_PRESERVE +.endproc - ;; param block for a 1A call -L08D5: .byte $00 +.proc overwrite_zp_params +flag: .byte A2D_CZP_OVERWRITE +.endproc ;;; ================================================== ;;; Button Definitions @@ -760,10 +762,10 @@ title: PASCAL_STRING "Calc" init: sta ALTZPON lda LCBANK1 lda LCBANK1 - A2D_CALL $1A, L08D4 ; if NOP'd, display renders like a bar code later + A2D_CALL A2D_CONFIGURE_ZP_USE, preserve_zp_params A2D_CALL A2D_CREATE_WINDOW, create_window_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 A2D_CALL $2B ; reset drawing state? jsr reset_buffer2 @@ -870,7 +872,7 @@ ignore_click: exit: A2D_CALL A2D_DESTROY_WINDOW, destroy_window_params DESKTOP_CALL DESKTOP_REDRAW_ICONS lda ROMIN2 - A2D_CALL $1A, L08D5 ; ??? one byte input value? + A2D_CALL A2D_CONFIGURE_ZP_USE, overwrite_zp_params .proc do_close ;; Copy following routine to ZP and invoke it @@ -1045,7 +1047,7 @@ miss: clc sec rts -: cpx #col4_left-border_lt ; col 4? +: cpx #col4_left-border_lt ; col 4? bcc miss cpx #col4_right+border_br - 1 ; bug in original? bcs miss diff --git a/desk.acc/calculator.s b/desk.acc/calculator.s index bc326f5..1a68106 100644 --- a/desk.acc/calculator.s +++ b/desk.acc/calculator.s @@ -203,11 +203,13 @@ id: .byte 0 .endproc query_state_params_id := query_state_params::id - ;; param block for a 1A call -L08D4: .byte $80 +.proc preserve_zp_params +flag: .byte A2D_CZP_PRESERVE +.endproc - ;; param block for a 1A call -L08D5: .byte $00 +.proc overwrite_zp_params +flag: .byte A2D_CZP_OVERWRITE +.endproc ;;; ================================================== ;;; Button Definitions @@ -793,7 +795,7 @@ cursor: .byte px(%0000000),px(%0000000) ; cursor init: sta ALTZPON lda LCBANK1 lda LCBANK1 - A2D_CALL $1A, L08D4 ; if NOP'd, display renders like a bar code later + A2D_CALL A2D_CONFIGURE_ZP_USE, preserve_zp_params A2D_CALL A2D_CREATE_WINDOW, create_window_params A2D_CALL A2D_QUERY_SCREEN, state_params A2D_CALL A2D_SET_STATE, state_params ; set clipping bounds? @@ -915,7 +917,7 @@ exit: lda LCBANK1 A2D_CALL A2D_DESTROY_WINDOW, destroy_window_params DESKTOP_CALL DESKTOP_REDRAW_ICONS lda ROMIN2 - A2D_CALL $1A, L08D5 ; ??? one byte input value? + A2D_CALL A2D_CONFIGURE_ZP_USE, overwrite_zp_params .proc do_close ;; Copy following routine to ZP and invoke it