Apple2: Make 80-columns support dynamic on apple2 target

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.
This commit is contained in:
Colin Leroy-Mira
2025-05-27 16:31:23 +02:00
committed by Oliver Schmidt
parent cd92e4f0af
commit 816666615b
23 changed files with 523 additions and 107 deletions

View File

@@ -9,6 +9,10 @@
.export _mouse_def_callbacks
.ifndef __APPLE2ENH__
.import machinetype
.endif
.include "apple2.inc"
; ------------------------------------------------------------------------
@@ -42,11 +46,14 @@ cursor = '+' | $40 ; Flashing crosshair
.endif
getcursor:
.ifdef __APPLE2ENH__
.ifndef __APPLE2ENH__
bit machinetype
bpl column
.endif
bit RD80VID ; In 80 column mode?
bpl column ; No, skip bank switching
switch: bit LOWSCR ; Patched at runtime
.endif
column: ldx #$00 ; Patched at runtime
getscr: lda $0400,x ; Patched at runtime
cmp #cursor
@@ -55,9 +62,7 @@ getscr: lda $0400,x ; Patched at runtime
setcursor:
lda #cursor
setscr: sta $0400,x ; Patched at runtime
.ifdef __APPLE2ENH__
bit LOWSCR ; Doesn't hurt in 40 column mode
.endif
rts
; ------------------------------------------------------------------------
@@ -65,9 +70,7 @@ setscr: sta $0400,x ; Patched at runtime
.code
done:
.ifdef __APPLE2ENH__
bit LOWSCR ; Doesn't hurt in 40 column mode
.endif
return: rts
; Hide the mouse cursor.
@@ -108,14 +111,14 @@ movex:
inx
bcs :-
stx column+1
.ifdef __APPLE2ENH__
; Patch switch anyway, it will just be skipped over if in 40-col mode
adc #7 / 2 ; Left or right half of 40-col column?
ldx #<LOWSCR ; Columns 1,3,5..79
bcs :+
.assert LOWSCR + 1 = HISCR, error
inx ; Columns 0,2,4..78
: stx switch+1
.endif
rts
; Move the mouse cursor y position to the value in A/X.