Detection of the //e card is buggy in the cc65 runtime so implement my own detection of this HW to workaround the buggy double lores implementation.

This commit is contained in:
Jeremy Rand 2020-03-24 02:06:45 -04:00
parent 49ccd2bfdc
commit 0a5c8b5fe3
5 changed files with 23 additions and 5 deletions

View File

@ -22,7 +22,10 @@ extern void __fastcall__ mixedTextMode(void);
// The Apple //e card does not implement double lores correctly. The colours
// used on the aux bank need to be shifted but the //e card expects unshifted
// colour values (ie the same as those on the main. This function is called
// when the game detects it is runing on a //e card which causes the graphics
// when the game detects it is not running on a //c or //gs. I would like to
// get_ostype() from the cc65 runtime but it doesn't work reliably for detecting
// the //e card. So I put in my own detection based on the technote. If the
// function detects it is runing on a //e card, it causes the graphics
// routines to use the same colours in the main and aux banks.
extern void __fastcall__ setBuggyDblLoRes(void);

View File

@ -912,6 +912,20 @@ square: .BYTE $0
.endproc
.proc _setBuggyDblLoRes
bit $c082
lda $fbb3
cmp #$6
bne @L3
lda $fbc0
cmp #$e0
bne @L3
lda $fbdd
cmp #$02
bne @L3
ldx #63
@L1:
lda bgColor,X
@ -925,7 +939,9 @@ square: .BYTE $0
sta gemAuxColours,X
dex
bpl @L2
@L3:
bit $c080
rts
.endproc

View File

@ -94,8 +94,7 @@ void initMachine(void)
} else if (machineIs2GS(machineType)) {
vblInit2gs();
gOldSpeed = setGSSpeed(GS_SPEED_SLOW);
}
else if (machineType == APPLE_IIECARD)
} else
setBuggyDblLoRes();
}

View File

@ -26,7 +26,7 @@
// Defines
#define SAVE_OPTIONS_FILE "A2BEJWLD.OPTS"
#define VERSION "v2.5.a1"
#define VERSION "v2.5.a3"
#define OPTIONS_VERSION_UNSAVED 0
#define OPTIONS_VERSION 2