title PCW Maschinentestprogramm name ('PCWTEST') ; Dieses kleine Programm testet, ob es sich um einen PCW handelt ; oder nicht und gibt eine entsprechend Meldung aus. OS equ 0000h BDOS equ 0005h TPATOP equ BDOS+1 .string equ 9 .vers equ 12 .scb equ 49 _USERF equ 30 USRBIOS equ 3*(_USERF-1) CD_VERS equ 00e3h CD_INFO equ 00e6h SCB.COM equ 5dh CPMv equ 30h PCWCOMM equ 0c000h PCW equ 1 JPcod equ 0c3h eot equ '$' ; ; ######################################################### ; ; Wegen Z80 Test nur 8080 Instruktionen verwenden ; ld hl,(TPATOP) ; Stack laden ld sp,hl call PCWtest ; Alles testen jp c,Error ; Falsche Maschine ; ; ############### Ab hier Z80 Instruktionen ############### ; ld de,$SIO inc a ; Test ob SIO eingebaut jr z,Error ; Ja ld de,$NOSIO ; Kein SIO anzeigen Error: ld c,.string call BDOS ; Meldung ausgeben jp OS ; $NOZ80: db 'Keine Z80 CPU',eot $NOCPM: db 'CP/M Version 3.x nicht vorhanden',eot $NOBANK: db 'CP/M Version 3.x nicht gebanked',eot $NOCOMM: db 'COMMON-Speicher nicht 0xC000H',eot $NOXBIOS: db 'eXtended BIOS nicht aktiv',eot $NOPCW: db 'Keine PCW-Maschine',eot $NOSIO: db 'Kein ',eot $SIO: db 'SIO eingebaut',eot ; ; $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ; ; Testen ob dies eine PCW Maschine ist ; ; Das gesetzte Carry zeigt an, dass es kein PCW ist. ; Dann zeigt Register DE auf eine Fehlermeldung ; ; Wenn ein PCW gefunden wurde, enthaelt der Akku die Info, ; ob eine serielle Schnittstelle eingebaut ist oder nicht. ; Eingebaut ist sie, wenn der Akku 0FFH beinhaltet ; PCWtest: call isZ80 ; CPU testen call nc,isCPM3 ; CP/M Version testen call nc,isBanked ; Gebankte Version testen call nc,isCOMMON ; COMMON Adresse testen call nc,isXBIOS ; XBIOS testen call nc,isPCW ; PCW Maschine testen call nc,isSIO ; SIO-Einbau ermitteln ret ; ; Test 1 : Z80 CPU ; isZ80: ld de,$NOZ80 sub a ; Testen der CPU scf ret pe ; Keine Z80 ccf ret ; ; Test 2 : CP/M 3.x ; isCPM3: ld c,.vers call BDOS ; BDOS Version holen cp CPMv ; Test CP/M 3.x ld de,$NOCPM ret ; ; Test 3 : Gebankte Version ; isBanked: ld de,SCBPB ; Zeiger Auf Parameterblock ld c,.scb call BDOS ; Adresse holen ld a,l or h ; Test ob 0 ld de,$NOBANK scf ret z ; Ja, dann keine gebankte Version ccf ret ; SCBPB: db SCB.COM ; Index auf Adresse db 0 ; Ladeanweisung ; ; Test 4 : Common Memory ; isCOMMON: ld de,PCWCOMM or a sbc hl,de ; Test ob gueltige Adresse ld de,$NOCOMM scf ret nz ccf ret ; ; Test 5 : XBIOS vorhanden ; isXBIOS: ld ix,(OS+1) ; BIOS Warmstart Adresse laden ld de,USRBIOS add ix,de ; Zeiger auf USERF ld (XBIOS+1),ix ; Eintragen ld a,(ix+0) sub JPcod ; Sequenz testen or (ix+1) or (ix+2) ld de,$NOXBIOS scf ret z ; Carry bei JP 0000 ccf ret ; XBIOS: jp $-$ ; ; Test 6 : PCW Maschine ; isPCW: call XBIOS ; Version holen dw CD_VERS sub PCW ; Muss PCW sein ld de,$NOPCW scf ret nz ccf ret ; ; Test 7 : Einbau eines seriellen Interfaces ; isSIO: call XBIOS ; Systeminfo holen dw CD_INFO or a ; Test immer erfolgreich ld a,c ; SIO Status (0FFH ist eingebaut) ret end