mirror of
https://github.com/mi57730/a2d.git
synced 2025-02-18 02:30:50 +00:00
Refactor color/mono mode control into new JT entries
This commit is contained in:
parent
b817f5c0b0
commit
3a7d1985b4
9
APIs.md
9
APIs.md
@ -88,7 +88,7 @@ ProDOS MLI call (Y=call, X,A=params addr) *
|
|||||||
|
|
||||||
Copy to buffer
|
Copy to buffer
|
||||||
|
|
||||||
#### `JUMP_TABLE_COPY_FROM_BUF:=` ($4027)
|
#### `JUMP_TABLE_COPY_FROM_BUF` ($4027)
|
||||||
|
|
||||||
Copy from buffer
|
Copy from buffer
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ Show alert in A, options in X
|
|||||||
|
|
||||||
Launch file
|
Launch file
|
||||||
|
|
||||||
#### `JUMP_TABLE_CUR_POINTER` ($4039) *
|
#### `JUMP_TABLE_CUR_POINTER` ($4039)
|
||||||
|
|
||||||
Changes mouse cursor to pointer.
|
Changes mouse cursor to pointer.
|
||||||
|
|
||||||
@ -124,6 +124,11 @@ Changes mouse cursor to watch.
|
|||||||
|
|
||||||
Restore from overlay routine
|
Restore from overlay routine
|
||||||
|
|
||||||
|
#### `JUMP_TABLE_COLOR_MODE` ($4042) *
|
||||||
|
#### `JUMP_TABLE_MONO_MODE` ($4045) *
|
||||||
|
|
||||||
|
Set DHR color or monochrome mode, respectively. DHR monochrome mode is supported natively on the Apple IIgs, and via the AppleColor card and Le Chat Mauve, and is used by default by DeskTop. Desk Accessories that display images or exit DeskTop can can toggle the mode.
|
||||||
|
|
||||||
<!-- ============================================================ -->
|
<!-- ============================================================ -->
|
||||||
|
|
||||||
## DeskTop API
|
## DeskTop API
|
||||||
|
@ -57,6 +57,8 @@ start:
|
|||||||
;; Restore devices DeskTop may have removed
|
;; Restore devices DeskTop may have removed
|
||||||
: jsr restore_device_list
|
: jsr restore_device_list
|
||||||
|
|
||||||
|
jsr JUMP_TABLE_COLOR_MODE
|
||||||
|
|
||||||
;; Restore to normal state
|
;; Restore to normal state
|
||||||
sta ALTZPOFF
|
sta ALTZPOFF
|
||||||
lda ROMIN2
|
lda ROMIN2
|
||||||
@ -68,33 +70,6 @@ start:
|
|||||||
sta LOWSCR
|
sta LOWSCR
|
||||||
sta LORES
|
sta LORES
|
||||||
sta MIXCLR
|
sta MIXCLR
|
||||||
|
|
||||||
;; AppleColor Card - Mode 2 (Color 140x192)
|
|
||||||
sta SET80VID
|
|
||||||
lda AN3_OFF
|
|
||||||
lda AN3_ON
|
|
||||||
lda AN3_OFF
|
|
||||||
lda AN3_ON
|
|
||||||
lda AN3_OFF
|
|
||||||
|
|
||||||
;; IIgs?
|
|
||||||
sec
|
|
||||||
jsr ID_BYTE_FE1F
|
|
||||||
bcc iigs
|
|
||||||
|
|
||||||
;; Le Chat Mauve - COL140 mode
|
|
||||||
;; (AN3 off, HR1 off, HR2 off, HR3 off)
|
|
||||||
;; Skip on IIgs since emulators (KEGS/GSport/GSplus) crash.
|
|
||||||
sta HR2_OFF
|
|
||||||
sta HR3_OFF
|
|
||||||
bcs finish_video
|
|
||||||
|
|
||||||
;; Apple IIgs - DHR Color
|
|
||||||
iigs: lda NEWVIDEO
|
|
||||||
and #<~(1<<5) ; Color
|
|
||||||
sta NEWVIDEO
|
|
||||||
|
|
||||||
finish_video:
|
|
||||||
sta DHIRESOFF
|
sta DHIRESOFF
|
||||||
sta CLRALTCHAR
|
sta CLRALTCHAR
|
||||||
sta CLR80VID
|
sta CLR80VID
|
||||||
|
@ -609,29 +609,7 @@ mode: .byte 0 ; 0 = B&W, $80 = color
|
|||||||
bne done
|
bne done
|
||||||
copy #$80, mode
|
copy #$80, mode
|
||||||
|
|
||||||
;; AppleColor Card - Mode 2 (Color 140x192)
|
jsr JUMP_TABLE_COLOR_MODE
|
||||||
sta SET80VID
|
|
||||||
lda AN3_OFF
|
|
||||||
lda AN3_ON
|
|
||||||
lda AN3_OFF
|
|
||||||
lda AN3_ON
|
|
||||||
lda AN3_OFF
|
|
||||||
|
|
||||||
;; IIgs?
|
|
||||||
jsr test_iigs
|
|
||||||
bcc iigs
|
|
||||||
|
|
||||||
;; Le Chat Mauve - COL140 mode
|
|
||||||
;; (AN3 off, HR1 off, HR2 off, HR3 off)
|
|
||||||
;; Skip on IIgs since emulators (KEGS/GSport/GSplus) crash.
|
|
||||||
sta HR2_OFF
|
|
||||||
sta HR3_OFF
|
|
||||||
bcs done
|
|
||||||
|
|
||||||
;; Apple IIgs - DHR Color
|
|
||||||
iigs: lda NEWVIDEO
|
|
||||||
and #<~(1<<5) ; Color
|
|
||||||
sta NEWVIDEO
|
|
||||||
|
|
||||||
done: rts
|
done: rts
|
||||||
.endproc
|
.endproc
|
||||||
@ -639,46 +617,12 @@ done: rts
|
|||||||
.proc set_bw_mode
|
.proc set_bw_mode
|
||||||
lda mode
|
lda mode
|
||||||
beq done
|
beq done
|
||||||
lda #0
|
copy #0, mode
|
||||||
sta mode
|
|
||||||
|
|
||||||
;; AppleColor Card - Mode 1 (Monochrome 560x192)
|
jsr JUMP_TABLE_MONO_MODE
|
||||||
sta CLR80VID
|
|
||||||
lda AN3_OFF
|
|
||||||
lda AN3_ON
|
|
||||||
lda AN3_OFF
|
|
||||||
lda AN3_ON
|
|
||||||
sta SET80VID
|
|
||||||
lda AN3_OFF
|
|
||||||
|
|
||||||
;; IIgs?
|
|
||||||
jsr test_iigs
|
|
||||||
bcc iigs
|
|
||||||
|
|
||||||
;; Le Chat Mauve - BW560 mode
|
|
||||||
;; (AN3 off, HR1 off, HR2 on, HR3 on)
|
|
||||||
;; Skip on IIgs since emulators (KEGS/GSport/GSplus) crash.
|
|
||||||
sta HR2_ON
|
|
||||||
sta HR3_ON
|
|
||||||
bcs done
|
|
||||||
|
|
||||||
;; Apple IIgs - DHR B&W
|
|
||||||
iigs: lda NEWVIDEO
|
|
||||||
ora #(1<<5) ; B&W
|
|
||||||
sta NEWVIDEO
|
|
||||||
|
|
||||||
done: rts
|
done: rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
;;; Returns with carry clear if IIgs, set otherwise.
|
|
||||||
.proc test_iigs
|
|
||||||
lda ROMIN2
|
|
||||||
sec
|
|
||||||
jsr ID_BYTE_FE1F
|
|
||||||
lda LCBANK1
|
|
||||||
lda LCBANK1
|
|
||||||
rts
|
|
||||||
.endproc
|
|
||||||
|
|
||||||
.include "inc/hires_table.inc"
|
.include "inc/hires_table.inc"
|
||||||
.include "inc/hr_to_dhr.inc"
|
.include "inc/hr_to_dhr.inc"
|
||||||
|
@ -57,6 +57,8 @@ JUMP_TABLE_LAUNCH_FILE := $4036 ; Launch file
|
|||||||
JUMP_TABLE_CUR_POINTER := $4039 ; Changes mouse cursor to pointer *
|
JUMP_TABLE_CUR_POINTER := $4039 ; Changes mouse cursor to pointer *
|
||||||
JUMP_TABLE_CUR_WATCH := $403C ; Changes mouse cursor to watch
|
JUMP_TABLE_CUR_WATCH := $403C ; Changes mouse cursor to watch
|
||||||
JUMP_TABLE_RESTORE_OVL := $403F ; Restore from overlay routine
|
JUMP_TABLE_RESTORE_OVL := $403F ; Restore from overlay routine
|
||||||
|
JUMP_TABLE_COLOR_MODE := $4042 ; Set DHR color mode (IIgs, AppleColor, Le Chat Mauve) *
|
||||||
|
JUMP_TABLE_MONO_MODE := $4045 ; Set DHR mono mode (IIgs, AppleColor, Le Chat Mauve) *
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
;;; Error codes used for alerts which are not ProDOS errors
|
;;; Error codes used for alerts which are not ProDOS errors
|
||||||
|
@ -62,7 +62,9 @@ JT_SHOW_ALERT: jmp DESKTOP_SHOW_ALERT
|
|||||||
JT_LAUNCH_FILE: jmp launch_file
|
JT_LAUNCH_FILE: jmp launch_file
|
||||||
JT_CUR_POINTER: jmp set_pointer_cursor ; *
|
JT_CUR_POINTER: jmp set_pointer_cursor ; *
|
||||||
JT_CUR_WATCH: jmp set_watch_cursor
|
JT_CUR_WATCH: jmp set_watch_cursor
|
||||||
JT_RESTORE_SEF: jmp restore_dynamic_routine
|
JT_RESTORE_OVL: jmp restore_dynamic_routine
|
||||||
|
JT_COLOR_MODE: jmp set_color_mode ; *
|
||||||
|
JT_MONO_MODE: jmp set_mono_mode ; *
|
||||||
|
|
||||||
;; Main Loop
|
;; Main Loop
|
||||||
.proc enter_main_loop
|
.proc enter_main_loop
|
||||||
@ -951,7 +953,6 @@ launch: DESKTOP_RELAY_CALL DT_UNHIGHLIGHT_ALL
|
|||||||
bpl :-
|
bpl :-
|
||||||
addr_call upcase_string, $280
|
addr_call upcase_string, $280
|
||||||
addr_call upcase_string, path
|
addr_call upcase_string, path
|
||||||
jsr restore_device_list
|
|
||||||
copy16 #INVOKER, reset_and_invoke_target
|
copy16 #INVOKER, reset_and_invoke_target
|
||||||
jmp reset_and_invoke
|
jmp reset_and_invoke
|
||||||
|
|
||||||
@ -1395,7 +1396,7 @@ slash_index:
|
|||||||
make_ramcard_prefixed_path := cmd_selector_item_impl::make_ramcard_prefixed_path
|
make_ramcard_prefixed_path := cmd_selector_item_impl::make_ramcard_prefixed_path
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
;;; Get "coped to RAM card" flag from Main LC Bank 2.
|
;;; Get "copied to RAM card" flag from Main LC Bank 2.
|
||||||
|
|
||||||
.proc get_copied_to_ramcard_flag
|
.proc get_copied_to_ramcard_flag
|
||||||
sta ALTZPOFF
|
sta ALTZPOFF
|
||||||
@ -2154,12 +2155,10 @@ start:
|
|||||||
MLI_RELAY_CALL READ, read_params
|
MLI_RELAY_CALL READ, read_params
|
||||||
MLI_RELAY_CALL CLOSE, close_params
|
MLI_RELAY_CALL CLOSE, close_params
|
||||||
|
|
||||||
|
;; Restore devices, stack, graphics, and /RAM
|
||||||
jsr restore_device_list
|
jsr restore_device_list
|
||||||
|
|
||||||
;; Restore machine to text state
|
|
||||||
sta ALTZPOFF
|
sta ALTZPOFF
|
||||||
jsr exit_dhr_mode
|
jsr exit_dhr_mode ; sets ROMIN2
|
||||||
|
|
||||||
jsr maybe_reformat_ram
|
jsr maybe_reformat_ram
|
||||||
|
|
||||||
quit: jmp quit_code_addr
|
quit: jmp quit_code_addr
|
||||||
@ -3523,8 +3522,11 @@ check_drive_flags:
|
|||||||
|
|
||||||
;; also invoked by launcher code
|
;; also invoked by launcher code
|
||||||
.proc reset_and_invoke
|
.proc reset_and_invoke
|
||||||
|
|
||||||
|
;; Restore devices, stack, graphics, and /RAM
|
||||||
|
jsr restore_device_list
|
||||||
sta ALTZPOFF
|
sta ALTZPOFF
|
||||||
jsr exit_dhr_mode
|
jsr exit_dhr_mode ; sets ROMIN2
|
||||||
jsr maybe_reformat_ram
|
jsr maybe_reformat_ram
|
||||||
|
|
||||||
;; also used by launcher code
|
;; also used by launcher code
|
||||||
@ -3533,6 +3535,12 @@ check_drive_flags:
|
|||||||
.endproc
|
.endproc
|
||||||
reset_and_invoke_target := reset_and_invoke::target
|
reset_and_invoke_target := reset_and_invoke::target
|
||||||
|
|
||||||
|
;;; ============================================================
|
||||||
|
|
||||||
|
.proc restore_state_for_exit
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
|
||||||
active_window_view_by:
|
active_window_view_by:
|
||||||
@ -9347,6 +9355,8 @@ done: rts
|
|||||||
;;; Invoked when exiting or launching another program.
|
;;; Invoked when exiting or launching another program.
|
||||||
|
|
||||||
.proc exit_dhr_mode
|
.proc exit_dhr_mode
|
||||||
|
jsr set_color_mode
|
||||||
|
|
||||||
lda ROMIN2
|
lda ROMIN2
|
||||||
jsr SETVID
|
jsr SETVID
|
||||||
jsr SETKBD
|
jsr SETKBD
|
||||||
@ -9357,6 +9367,15 @@ done: rts
|
|||||||
sta LORES
|
sta LORES
|
||||||
sta MIXCLR
|
sta MIXCLR
|
||||||
|
|
||||||
|
sta DHIRESOFF
|
||||||
|
sta CLRALTCHAR
|
||||||
|
sta CLR80VID
|
||||||
|
sta CLR80COL
|
||||||
|
rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
|
.proc set_color_mode
|
||||||
;; AppleColor Card - Mode 2 (Color 140x192)
|
;; AppleColor Card - Mode 2 (Color 140x192)
|
||||||
sta SET80VID
|
sta SET80VID
|
||||||
lda AN3_OFF
|
lda AN3_OFF
|
||||||
@ -9366,8 +9385,7 @@ done: rts
|
|||||||
lda AN3_OFF
|
lda AN3_OFF
|
||||||
|
|
||||||
;; IIgs?
|
;; IIgs?
|
||||||
sec
|
jsr test_iigs
|
||||||
jsr ID_BYTE_FE1F
|
|
||||||
bcc iigs
|
bcc iigs
|
||||||
|
|
||||||
;; Le Chat Mauve - COL140 mode
|
;; Le Chat Mauve - COL140 mode
|
||||||
@ -9375,18 +9393,52 @@ done: rts
|
|||||||
;; Skip on IIgs since emulators (KEGS/GSport/GSplus) crash.
|
;; Skip on IIgs since emulators (KEGS/GSport/GSplus) crash.
|
||||||
sta HR2_OFF
|
sta HR2_OFF
|
||||||
sta HR3_OFF
|
sta HR3_OFF
|
||||||
bcs finish_video
|
bcs done
|
||||||
|
|
||||||
;; Apple IIgs - DHR Color
|
;; Apple IIgs - DHR Color
|
||||||
iigs: lda NEWVIDEO
|
iigs: lda NEWVIDEO
|
||||||
and #<~(1<<5) ; Color
|
and #<~(1<<5) ; Color
|
||||||
sta NEWVIDEO
|
sta NEWVIDEO
|
||||||
|
|
||||||
finish_video:
|
done: rts
|
||||||
sta DHIRESOFF
|
.endproc
|
||||||
sta CLRALTCHAR
|
|
||||||
|
.proc set_mono_mode
|
||||||
|
;; AppleColor Card - Mode 1 (Monochrome 560x192)
|
||||||
sta CLR80VID
|
sta CLR80VID
|
||||||
sta CLR80COL
|
lda AN3_OFF
|
||||||
|
lda AN3_ON
|
||||||
|
lda AN3_OFF
|
||||||
|
lda AN3_ON
|
||||||
|
sta SET80VID
|
||||||
|
lda AN3_OFF
|
||||||
|
|
||||||
|
;; IIgs?
|
||||||
|
jsr test_iigs
|
||||||
|
bcc iigs
|
||||||
|
|
||||||
|
;; Le Chat Mauve - BW560 mode
|
||||||
|
;; (AN3 off, HR1 off, HR2 on, HR3 on)
|
||||||
|
;; Skip on IIgs since emulators (KEGS/GSport/GSplus) crash.
|
||||||
|
sta HR2_ON
|
||||||
|
sta HR3_ON
|
||||||
|
bcs done
|
||||||
|
|
||||||
|
;; Apple IIgs - DHR B&W
|
||||||
|
iigs: lda NEWVIDEO
|
||||||
|
ora #(1<<5) ; B&W
|
||||||
|
sta NEWVIDEO
|
||||||
|
|
||||||
|
done: rts
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
;;; Returns with carry clear if IIgs, set otherwise.
|
||||||
|
.proc test_iigs
|
||||||
|
lda ROMIN2
|
||||||
|
sec
|
||||||
|
jsr ID_BYTE_FE1F
|
||||||
|
lda LCBANK1
|
||||||
|
lda LCBANK1
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
@ -14950,7 +15002,7 @@ start:
|
|||||||
copy ID_BYTE_FBBF, id_FBBF ; IIc ROM version (IIc+ = $05)
|
copy ID_BYTE_FBBF, id_FBBF ; IIc ROM version (IIc+ = $05)
|
||||||
|
|
||||||
;; ... and page in LCBANK1
|
;; ... and page in LCBANK1
|
||||||
: sta ALTZPON
|
sta ALTZPON
|
||||||
lda LCBANK1
|
lda LCBANK1
|
||||||
lda LCBANK1
|
lda LCBANK1
|
||||||
sta SET80COL
|
sta SET80COL
|
||||||
@ -15001,32 +15053,8 @@ end:
|
|||||||
;;; Initialize video
|
;;; Initialize video
|
||||||
|
|
||||||
.scope
|
.scope
|
||||||
;; AppleColor Card - Mode 1 (Monochrome 560x192)
|
jsr desktop_main::set_mono_mode
|
||||||
sta CLR80VID
|
|
||||||
sta AN3_OFF
|
|
||||||
sta AN3_ON
|
|
||||||
sta AN3_OFF
|
|
||||||
sta AN3_ON
|
|
||||||
sta SET80VID
|
|
||||||
sta AN3_OFF
|
|
||||||
|
|
||||||
;; IIgs ?
|
|
||||||
bit machine_type::iigs_flag
|
|
||||||
bmi iigs
|
|
||||||
|
|
||||||
;; Le Chat Mauve - BW560 mode
|
|
||||||
;; (AN3 off, HR1 off, HR2 on, HR3 on)
|
|
||||||
;; Skip on IIgs since emulators (KEGS/GSport/GSplus) crash.
|
|
||||||
sta HR2_ON
|
|
||||||
sta HR3_ON
|
|
||||||
bpl end
|
|
||||||
|
|
||||||
;; Force B&W mode on the IIgs
|
|
||||||
iigs: lda NEWVIDEO
|
|
||||||
ora #(1<<5) ; B&W
|
|
||||||
sta NEWVIDEO
|
|
||||||
;; fall through
|
;; fall through
|
||||||
end:
|
|
||||||
.endscope
|
.endscope
|
||||||
|
|
||||||
;;; ============================================================
|
;;; ============================================================
|
||||||
|
Loading…
x
Reference in New Issue
Block a user