|
|
DataMuseum.dkPresents historical artifacts from the history of: Bogika Butler |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Bogika Butler Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 4608 (0x1200)
Types: TextFile
Names: »DISKUTIL.PAS«
└─⟦e3723fcdd⟧ Bits:30004778 WordStar 3.3 og PolyPascal 3.10
└─⟦this⟧ »DISKUTIL.PAS«
PROGRAM DISKRUTINER;
LABEL MERE;
TYPE
STR2 = STRINGÆ2Å;
VAR
HEXER:STRINGÆ17Å;
XCOM:CHAR;
INDHEX:STR2;
DATA:ARRAYÆ0..127Å OF BYTE;
REGA,DRIVE,SECTOR:BYTE;
regbc,regde,reghl,MADD,SPOR,BIOSJUMP,DPARM,I,J,K:INTEGER;
BIOSPB:ARRAYÆ1..8Å OF BYTE;
æ 1= BIOS KALD, 2= A, 3=C, 4=B, 5=E, 6=D, 7=L, H=8.
BIOSPB sættes op ved indgang til BIOS
returværdier i rega/bc/de/hl å
PROCEDURE BIOS(X:BYTE);
BEGIN
CODE
$3A,X, æ LD A,(X) å
$32,BIOSPB, æ LD (BIOSPB),A å
$0E,$32, æ LD C,50 å
$11,BIOSPB, æ LD DE,BIOSPB å
$CD,$05,$0, æ CALL BDOS å
$32,REGA, æ LD (REGA),A å
$ED,$43,REGBC, æ LD (REGBC),BC å
$ED,$53,REGDE, æ LD (REGDE),DE å
$22,REGHL; æ LD (REGHL),HL å
END;
PROCEDURE SELDSK(C,E:BYTE);
æC=DRIVE, E=0 HVIS 1.KALD, E=1 HVIS SENERE KALD å
BEGIN BIOSPBÆ5Å:=E; BIOSPBÆ3Å:=C; BIOS(9); END;
PROCEDURE HOME;
BEGIN BIOS(8); END;
PROCEDURE SETTRK(BC:INTEGER);
BEGIN BIOSPBÆ3Å:=LO(BC); BIOSPBÆ4Å:=HI(BC); BIOS(10); END;
PROCEDURE SETSEC(BC:INTEGER);
BEGIN BIOSPBÆ3Å:=LO(BC); BIOSPBÆ4Å:=HI(BC); BIOS(11); END;
PROCEDURE SETDMA;
BEGIN BIOSPBÆ3Å:=LO(ADDR(DATA));
BIOSPBÆ4Å:=HI(ADDR(DATA)); BIOS(12); END;
PROCEDURE DREAD;
BEGIN
BIOS(13);
CODE
$21,$A0,$0F, æLD HL,4000 å
æX1 = $ å
$06,$46, æLD B, 70 å
æX2 = $ å
$10,$FE, æDJNZ X2 å
$2B, æLD A,H å
$7C, æOR L å
$20,$F7; æJR NZ,X1 å
IF REGA>0 THEN
BEGIN
WRITELN;WRITELN('Read error !',REGA);
END;
END;
PROCEDURE DWRITE;
BEGIN
BIOSPBÆ3Å:=0;
BIOS(14);
CODE
$21,$A0,$0F, æLD HL,4000 å
æX1 = $ å
$06,$46, æLD B, 70 å
æX2 = $ å
$10,$FE, æDJNZ X2 å
$2B, æLD A,H å
$7C, æOR L å
$20,$F7; æJR NZ,X1 å
IF REGA>0 THEN WRITELN('Write error !',rega);
END;
PROCEDURE BYTEUD(A:INTEGER);
BEGIN
WRITE ( HEXER Æ1+TRUNC(A/16)Å , HEXER Æ1+TRUNC(16*FRAC(A/16))Å );
END;
PROCEDURE ADDRUD(B:INTEGER);
BEGIN
BYTEUD(HI(B));
BYTEUD(LO(B));
END;
FUNCTION OMHEX(XX:STR2):BYTE;
VAR MXX:BYTE;
BEGIN
IF LEN(XX)=2 THEN
MXX:=16*(POS(XXÆ1Å,HEXER)-1 ) +POS(XXÆ2Å,HEXER)-1
ELSE
MXX:=POS(XXÆ1Å,HEXER)-1;
OMHEX:=MXX;
END;
æ --------------- MAIN PROGRAM -------------------- å
BEGIN
HEXER:='0123456789ABCDEF0';
BIOSJUMP:=MEMÆ1Å+256*MEMÆ2Å-3;
WRITE('Bios jump table start = ');
ADDRUD(BIOSJUMP);WRITELN;
IF BIOSJUMP <> $F700 THEN WRITELN('Programmet skal ændres til nye BIOS !');
WRITE('Drive = ');READLN(DRIVE);
SELDSK(DRIVE,0);
HOME;
MERE:
WRITE('Spor = ');READ(SPOR);
SECTOR:=SUCC(SECTOR);
WRITE(' Sector = ');READLN(SECTOR);
SETTRK(SPOR);
SETSEC(SECTOR);
SETDMA;
DREAD;
WRITELN('SPOR = ',SPOR,' SECTOR = ',SECTOR);
FOR I:=0 TO 7 DO
BEGIN
BYTEUD(I*16);WRITE(' : ');
FOR J:=0 TO 15 DO
BEGIN
WRITE(' ');
BYTEUD(DATAÆI*16+JÅ);
END;
WRITE(' ');
FOR J:=0 TO 15 DO
BEGIN
K:=DATAÆI*16+JÅ;
IF (K>=32) AND (K<128) THEN
WRITE(CHR(K))
ELSE WRITE('.');
END;
WRITELN;
END;
XCOM:=' ';
WRITE('Modificere ? ');READ(XCOM);WRITE(' ');
IF POS(XCOM,'YJjy')=0 THEN GOTO MERE;
MADD:=0;
INDHEX:='00';
WRITE('Fra addresse ? ');READLN(INDHEX);MADD:=OMHEX(INDHEX);
WHILE (INDHEX<>'.') AND (MADD<128) DO
BEGIN
BYTEUD(MADD);
WRITE(' ');
BYTEUD(DATAÆMADDÅ);
WRITE(' ');
INDHEX:='';
READLN(INDHEX);
IF (INDHEX<>'') AND (INDHEX<>'.') THEN
DATAÆMADDÅ:=OMHEX(INDHEX);
MADD:=SUCC(MADD)
END;
SETTRK(SPOR);
SETSEC(SECTOR);
SETDMA;
DWRITE;
GOTO MERE;
END.
«eof»