DataMuseum.dk

Presents historical artifacts from the history of:

Bogika Butler

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Bogika Butler

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦202637552⟧ TextFile

    Length: 4608 (0x1200)
    Types: TextFile
    Names: »DISKUTIL.PAS«

Derivation

└─⟦e3723fcdd⟧ Bits:30004778 WordStar 3.3 og PolyPascal 3.10
    └─⟦this⟧ »DISKUTIL.PAS« 

TextFile

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»