• CMOS单元


    unit CMOS;

    Interface

    const
    ClockSec = $00; { RTclock seconds }
    ClockMin = $02; { RTclock minutes }
    ClockHour = $04; { RTclock hours }
    ClockDOW = $06; { RTclock day of week }
    ClockDay = $07; { RTclock day in month }
    ClockMon = $08; { RTclock month }
    ClockYear = $09; { RTclock year (mod 100)}
    AlarmSec = $01; { Alarm seconds }
    AlarmMin = $03; { Alarm minutes }
    AlarmHour = $05; { Alarm hours }
    Diskettes = $10; { Floppy disk type byte }
    HardDisk = $12; { Regular hard disk type }
    HDExt1 = $19; { Extended hard disk type, unit 1 }
    HDExt2 = $1A; { Extended hard disk type, unit 2 }
    Equipment = $14; { Equipment list }
    CheckLo = $2F; { Checksum low }
    CheckHi = $2E; { Checksum high }
    BaseLo = $15; { Base mem low }
    BaseHi = $16; { Base mem high }
    ExpdLo = $17; { Expansion mem size low }
    ExpdHi = $18; { Expansion mem size high }
    StatRegA = $0A; { Status Register A }
    StatRegB = $0B; { Status register B }
    StatRegC = $0C; { Status register C }
    StatRegD = $0D; { Status register D }
    DiagStat = $0E; { Diagnostic status byte }
    ShutDown = $0F; { Shutdown status byte }
    Century = $32; { BCD Century number }
    AltExpdLo = $30; { Expansion mem size low (alternate) }
    AltExpdHi = $31; { Expansion mem size high (alternate) }
    InfoFlags = $33; { Bit 7 set = top 128k installed, bit
    6 set = first user message (?) }

    function ReadCmos(Address: byte): byte;
    { Returns the byte at the given CMOS ADDRESS }

    procedure WriteCmos(Address, Data: byte);
    { Writes DATA to ADDRESS in CMOS ram }

    procedure SetCMOSCheckSum;
    { Sets the CMOS checksum after you've messed with it :-}

    { The following bytes are RESERVED: $11, $13, $1B-$2D, and
    $34-$3F ($3F marks the end of the CMOS area). You'll note that
    some of these are included in the checksum calculation. }

    implementation

    const
    CmosAddr = $70; { CMOS control port }
    CmosData = $71; { CMOS data port }

    function ReadCmos(Address: byte): byte;
    begin
    {port[CmosAddr] := Address;
    ReadCmos := port[CmosData]}
    end; {ReadCmos}

    procedure WriteCmos(Address, Data: byte);
    begin
    {port[CmosAddr] := Address;
    port[CmosData] := Data;}
    end; {WriteCmos}

    procedure SetCMOSCheckSum;
    { The checksum is simply the sum of $10 to $2D
    (some of these bytes are reserved) }

    var
    I, Sum: word;
    begin
    Sum := 0;
    for I:= $10 to $2D do Sum := Sum + ReadCmos(I);
    WriteCmos(CheckHi, Hi(sum));
    WriteCmos(CheckLo, Lo(sum));
    end; {SetCMOSCheckSum}

    end.

  • 相关阅读:
    Eclipse / android studio 添加第三方jar包 步骤
    Android checkbox 自定义点击效果
    Android 程序打包和安装过程
    Android 基础
    (转)Genymotion安装virtual device的“unable to create virtual device, Server returned Http status code 0”的解决方法
    (转)eclipse 导入Android 项目 步骤
    微信开放平台注册 步骤
    Android Studio 初级安装
    数组
    作用域问题代码
  • 原文地址:https://www.cnblogs.com/djcsch2001/p/2035828.html
Copyright © 2020-2023  润新知