マシンステータスを得る
ROMやシステム領域を参照してメモリサイズやマシンのバージョンを得ることが可能。
DOSから現在実行中のマシンの種類を得るコマンドmstatを作ってみる。
いろいろ工夫することでもっと多くのマシン状態を表示する事も可能だ。
mstat.c
#include <stdio.h>
extern unsigned char rom_version();
void main(void){
unsigned int *SZ_VRAM=(unsigned int*)0xFAFC;
unsigned int *SZ_DISK=(unsigned int*)0xFFA7;
unsigned char ver;
unsigned char vmem;
printf("--- mstat \r\n");
//VRAM
printf("VRAM: ");
vmem=(*SZ_VRAM & 0x6)/2;
if (vmem==0){
printf("16K \r\n");
} else if (vmem==1) {
printf("64K \r\n");
} else if (vmem>=2) {
printf("128K \r\n");
} else {
printf("\r\n");
}
//DISKDRIVE
printf("DISKDRIVE: ");
if (*SZ_DISK==0xC9) {
printf("no \r\n");
} else {
printf("yes \r\n");
}
//HW VERSION
printf("H/W VER: ");
ver=(unsigned char)rom_version();
if (ver==0) {
printf("MX1 \r\n");
} else if (ver==1) {
printf("MX2 \r\n");
} else if (ver==2) {
printf("MX2+ \r\n");
} else if (ver==3) {
printf("MXTR \r\n");
} else {
printf("\r\n");
}
}
romver.asm
;
; rom_version()
;
_rom_version::
push BC ;backup registerfile
push DE
push HL
;
ld a,(0xFCC2) ;slot address
ld hl,#0x002d ;read address
;
call 0x000c ;interslotcall(readslot)
;
pop HL
pop DE
pop BC
;
ld l,a ;return(uchar)
;
ei
ret
;
最終更新:2015年08月30日 13:40