[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]

    Unit LED;

    {The author: Salvatore Meschini
                 E-MAIL : smeschini@ermes.it
                 WWW : http://www.ermes.it/pws/mesk
                 Version 1.1 }

     Interface

     Procedure Caps(ONorOFF:boolean);
     Procedure NumLock(ONorOFF:boolean);
     Procedure ScrLock(ONorOFF:boolean);

     Implementation

     Procedure Caps(ONorOFF:boolean);Assembler;

        asm
        cmp ONorOFF,1       {Do you want CAPS ON?}
        je @BeLight         {If yes ...}
        jmp @BeDarkness     {Else...}
        @BeLight:
         MOV SI,40h
         MOV ES,SI
         MOV AL,ES:[0017h]
         OR  AL,40h
         MOV ES,SI
         MOV ES:[0017h],AL
         jmp @FINISH
        @BeDarkness:
         MOV SI,40h
         MOV ES,SI
         MOV AL,ES:[0017h]
         AND AL,0BFh
         MOV ES,SI
         MOV ES:[0017h],AL
        @FINISH:
         MOV AH,1
         INT 16h
        end;

      Procedure NumLock(ONorOFF:Boolean);Assembler;
        asm
        cmp ONorOFF,1
        je @BeLight
        jmp @BeDarkness
        @BeLight:
         MOV SI,40h
         MOV ES,SI
         MOV AL,ES:[0017h]
         OR  AL,20h
         MOV ES,SI
         MOV ES:[0017h],AL
         jmp @FINISH
        @BeDarkness:
         MOV SI,40h
         MOV ES,SI
         MOV AL,ES:[0017h]
         AND AL,0DFh
         MOV ES,SI
         MOV ES:[0017h],AL
        @FINISH:
         MOV AH,1
         INT 16h
        end;

      Procedure ScrLock(ONorOFF:Boolean);Assembler;
        asm
        cmp ONorOFF,1
        je @BeLight
        jmp @BeDarkness
        @BeLight:
         MOV SI,40h
         MOV ES,SI
         MOV AL,ES:[0017h]
         OR  AL,10h
         MOV ES,SI
         MOV ES:[0017h],AL
         jmp @FINISH
        @BeDarkness:
         MOV SI,40h
         MOV ES,SI
         MOV AL,ES:[0017h]
         AND AL,0EFh
         MOV ES,SI
         MOV ES:[0017h],AL
        @FINISH:
         MOV AH,1
         INT 16h
        end;
    END.

    (* -------------------------- DEMO ---------------------------- *)

    USES LED;

    {Make your own light effects!!!}

    var i:byte;

    (* The following procedure isn't affected by hardware! *)
    procedure Wait(Ticks: Word); assembler; (* 18 Ticks = 1 second *)
    ASM
     mov CX,Ticks
     @Attendi:
      push AX
      push ES
      mov AX,0000
      mov ES,AX
      mov AX,ES:[046Ch]
      @Lab1:
      cmp AX,ES:[046Ch]
      je @Lab1
      pop ES
      pop AX
      loop @Attendi
    END;

    function KeyPressed: Boolean;

      var
        Premuto: Byte;

      begin
        Inline(
          $B4/$0B/               {    MOV AH,+$0B         }
          $CD/$21/               {    INT $21             }
          $88/$86/>Premuto);     {    MOV >Premuto[BP],AL }
        KeyPressed := (Premuto = $FF);
      end;

    begin
    repeat
          NumLock(TRUE);
           wait(1);
          NumLock(FALSE);
          Caps(TRUE);
           wait(1);
          Caps(FALSE);
          ScrLock(True);
           wait(1);
          Scrlock(false);
          Caps(TRUE);
           wait(1);
          Caps(FALSE);
    until keypressed;
    end.

[Back to KEYBOARD SWAG index] [Back to Main SWAG index] [Original]