So, hab mich mal hingesetzt und das Programm "romget.bas" analysiert. Und nachdem ich einiges an Literatur gelesen habe, ist folgendes kleines Programm entstanden, dass einem den CPC-Typ anhand des Basic-ROMs ermittelt.
Das Beste ist, dass kein "memory <addr>" benötigt wird, da der komplette MC in einem String gespeichert wird. Auch erfolgt die Anpassung der Adressen automatisch. Somit lässt sich der Code einfach und ohne Änderungen in eigene Programme einbauen.
Viel Spaß damit...
10 MODE 1:BORDER 0:INK 0,0:INK 1,26:PAPER 0:PEN 1
20 GOSUB 65000
30 PRINT"Du hast einen CPC ";
40 ON cpc% GOTO 51,52,53,54
50 PRINT"464":PRINT:END
51 PRINT"664":PRINT:END
52 PRINT"6128":PRINT:END
53 PRINT"464+":PRINT:END
54 PRINT"6128+":PRINT:END
99 END
65000 '--------------------'
65010 ' CPC-Query '
65020 ' (c) 2008 M.Lechner '
65030 '--------------------'
65040 DATA &21,&02,&C0,&11,&FF,&FF,&01,&01,&00,&DF,&FF,&FF,&C9,&FF,&FF,&00,&ED,&B0,&C9,&00
65050 RESTORE 65040:asm$="":FOR cpc%=0 TO 19:READ asm!:asm$=asm$+CHR$(asm!):NEXT
65060 asm!=PEEK(@asm$+1)+PEEK(@asm$+2)*256:asm2!=asm!:IF asm2!>32767 THEN asm2!=asm2!-32768
65070 POKE asm!+&4,(asm2!+&13) MOD 256:POKE asm!+&5,(asm!+&13)/256
65080 POKE asm!+&A,(asm2!+&D) MOD 256:POKE asm!+&B,(asm!+&D)/256
65090 POKE asm!+&D,(asm2!+&10) MOD 256:POKE asm!+&E,(asm!+10)/256
65100 CALL asm!:cpc%=PEEK(asm!+&13)
65110 RETURN
Alles anzeigen