home *** CD-ROM | disk | FTP | other *** search
-
- PROGRAM XSETUP;
- { ZUGRIFF AUF DAS CMOS- RAM }
-
-
- USES DOS,SELECTD,NEATUNIT,TPCRT,
- TPSTRING,TPWINDOW,TPENHKBD;
-
-
- TYPE S80 = STRING[80];
-
- CONST INDEX = $70; { INDEX - REGISTER }
- DATA = $71; { DATA - REGISTER }
-
- CONST TANORM : BYTE = $07;
- TAHELL : BYTE = $0F;
- TADIFF : BYTE = $0E;
-
- TAUHR : BYTE = $1F;
- TARES : BYTE = $4F;
- TANEAT : BYTE = $2F;
- TACHK : BYTE = $5F;
- TACCHK : BYTE = $06;
- { FÜR DIE NEAT- RGISTER- ANZEIGE }
- TADGR : BYTE = $08;
- TANDF : BYTE = $0C;
- TANR : BYTE = $0F;
-
- TABOOT : BYTE = $4F;
-
-
- CONST CRAMSIZ = 63; { ANZAHL BYTES IM CMOS- RAM -1 }
- CRAMS2 = 127; { ANZAHL BYTES IM CMOS- RAM -1 }
-
-
- VAR I,J,K : INTEGER;
- CH : CHAR;
- RAMSIZ,B1 : BYTE;
- FILEDA,DISPL,DUMP,
- WENABLE,EMSENB : BOOLEAN;
- SAVDAT,INDAT : ARRAY[0..CRAMS2] OF BYTE;
- SAVFIL : FILE OF BYTE;
- FNAM : STRING;
- S : S80;
-
- CHK,CHK2 : WORD;
- DEBUGWIN : WINDOWPTR;
- PA,MA,W : WORD;
- MODE,EP : BYTE;
-
-
- PROCEDURE BOOT;
- BEGIN
- TEXTATTR := TABOOT;
- CLRSCR;
- GOTOXY(25,12);
- WRITELN('Das System wird neu gestartet');
- MEMW[$40:$72] := $1234; { MAGIC WORD }
- INLINE($EA/$FFF0/$F000); { JMP FAR $F000:$FFF0 }
- END;
-
-
- FUNCTION CMOS(B:BYTE):BYTE;
- BEGIN
- PORT[INDEX] := B;
- CMOS := PORT[DATA];
- END;
-
-
- FUNCTION GETNEAT(IDX:BYTE):BYTE;
- BEGIN
- PORT[$22] := IDX;
- GETNEAT := PORT[$23];
- END;
-
-
- PROCEDURE CALCCHK;
- VAR I,J : INTEGER;
- BEGIN
- CHK := 0;
- CHK2 := 0;
- FOR I := 0 TO RAMSIZ DO BEGIN
- J := CMOS(I);
- CASE I OF
- $10..$2D : CHK := CHK + J;
- $41..$53 : CHK2 := CHK2 + J;
- END; { CASE }
- END; { NEXT I }
- END;
-
-
- PROCEDURE CHKSUM;
- BEGIN
- CALCCHK;
- SETPORT(RTC,$2E,HI(CHK));
- SETPORT(RTC,$2F,LO(CHK));
-
- IF RAMSIZ = CRAMS2 THEN BEGIN
- SETPORT(RTC,$7E,HI(CHK2));
- SETPORT(RTC,$7F,LO(CHK2));
- END;
- END;
-
-
- PROCEDURE NEATDIFF;
- VAR B1,B2 : BYTE;
-
- PROCEDURE DISPNEAT(IDX,CADDR,MSK:BYTE);
- BEGIN
- B1 := GETNEAT(IDX) AND (MSK XOR $FF);
- IF CMOS(CADDR) <> B1 THEN BEGIN
- TEXTATTR := TANDF;
- WRITE(HEXB(B1));
- TEXTATTR := TANR;
- END ELSE WRITE(HEXB(B1));
- WRITE(' ');
- END;
-
- BEGIN
- IF RAMSIZ <> CRAMS2 THEN EXIT;
- TEXTATTR := TANORM;
- GOTOXY(1,11);
- WRITELN('NEAT Reg. : 60 64 68');
- WRITE(' ');
- TEXTATTR := TANR;
- DISPNEAT($01,$41,0);
-
- TEXTATTR := TADGR;
- WRITE(HEXB(GETNEAT($02)),' ');
- TEXTATTR := TANR;
-
- WRITE(' ');
- DISPNEAT($60,$44,$CA);
- DISPNEAT($61,$45,0);
- DISPNEAT($62,$46,$C0);
-
- TEXTATTR := TADGR;
- WRITE(HEXB(GETNEAT($63)),' : ',HEXB(GETNEAT($64)),' ');
- TEXTATTR := TANR;
-
- DISPNEAT($65,$49,0);
- DISPNEAT($66,$4A,$7F);
- DISPNEAT($67,$4B,0);
- WRITE(' ');
- DISPNEAT($68,$4C,0);
- DISPNEAT($69,$4D,0);
- DISPNEAT($6A,$4E,$1F);
- DISPNEAT($6B,$4F,0);
- GOTOXY(1,13);
- DISPNEAT($6C,$50,$0F);
- DISPNEAT($6D,$51,0);
- DISPNEAT($6E,$52,0);
- DISPNEAT($6F,$53,$19);
- TEXTATTR := TANORM;
- END;
-
-
- PROCEDURE READSETUP;
- VAR I,IOR : INTEGER;
- BEGIN
- {$I-}
- WENABLE := TRUE;
- TEXTATTR := TANORM;
- GOTOXY(1,1); CLREOL;
- FILEDA := FALSE;
-
- ASSIGN(SAVFIL,FNAM);
- RESET(SAVFIL);
- IOR := IORESULT;
- IF IOR = 0 THEN BEGIN
- WRITELN('DATEN AUS SAVE- FILE : ');
- TEXTATTR := TAHELL;
- FILEDA := TRUE;
- FOR I := 0 TO RAMSIZ DO BEGIN
- READ(SAVFIL,SAVDAT[I]);
- IF IORESULT <> 0 THEN BEGIN
- SAVDAT[I] := 0;
- WRITE('??');
- WENABLE := FALSE;
- FILEDA := FALSE;
- END ELSE WRITE(HEXB(SAVDAT[I]));
- IF (I AND $F) = $F THEN WRITELN ELSE BEGIN
- IF (I AND 7) = 7 THEN WRITE(' : ') ELSE BEGIN
- IF (I AND 3) = 3 THEN WRITE(' ') ELSE WRITE(' ');
- END;
- END;
- END; { NEXT I }
- TEXTATTR := TANORM;
- CLOSE(SAVFIL);
- GOTOXY(25,1);
- { DATUM / UHRZEIT AUS SAVE- FILE ANZEIGEN }
- WRITE('(',HEXB(SAVDAT[7]),'.',HEXB(SAVDAT[8]),'.19',HEXB(SAVDAT[9]),' ');
- WRITE(HEXB(SAVDAT[4]),':',HEXB(SAVDAT[2]),':',HEXB(SAVDAT[0]),')');
- END ELSE BEGIN
- WRITELN(#7,'File ',FNAM,' nicht gefunden');
- END;
- {$I+}
- END;
-
-
- PROCEDURE SAVESETUP;
- VAR I : INTEGER;
- BEGIN
- {$I-}
- GOTOXY(1,1); CLREOL;
- ASSIGN(SAVFIL,FNAM);
- REWRITE(SAVFIL);
- IF IORESULT = 0 THEN BEGIN
- FOR I := 0 TO RAMSIZ DO BEGIN
- SAVDAT[I] := CMOS(I);
- WRITE(SAVFIL,SAVDAT[I]);
- END; { NEXT I }
- CLOSE(SAVFIL);
- READSETUP;
- END ELSE BEGIN
- WRITELN(#7,'File ',FNAM,' nicht gefunden');
- END;
- {$I+}
- END;
-
-
- PROCEDURE RESTORESETUP;
- VAR I : INTEGER;
- BEGIN
- IF NOT WENABLE THEN EXIT;
- READSETUP;
- IF FILEDA THEN BEGIN
- PORT[INDEX] := 9;
- PORT[DATA] := SAVDAT[9];
- FOR I := 14 TO RAMSIZ DO BEGIN
- PORT[INDEX] := I;
- PORT[DATA] := SAVDAT[I];
- END;
- END; { FILEDA & NEXT I }
- END;
-
-
- PROCEDURE BEREINIGEN;
- VAR I : INTEGER;
- BEGIN
- PORT[INDEX] := 1; PORT[DATA] := 0;
- PORT[INDEX] := 3; PORT[DATA] := 0;
- PORT[INDEX] := 5; PORT[DATA] := 0;
- FOR I := $34 TO $3F DO BEGIN
- PORT[INDEX] := I; PORT[DATA] := 0;
- END; { NEXT I }
- END;
-
-
- PROCEDURE DUMPLIST;
- VAR I,J : INTEGER;
- BEGIN
- CALCCHK;
- GOTOXY(1,16);
- TEXTATTR := TAHELL;
- FOR I := 0 TO RAMSIZ DO BEGIN
- J := CMOS(I);
- CASE I OF
- $00..$0F : TEXTATTR := TAUHR;
- $11 : TEXTATTR := TARES;
- $13 : TEXTATTR := TARES;
- $1B..$2D : TEXTATTR := TARES;
- $2E..$2F : TEXTATTR := TACHK;
- $34..$3F : TEXTATTR := TARES;
- $41..$53 : TEXTATTR := TANEAT;
- $7E..$7F : TEXTATTR := TACHK;
- END; { CASE }
- IF FILEDA THEN BEGIN
- IF J <> SAVDAT[I] THEN TEXTATTR := (TEXTATTR AND $F0) + TADIFF;
- END;
- WRITE(HEXB(J));
- TEXTATTR := TAHELL;
- IF (I AND $F) = $F THEN BEGIN
- IF I = 47 THEN BEGIN
- TEXTATTR := TACCHK;
- WRITE(' ',HEXW(CHK));
- TEXTATTR := TAHELL;
- END;
- IF I = 127 THEN BEGIN
- TEXTATTR := TACCHK;
- WRITE(' ',HEXW(CHK2));
- TEXTATTR := TAHELL;
- END;
- WRITELN;
- END ELSE BEGIN
- IF (I AND 7) = 7 THEN WRITE(' : ') ELSE BEGIN
- IF (I AND 3) = 3 THEN WRITE(' ') ELSE WRITE(' ');
- END;
- END;
- END; { NEXT I }
- TEXTATTR := TANORM;
- END;
-
-
- PROCEDURE INTLIST;
- VAR I : INTEGER;
- BEGIN
- GOTOXY(46,15); TEXTATTR := TAHELL;
- WRITE(HEXB(CMOS(7)),'.',HEXB(CMOS(8)),'.',HEXB(CMOS($32)),HEXB(CMOS(9)));
- TEXTATTR := TANORM;
-
- GOTOXY(1,16);
- WRITE(' Zeit : '); TEXTATTR := TAHELL;
- WRITE(HEXB(CMOS(4)),':',HEXB(CMOS(2)),':',HEXB(CMOS(0)));
- TEXTATTR := TANORM;
- WRITE(' Alarmzeit : '); TEXTATTR := TAHELL;
- WRITE(HEXB(CMOS(5)),':',HEXB(CMOS(3)),':',HEXB(CMOS(1)));
- TEXTATTR := TANORM;
- WRITELN;
-
- WRITE(' Disk A/B : '); TEXTATTR := TAHELL;
- WRITE(HEXB(CMOS($10))); TEXTATTR := TANORM;
- WRITELN;
- WRITE(' Platte C/D : '); TEXTATTR := TAHELL;
- WRITE(HEXB(CMOS($12))); TEXTATTR := TANORM;
- WRITELN;
- WRITE('Plattentyp C = '); TEXTATTR := TAHELL;
- WRITE(HEXB(CMOS($19))); TEXTATTR := TANORM;
- WRITE(', D = '); TEXTATTR := TAHELL;
- WRITE(HEXB(CMOS($1A))); TEXTATTR := TANORM;
- WRITELN;
-
- GOTOXY(30,17);
- I := CMOS($15) + 256 * CMOS($16);
- WRITE(' System RAM : '); TEXTATTR := TAHELL; WRITE(I:4,'k'); TEXTATTR := TANORM;
- GOTOXY(30,18);
- I := CMOS($17) + 256 * CMOS($18);
- WRITE('Expansion RAM : '); TEXTATTR := TAHELL; WRITE(I:4,'k'); TEXTATTR := TANORM;
- GOTOXY(30,19);
- I := CMOS($30) + 256 * CMOS($31);
- WRITE(' Extended RAM : '); TEXTATTR := TAHELL; WRITE(I:4,'k'); TEXTATTR := TANORM;
-
- GOTOXY(1,20);
- WRITE('Konfig. Byte : ');
- TEXTATTR := TAHELL; WRITE(HEXB(CMOS($14))); TEXTATTR := TANORM;
- WRITE(' Power On Flag : ');
- TEXTATTR := TAHELL; WRITE(HEXB(CMOS($33))); TEXTATTR := TANORM;
- WRITELN;
-
- GOTOXY(1,21);
- WRITE('Diag. Status : ');
- TEXTATTR := TAHELL; WRITE(HEXB(CMOS($0E))); TEXTATTR := TANORM;
- WRITE(' ??? Abbruch ??? : ');
- TEXTATTR := TAHELL; WRITE(HEXB(CMOS($0F))); TEXTATTR := TANORM;
-
- GOTOXY(1,22);
- WRITE(' Checksumme : ');
- TEXTATTR := TAHELL; WRITE(HEXB(CMOS($2E)),' ',HEXB(CMOS($2F)));
- TEXTATTR := TANORM;
-
- END;
-
-
- FUNCTION MAKEHEX(S:S80):BYTE;
- VAR I,D : WORD;
- BEGIN
- D := 0;
- FOR I := 1 TO LENGTH(S) DO BEGIN
- IF S[I] IN ['0'..'9'] THEN D := D * 16 + ORD(S[I]) - $30;
- IF S[I] IN ['A'..'F'] THEN D := D * 16 + ORD(S[I]) - $37;
- IF S[I] IN ['a'..'f'] THEN D := D * 16 + ORD(S[I]) - $57;
- D := D AND $FF;
- END;
- MAKEHEX := D;
- END;
-
-
- PROCEDURE EMSAUS;
- VAR TA : BYTE;
- BEGIN
- FNAM := 'NOEMS.SU';
- READSETUP;
- RESTORESETUP;
- FNAM := 'XSETUP.SAV';
- IF FILEDA THEN BEGIN
- SAVESETUP;
- END ELSE BEGIN
- RESTORESETUP;
- TA := TEXTATTR;
- TEXTATTR := $CE;
- GOTOXY(23,1);
- WRITE(' *** File NOEMS.SU nicht vorhanden *** ');
- TEXTATTR := TA;
- END;
- END;
-
-
- PROCEDURE EMSEIN;
- VAR TA : BYTE;
- BEGIN
- FNAM := 'EMS.SU';
- READSETUP;
- RESTORESETUP;
- FNAM := 'XSETUP.SAV';
- IF FILEDA THEN BEGIN
- PORT[$22] := $65;
- B1 := PORT[$23];
- B1 := B1 AND $FE;
- PORT[$22] := $65;
- PORT[$23] := B1;
- SAVESETUP;
- END ELSE BEGIN
- RESTORESETUP;
- TA := TEXTATTR;
- TEXTATTR := $CE;
- GOTOXY(23,1);
- WRITE(' *** File EMS.SU nicht vorhanden *** ');
- TEXTATTR := TA;
- END;
- END;
-
-
- PROCEDURE HEADER;
- BEGIN
- WINDOW(1,15,80,25); CLRSCR; WINDOW(1,1,80,25);
- GOTOXY(1,15);
- IF DUMP THEN BEGIN
- WRITE('aktuelle CMOS- RAM- Daten (DUMP) :');
- END ELSE BEGIN
- WRITE('aktuelle CMOS- RAM- Daten (INTERPRETIERT) :');
- END;
- GOTOXY(55,2); WRITE('Save Setup ......... S');
- GOTOXY(55,3); WRITE('Restore Setup ......... R');
- GOTOXY(55,4);
- IF DUMP THEN WRITE('interpretierte Liste .. I')
- ELSE WRITE('dump Liste ............ D');
- GOTOXY(55,5); WRITE('Checksumme Korrigieren C');
- IF RAMSIZ = CRAMS2 THEN BEGIN
- GOTOXY(55,6);
- IF EMSENB THEN WRITE('EMS ausschalten ....... 1')
- ELSE WRITE('EMS einschalten ....... 1');
- END;
- GOTOXY(55,7); WRITE(' BOOT ................ B');
- GOTOXY(55,8); WRITE('Modifizieren .......... M');
- GOTOXY(55,9); WRITE('<Esc> = ENDE');
- TEXTATTR := TAHELL;
-
- GOTOXY(55,11);
- TEXTATTR := TAUHR; WRITE('Uhr'); TEXTATTR := TANORM;
- GOTOXY(67,11);
- TEXTATTR := TARES; WRITE('Reserviert'); TEXTATTR := TANORM;
- GOTOXY(55,12);
- TEXTATTR := TANEAT; WRITE('NEAT Setup'); TEXTATTR := TANORM;
- GOTOXY(67,12);
- TEXTATTR := TACHK; WRITE('Checksumme'); TEXTATTR := TANORM;
- GOTOXY(55,13);
- TEXTATTR := TADIFF; WRITELN('Differenz zu Save- File'); TEXTATTR := TANORM;
- GOTOXY(55,14);
- TEXTATTR := TACCHK; WRITELN('errechnete Checksumme'); TEXTATTR := TANORM;
- END;
-
-
- PROCEDURE UPDATESCREEN;
- BEGIN
- IF DUMP THEN DUMPLIST ELSE INTLIST;
- IF RAMSIZ = CRAMS2 THEN BEGIN
- NEATDIFF;
- IF (SAVDAT[$4F] AND $10) = 0 THEN BEGIN
- IF EMSENB THEN BEGIN
- GOTOXY(55,6);
- WRITE('EMS einschalten ....... 1');
- END;
- EMSENB := FALSE;
- END ELSE BEGIN
- IF NOT EMSENB THEN BEGIN
- GOTOXY(55,6);
- WRITE('EMS ausschalten ....... 1');
- END;
- EMSENB := TRUE;
- END;
- END;
- END;
-
-
- PROCEDURE WINDERR;
- BEGIN
- WRITELN;
- WRITELN(' WINDOW ERROR ');
- HALT;
- END;
-
-
- PROCEDURE DEBUG;
- VAR P : POINTER;
- CH1,CH2 : CHAR;
- I : WORD;
- TA : BYTE;
-
- PROCEDURE UPDATEBACKGROUND;
- BEGIN
- P := ERASETOPWINDOW;
- UPDATESCREEN;
- IF NOT DISPLAYWINDOW(DEBUGWIN) THEN WINDERR;
- END;
-
- PROCEDURE ANZEIGE;
- BEGIN
- HIDDENCURSOR;
- GOTOXY(2,2);
- WRITE('CMOS- Adresse [',HEXB(MA),'] -> ');
- GOTOXY(2,3);
- WRITE('NEAT- Port [',HEXB(PA),'] -> ');
- GOTOXY(2,5);
- IF MODE = 1 THEN TEXTATTR := TEXTATTR XOR $77;
- WRITE('aNd');
- TEXTATTR := TA;
- WRITE(', ');
- IF MODE = 2 THEN TEXTATTR := TEXTATTR XOR $77;
- WRITE('Or');
- TEXTATTR := TA;
- WRITE(', ');
- IF MODE = 3 THEN TEXTATTR := TEXTATTR XOR $77;
- WRITE('Xor');
- TEXTATTR := TA;
- WRITE(', ');
- IF MODE = 4 THEN TEXTATTR := TEXTATTR XOR $77;
- WRITE('bitSet');
- TEXTATTR := TA;
- WRITE(', ');
- IF MODE = 5 THEN TEXTATTR := TEXTATTR XOR $77;
- WRITE('bitReset');
- TEXTATTR := TA;
- WRITE(', ');
- IF MODE = 6 THEN TEXTATTR := TEXTATTR XOR $77;
- WRITE('Wert');
- TEXTATTR := TA;
- GOTOXY(2,6);
- WRITE('<Esc> = Ende, + INC, - DEC');
- CASE EP OF
- 1 : BEGIN
- GOTOXY(17,2);
- WRITE(HEXB(W));
- END;
- 2 : BEGIN
- GOTOXY(17,3);
- WRITE(HEXB(W));
- END;
- 3 : BEGIN
- GOTOXY(24,2);
- IF MODE IN [4,5] THEN WRITE(W) ELSE WRITE(HEXB(W));
- END;
- 4 : BEGIN
- GOTOXY(24,3);
- IF MODE IN [4,5] THEN WRITE(W) ELSE WRITE(HEXB(W));
- END;
- END; { CASE EP }
- BLOCKCURSOR;
- END;
-
- PROCEDURE SETADDR;
- BEGIN
- CASE EP OF
- 1 : MA := W;
- 2 : PA := W;
- END; { CASE EP }
- END;
-
- PROCEDURE SETVAL;
- BEGIN
- CASE EP OF
- 1 : W := MA;
- 2 : W := PA;
- 3,4 : W := 0;
- END; { CASE EP }
- END;
-
- PROCEDURE STELLE(PORT,INDEX,WERT:WORD);
- BEGIN
- CASE MODE OF
- 1 : ANDPORT(PORT,INDEX,WERT);
- 2 : ORPORT (PORT,INDEX,WERT);
- 3 : XORPORT(PORT,INDEX,WERT);
- 4 : SETBIT (PORT,INDEX,WERT);
- 5 : RESBIT (PORT,INDEX,WERT);
- 6 : SETPORT(PORT,INDEX,WERT);
- END;
- END;
-
- BEGIN { DEBUG }
- IF NOT DISPLAYWINDOW(DEBUGWIN) THEN WINDERR;
- TA := TEXTATTR;
-
- REPEAT
- ANZEIGE;
- CH1 := UPCASE(READKEY); IF CH1 = #0 THEN CH2 := READKEY ELSE CH2 := #0;
- CASE CH1 OF
- ^[,#0 : BEGIN END;
- ^M : BEGIN
- CASE EP OF
- 1 : BEGIN
- MA := W;
- EP := 3;
- END;
- 2 : BEGIN
- PA := W;
- EP := 4;
- END;
- 3 : BEGIN
- STELLE(RTC,MA,W);
- CHKSUM;
- UPDATEBACKGROUND;
- END;
- 4 : BEGIN
- STELLE(NEAT,PA,W);
- UPDATEBACKGROUND;
- END;
- END; { CASE EP }
- END;
- ^H : BEGIN
- W := W SHR 4;
- ANZEIGE;
- END;
- '+' : BEGIN
- INC(W);
- SETADDR;
- ANZEIGE;
- END;
- '-' : BEGIN
- DEC(W);
- SETADDR;
- ANZEIGE;
- END;
- '0'..'9',
- 'A'..'F' : BEGIN
- IF (EP IN [3,4]) AND (MODE IN [4,5]) THEN BEGIN
- IF CH1 IN ['0'..'7'] THEN VAL(CH1,W,I);
- END ELSE BEGIN
- W := (W SHL 4) AND $FF;
- IF CH1 >= 'A' THEN W := W + ORD(CH1) - $37
- ELSE W := W + ORD(CH1) - $30;
- END;
- ANZEIGE;
- END;
- 'N' : BEGIN
- MODE := 1;
- W := 0;
- ANZEIGE;
- END;
- 'O' : BEGIN
- MODE := 2;
- W := 0;
- ANZEIGE;
- END;
- 'X' : BEGIN
- MODE := 3;
- W := 0;
- ANZEIGE;
- END;
- 'S' : BEGIN
- MODE := 4;
- W := 0;
- ANZEIGE;
- END;
- 'R' : BEGIN
- MODE := 5;
- W := 0;
- ANZEIGE;
- END;
- 'W' : BEGIN
- MODE := 6;
- W := 0;
- ANZEIGE;
- END;
- END; { CASE CH1 }
- CASE CH2 OF
- #72 : BEGIN
- SETADDR;
- IF EP IN [2,4] THEN DEC(EP) ELSE INC(EP);
- SETVAL;
- END;
- #80 : BEGIN
- SETADDR;
- IF EP IN [2,4] THEN DEC(EP) ELSE INC(EP);
- SETVAL;
- END;
- #75 : BEGIN
- SETADDR;
- IF EP IN [3,4] THEN DEC(EP,2) ELSE INC(EP,2);
- SETVAL;
- END;
- #77 : BEGIN
- SETADDR;
- IF EP IN [3,4] THEN DEC(EP,2) ELSE INC(EP,2);
- SETVAL;
- END;
- #141 : IF MOVEWINDOW(0,-1) THEN BLOCKCURSOR;
- #145 : IF MOVEWINDOW(0, 1) THEN BLOCKCURSOR;
- #115 : IF MOVEWINDOW(-2,0) THEN BLOCKCURSOR;
- #116 : IF MOVEWINDOW( 2,0) THEN BLOCKCURSOR;
- END; { CASE CH2 }
-
- UNTIL CH1 = ^[;
- HIDDENCURSOR;
- P := ERASETOPWINDOW;
- END;
-
-
- BEGIN { MAIN }
- IF NOT ISAT THEN BEGIN
- WRITELN;
- WRITELN('XSETUP ist nur auf AT- Computern (mit CMOS-RAM) einsetzbar');
- HALT;
- END;
- CLRSCR;
- HIDDENCURSOR;
- DUMP := TRUE;
- EMSENB := FALSE;
-
- { TEXTATTRIBUTE FÜR CRT- DISPLAY ABRICHTEN }
- IF (STUPCASE(GETENV('CRT'))='LCD') THEN BEGIN
- TADIFF := $70;
- TAUHR := $02;
- TARES := $27;
- TACHK := $04;
- TACCHK := $04;
- TADGR := $02;
- TANDF := $04;
- END;
- { TEXTATTRIBUTE FÜR MONOCHROM ABRICHTEN }
- IF LASTMODE = 7 THEN BEGIN
- TADIFF := $10;
- TAUHR := $02;
- TARES := $01;
- TACHK := $09;
- TACCHK := $09;
- TADGR := $01;
- TANDF := $09;
- END;
-
- { CREATE DEBUG WINDOW }
- if not MakeWindow(DEBUGWIN,40,1,80,9,True,True,TRUE,$70,$16,$1E,' Modifizieren ')
- THEN WINDERR;
- MA := 0;
- PA := $60;
- MODE := 6;
- EP := 1;
- W := 0;
-
- IF CMOS(0) <> CMOS(64) THEN RAMSIZ := CRAMS2 ELSE RAMSIZ := CRAMSIZ;
- IF CMOS(0) <> CMOS(64) THEN RAMSIZ := CRAMS2 ELSE RAMSIZ := CRAMSIZ;
- TEXTATTR := TANORM;
- FNAM := 'XSETUP.SAV';
- READSETUP;
-
- CASE PARAMCOUNT OF
- 1 : BEGIN
- S := PARAMSTR(1);
- PORT[INDEX] := $19;
- PORT[DATA] := MAKEHEX(S);
- CHKSUM;
- END;
- 2 : BEGIN
- S := PARAMSTR(1);
- PORT[INDEX] := $19;
- PORT[DATA] := MAKEHEX(S);
- S := PARAMSTR(2);
- PORT[INDEX] := $1A;
- PORT[DATA] := MAKEHEX(S);
- CHKSUM;
- END;
- END; { CASE }
-
- HEADER;
- REPEAT
- REPEAT UPDATESCREEN;
- UNTIL KEYPRESSED;
-
- CH := UPCASE(READKEY);
- CASE CH OF
- 'S' : SAVESETUP;
- 'R' : RESTORESETUP;
- 'D' : IF NOT DUMP THEN BEGIN
- DUMP := TRUE;
- HEADER;
- END;
- 'I' : IF DUMP THEN BEGIN
- DUMP := FALSE;
- HEADER;
- END;
- 'B' : BOOT;
- 'C' : CHKSUM;
- '1' : IF EMSENB THEN EMSAUS ELSE EMSEIN;
- 'X' : BEREINIGEN;
- 'M' : DEBUG;
- END; { CASE }
- UNTIL CH = ^[;
-
- GOTOXY(1,24);
- TEXTATTR := TANORM;
- NORMALCURSOR;
-
- END.
-