home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 02 / ldm / memwrite.pas < prev    next >
Pascal/Delphi Source File  |  1989-11-10  |  5KB  |  113 lines

  1. (* ------------------------------------------------------ *)
  2. (*                   MEMWRITE.PAS                         *)
  3. (* ------------------------------------------------------ *)
  4. UNIT MemWrite;
  5.  
  6. INTERFACE
  7.  
  8. PROCEDURE WriteMem(x,y : INTEGER; s : STRING; Farbe : BYTE);
  9. PROCEDURE WriteAtt(x, y, Len, Farbe : INTEGER);
  10. PROCEDURE WritePart(x, y, Len, Disp : INTEGER; S : STRING);
  11.  
  12. VAR
  13.   VideoBuffer : WORD;
  14.  
  15. IMPLEMENTATION
  16.  
  17. CONST
  18.   MonoScreen    = $B000;
  19.   ColorScreen   = $B800;
  20.   LineTab       : ARRAY [0..25] OF INTEGER =
  21.                      (0,-1,79,159,239,319,399,479,559,639,
  22.                      719,799,879,959,1039,1119,1199,
  23.                      1279,1359,1439,1519,1599,1679,1759,
  24.                      1839,1919);
  25. VAR
  26.   ScreenMode    : BYTE ABSOLUTE $0040:$0049;
  27.  
  28. PROCEDURE InitTest;
  29. BEGIN
  30.   IF ScreenMode = 7 THEN VideoBuffer := MonoScreen
  31.                     ELSE VideoBuffer := ColorScreen;
  32. END;
  33.  
  34. PROCEDURE WriteMem(x,y : INTEGER; s : STRING; Farbe : BYTE);
  35.                    { Schreibt s mit Farbe an Position xy   }
  36. BEGIN
  37.   INLINE($8B/$76/<Y);           { MOV    SI,[BP+<Y]        }
  38.   INLINE($D1/$E6);              { SHL    SI                }
  39.   INLINE($8B/$BC/>LINETAB);     { MOV    DI,[SI+>LINETAB]  }
  40.   INLINE($03/$7E/<X);           { ADD    DI,[BP+<X]        }
  41.   INLINE($D1/$E7);              { SHL    DI                }
  42.   INLINE($8E/$06/>VIDEOBUFFER); { MOV    ES,[VIDEOBUFFER]  }
  43.   INLINE($1E);                  { PUSH   DS                }
  44.   INLINE($8C/$D0);              { MOV    AX,SS             }
  45.   INLINE($8E/$D8);              { MOV    DS,AX             }
  46.   INLINE($8A/$8E/>S);           { MOV    CL,[BP+S]         }
  47.   INLINE($20/$C9);              { AND    CL,CL             }
  48.   INLINE($74/<$0D);             { JZ     $0D               }
  49.   INLINE($30/$ED);              { XOR    CH,CH             }
  50.   INLINE($8A/$66/<FARBE);       { MOV    AH,[BP+<FARBE]    }
  51.   INLINE($8D/$B6/>S+1);         { LEA    SI,[BP+S+1]       }
  52.   INLINE($AC);                  { LODSB                    }
  53.   INLINE($AB);                  { STOSW                    }
  54.   INLINE($E2/<$FC);             { LOOP   $FC               }
  55.   INLINE($1F);                  { POP    DS                }
  56. END;
  57.  
  58. PROCEDURE WritePart(x, y, Len, Disp : INTEGER; S : STRING);
  59.                    { Schreibt s ab Disp in ein Len breites }
  60.                    { Feld.                                 }
  61. BEGIN
  62.   INLINE($8B/$76/<Y);           { MOV    SI,[BP+<Y]        }
  63.   INLINE($D1/$E6);              { SHL    SI                }
  64.   INLINE($8B/$BC/>LINETAB);     { MOV    DI,[SI+>LINETAB]  }
  65.   INLINE($03/$7E/<X);           { ADD    DI,[BP+<X]        }
  66.   INLINE($D1/$E7);              { SHL    DI                }
  67.   INLINE($8A/$96/>S);           { MOV    DL,[BP+S]         }
  68.   INLINE($30/$F6);              { XOR    DH,DH             }
  69.   INLINE($8A/$4E/<LEN);         { MOV    CL,[BP+<LEN]      }
  70.   INLINE($30/$ED);              { XOR    CH,CH             }
  71.   INLINE($8B/$76/<DISP);        { MOV    SI,[BP+<DISP]     }
  72.   INLINE($8E/$06/>VIDEOBUFFER); { MOV    ES,[VIDEOBUFFER]  }
  73.   INLINE($39/$F2);              { CMP    DX,SI             }
  74.   INLINE($7C/<$6);              { JL     $6                }
  75.   INLINE($8A/$82/$FF00);        { MOV    AL,[BP+SI+$FF00]  }
  76.   INLINE($EB/$2);               { JMP    $2                }
  77.   INLINE($B0/32);               { MOV    AL,32  'Space'    }
  78.   INLINE($26);                  { ES:                      }
  79.   INLINE($88/$05);              { MOV    [DI],AL           }
  80.   INLINE($46);                  { INC    SI                }
  81.   INLINE($47);                  { INC    DI                }
  82.   INLINE($47);                  { INC    DI                }
  83.   INLINE($E2/<$EC);             { LOOP   $EC               }
  84. END;
  85.  
  86. PROCEDURE WriteAtt(x, y, Len, Farbe : INTEGER);
  87.                   { Schreibt Len Attribute mit Farbe an xy }
  88. BEGIN
  89.   INLINE($8B/$76/<Y);           { MOV    SI,[BP+<Y]        }
  90.   INLINE($D1/$E6);              { SHL    SI                }
  91.   INLINE($8B/$BC/>LINETAB);     { MOV    DI,[SI+>LINETAB]  }
  92.   INLINE($03/$7E/<X);           { ADD    DI,[BP+<X]        }
  93.   INLINE($D1/$E7);              { SHL    DI                }
  94.   INLINE($47);                  { INC    DI                }
  95.   INLINE($8A/$4E/$08);          { MOV    CL,[BP+$08]       }
  96.   INLINE($20/$C9);              { AND    CL,CL             }
  97.   INLINE($74/<$10);             { JZ     $10               }
  98.   INLINE($30/$ED);              { XOR    CH,CH             }
  99.   INLINE($8A/$46/$06);          { MOV    AL,[BP+$06]       }
  100.   INLINE($8E/$06/>VIDEOBUFFER); { MOV    ES,[VIDEOBUFFER]  }
  101.   INLINE($26);                  { ES:                      }
  102.   INLINE($88/$05);              { MOV    [DI],AL           }
  103.   INLINE($47);                  { INC    DI                }
  104.   INLINE($47);                  { INC    DI                }
  105.   INLINE($E2/<$F9);             { LOOP   $F9               }
  106. END;
  107.  
  108. BEGIN
  109.   InitTest;
  110. END.
  111. (* ------------------------------------------------------ *)
  112. (*                 Ende von MEMWRITE.PAS                  *)
  113.