diff --git a/libsrc/atari/ostype.s b/libsrc/atari/ostype.s
new file mode 100644
index 000000000..7975c8b3c
--- /dev/null
+++ b/libsrc/atari/ostype.s
@@ -0,0 +1,161 @@
+;
+; Christian Groessler, July 2000
+; from Freddy Offenga's rominfo.c
+;
+; unsigned int get_ostype(void)
+;
+; x x x x x x x x  x x x x x x x x   -	16 bit flag
+; | | | | | | | |  | | | | | | | |
+; | | | | | | | |  | | | | | +-+-+-- main OS rev.
+; | | | | | | | |  | | | +-+-------- PAL/NTSC flag
+; | | | | | | | |  +-+-+------------ minor OS rev.
+; +-+-+-+-+-+-+-+------------------- unused
+;
+; main OS rev.:
+;	000 - unknown
+;	001 - 400/800 ROM
+;	010 - 1200XL ROM
+;	011 - XL/XE ROM
+;	1xx - unassigned
+; PAL/NTSC flag:
+;	00 - unknown
+;	01 - PAL
+;	10 - NTSC
+;	11 - (invalid)
+; minor OS rev.: (depending on main OS rev.);
+;	400/800:
+;		000 - unknown
+;		001 - Rev. A
+;		010 - Rev. B
+;		011 - unassigned (up to 111)
+;	1200XL:
+;		000 - unknown
+;		001 - Rev. 10
+;		010 - Rev. 11
+;		011 - unassigned (up to 111)
+;	XL/XE:
+;		000 - unknown
+;		001 - Rev. 1
+;		010 - Rev. 2
+;		011 - Rev. 3
+;		100 - Rev. 4
+;		101 - unassigned (up to 111)
+;
+
+
+	.include	"atari.inc"
+	.export		_get_ostype
+
+.proc	_get_ostype
+
+	lda	$fcd8
+	cmp	#$a2
+	beq	_400800
+	lda	$fff1
+	cmp	#1
+	beq	_1200xl
+	lda	$fff7
+	cmp	#1
+	bcc	_unknown
+	cmp	#5
+	bcs	_unknown
+
+;XL/XE ROM
+
+	sec
+	asl	a
+	asl	a
+	asl	a
+	asl	a
+	asl	a
+	ora	#%11
+_fin:	ldx	#0
+	rts
+
+; unknown ROM
+
+_unknown:
+	lda	#0
+	tax
+	rts
+
+; 1200XL ROM
+
+_1200xl:
+	lda	$fff7		; revision #
+	cmp	#10
+	beq	_1200_10
+	cmp	#11
+	beq	_1200_11
+	lda	#0		; for unknown
+	beq	_1200_fin
+
+_1200_10:
+	lda	#%00100000
+	bne	_1200_fin
+
+_1200_11:
+	lda	#%01000000
+
+_1200_fin:
+	ora	#%010
+	bne	_fin
+
+; 400/800 ROM
+
+_400800:
+	lda	$fff8
+	ldx	$fff9
+	cmp	#$dd
+	bne	_400800_1
+	cpx	#$57
+	bne	_400800_unknown
+
+; 400/800 NTSC Rev. A
+
+	lda	#%00110001
+	bne	_400800_done
+
+; 400/900 unknown
+
+_400800_unknown:
+	lda	#%00000001
+	bne	_400800_done
+
+_400800_1:
+	cmp	#$d6
+	bne	_400800_2
+	cpx	#$57
+	bne	_400800_unknown
+
+; 400/800 PAL Rev. A
+
+	lda	#%00101001
+	bne	_400800_done
+
+_400800_2:
+	cmp	#$f3
+	bne	_400800_3
+	cpx	#$e6
+	bne	_400800_unknown
+
+; 400/800 NTSC Rev. B
+
+	lda	#%01010001
+	bne	_400800_done
+
+_400800_3:
+
+	cmp	#$22
+	bne	_400800_unknown
+	cpx	#$58
+	bne	_400800_unknown
+
+; 400/800 PAL Rev. B
+
+	lda	#%01001001
+
+_400800_done:
+	bne	_fin
+
+.endproc