1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-11 20:29:36 +00:00

Improved GeOS version detection.

This commit is contained in:
Marco van den Heuvel 2018-02-13 19:19:40 -08:00
parent 33f05d1162
commit d93f84f4bc
5 changed files with 86 additions and 2 deletions

View File

@ -31,6 +31,8 @@ char get_ostype(void);
#define GEOS4 0x04 /* plus4 geos is not or'ed with version */
#define GEOS128 0x80
/* version flags */
#define MEGAPATCH3 0x03
#define GATEWAY 0x08
#define GEOS_V10 0x10
#define GEOS_V11 0x11
#define GEOS_V12 0x12 /* ??? not sure */

View File

@ -4,8 +4,10 @@
;4-2-99
bootName = $c006
gatewayFlag = $c007
version = $c00f
nationality = $c010
sysFlgCopy = $c012
c128Flag = $c013
mp3Flag = $c014
dateCopy = $c018

View File

@ -3,8 +3,8 @@
;
; 10.09.2001
;
; Plus4 and GEOS 1.1 detection by
; Marco van den Heuvel, 2010-02-02
; Plus4, Gateway, MP3 and GEOS 1.1 detection by
; Marco van den Heuvel, 2018-02-07
;
; unsigned char get_ostype (void);
@ -26,6 +26,12 @@ _get_ostype:
and #%11110000
cmp #$10
beq geos10
lda gatewayFlag
cmp #$41
beq gateway
lda mp3Flag
cmp #$4d
beq megapatch3
lda c128Flag ; we're on at least 2.0
cmp #$18
beq geos_on_plus4
@ -40,6 +46,14 @@ geos11:
geos_on_plus4:
lda #$04
rts
gateway:
lda #$08
ora c128Flag
rts
megapatch3:
lda #$03
ora c128Flag
rts
_get_tv:
jsr _get_ostype

58
samples/geos/geosver.c Normal file
View File

@ -0,0 +1,58 @@
#include <geos.h>
#include <conio.h>
// Let's define the window we're operating
struct window wholeScreen = {0, SC_PIX_HEIGHT-1, 0, SC_PIX_WIDTH-1};
void main (void)
{
unsigned char os = get_ostype();
unsigned char *machine = NULL;
unsigned char *version = NULL;
unsigned char good = 1;
SetPattern(0);
InitDrawWindow(&wholeScreen);
Rectangle();
gotoxy(0, 4);
if (os == GEOS4) {
machine = "plus4";
version = "GeOS v3.5";
} else {
if ((os & GEOS128) == GEOS128) {
machine = "c128";
} else {
machine = "c64";
}
os &= 0x7f;
if (os == GEOS_V10) {
version = "GeOS v1.0";
} else if (os == GEOS_V11) {
version = "GeOS v1.1";
} else if (os == GEOS_V12) {
version = "GeOS v1.2";
} else if (os == GEOS_V20) {
version = "GeOS v2.0";
} else if (os == MEGAPATCH3) {
version = "MegaPatch 3";
} else if (os == GATEWAY) {
version = "GateWay";
} else if ((os & WHEELS) == WHEELS) {
version = "Wheels";
} else {
version = "Unknown GeOS version";
good = 0;
}
}
if (good) {
cprintf("%s (%s)", version, machine);
} else {
cprintf("%s (%s) (%d)", version, machine, os);
}
Sleep(10*50);
return;
}

View File

@ -0,0 +1,8 @@
; this is the resource file for geosver.c, a GEOS application example
HEADER APPLICATION "geosver" "GeOSver" "V1.0" {
dostype USR
author "Marco van den Heuvel"
info "This is a C prog compiled with cc65 and GEOSLib."
}