Add a machinetype identifier to help us quickly identify Apple //e (bit 7) and //e enhanced (bit 6). Use it in conio functions for 80-columns code instead of relying entirely on the __APPLE2ENH__ target. Move videomode() to the apple2 target, and have it return an error if 80-columns hardware is not available - this is a lie for now, it is considered available on //e enhanced, which may not be true, and not available on //e, which may also be not true. An ulterior patch will make that check correctly. Adapt the box/line drawing characters so that one can use MouseText on the apple2 target if it is available, by defining DYN_DRAW_BOX. No change by default: MouseText is considered available on apple2enh and not available on apple2.
62 lines
1.5 KiB
ArmAsm
62 lines
1.5 KiB
ArmAsm
;
|
|
; Oliver Schmidt, 07.09.2009
|
|
;
|
|
; signed char __fastcall__ videomode (unsigned mode);
|
|
;
|
|
.export _videomode
|
|
|
|
.ifndef __APPLE2ENH__
|
|
.import machinetype
|
|
.endif
|
|
|
|
.import returnFFFF
|
|
|
|
.include "apple2.inc"
|
|
.include "mli.inc"
|
|
|
|
|
|
VIDEOMODE_40x24 = $15
|
|
VIDEOMODE_80x24 = $00
|
|
|
|
.segment "LOWCODE"
|
|
|
|
_videomode:
|
|
; Functionally equivalent to previous assumption that
|
|
; __APPLE2ENH__ == 80 columns hardware present. Will be
|
|
; correctly checked in the very near future.
|
|
.ifndef __APPLE2ENH__
|
|
bit machinetype
|
|
bvs set_mode
|
|
|
|
; No 80 column card, return error if requested mode is 80cols
|
|
cmp #VIDEOMODE_40x24
|
|
beq out
|
|
jmp returnFFFF
|
|
set_mode:
|
|
.endif
|
|
|
|
; Get and save current videomode flag
|
|
bit RD80VID
|
|
php
|
|
|
|
; Initializing the 80 column firmware needs the ROM switched
|
|
; in, otherwise it would copy the F8 ROM to the LC (@ $CEF4)
|
|
bit $C082
|
|
|
|
; Call 80 column firmware with ctrl-char code
|
|
jsr $C300
|
|
|
|
; Switch in LC bank 2 for R/O
|
|
bit $C080
|
|
|
|
; Switch in alternate charset again
|
|
sta SETALTCHAR
|
|
|
|
; Return ctrl-char code for setting previous
|
|
; videomode using the saved videomode flag
|
|
lda #VIDEOMODE_40x24
|
|
plp
|
|
bpl out
|
|
lda #VIDEOMODE_80x24
|
|
out: rts ; X was preserved all the way
|