Tiempo Real chip en pmode
Cómo acceder en tiempo real Chip de modo Protegido.
Colaborador: GREG VIGNEAULT
{
MD>¿Qué habría alguien de aquí recomendamos como la mejor manera para los DOS
>modo protegido para obtener la hora actual del día *sin* voltear
>al modo real para hacer un estándar de llamada de DOS?
Si su código es permitido hablar con el reloj de tiempo real (RTC) de la viruta,
aquí & #39 s algunos ejemplos de código para acceder a la RTC directamente. Las funciones
el trabajo únicamente con 24 horas de formato de hora (si es necesario, internamente por el RTC,
se traducen entre 12/24-hr veces y binario/BCD formatos)...
}
(*******************************************************************)
PROGRAMA de RClock { Get/Set Time/Date directamente desde RTC chip }
{ 9 de junio de 1994. Greg Vigneault }
TIPO de Treg = 0..$D { intervalo de tiempo/fecha de registro de direcciones }
To23 = 0..23 { rango de horas }
To59 = 0..59 { rango para los minutos y segundos }
VAR Años, Meses, Días, DoW, Hr, Min, Seg : BYTE
la FUNCIÓN de RTCbusy:BOOLEAN BEGIN { RTC de fecha/hora se actualiza?... }
Port[$70] := $A RTCbusy := (Port[$71] Y 128) = 128
END {RTCbusy}
la FUNCIÓN de ReadReg (Reg:Treg):BYTE BEGIN { leer un RTC registro... }
SI Reg [0..9], a CONTINUACIÓN, REPITA {wait} HASTA que NO RTCbusy
Port[$70] := Reg ReadReg := Port[$71]
END {ReadReg}
PROCEDIMIENTO WriteReg (Reg:Treg de Datos:BYTE) { escribir RTC reg... }
VAR temp:BYTE EMPEZAR
SI Reg [0..9] THEN BEGIN { tiempo/fecha reg? }
REPETIR {wait} HASTA que NO RTCbusy
Port[$70] := $B temp := Port[$71] Puerto[$71] := temp O $80
END{SI}
Port[$70] := Reg Port[$71] := Datos
SI Reg [0..9], a CONTINUACIÓN, EMPEZAR
Port[$70] := $B Port[$71] := temp Y NO $80
END{SI}
END {WriteReg}
la FUNCIÓN de BCD2Bin (BCD:BYTE):BYTE BEGIN { xlate BCD a binario... }
BCD2Bin := (BCD Y $0F) ((BCD SHR 4) * 10)
END {BCD2Bin}
FUNCIÓN Bin2BCD (Bin:BYTE):BYTE BEGIN { xlate binario a BCD... }
Bin2BCD := (Bin MOD 10) O BYTE((Bin DIV 10) SHL 4)
END {Bin2BCD}
PROCEDIMIENTO GetTime (VAR Hr,Min,Seg:BYTE)
VAR temp:BYTE EMPEZAR
Seg := ReadReg(0) Min := ReadReg(2)
Hr := ReadReg(4) temp := Hr Hr= Hr Y NO $80
SI (ReadReg($B), Y 4) <> 4 then BEGIN { xlate BCD a bin... }
Seg := BCD2Bin(Sec) Min := BCD2Bin(Min) Hr := BCD2Bin(Hr)
END{SI}
SI (ReadReg($B), Y 2) <> 2 THEN { RTC en 12 horas modo?... }
SI (temp Y 128) = 128 { P. M.? }
a CONTINUACIÓN, BEGIN IF (Hora < 12), a CONTINUACIÓN, INC(Hr,12) END
SI por el contrario, Hr = 12 ENTONCES Hr := 0
END {GetTime}
PROCEDIMIENTO SetTime (Hr:To23 Min,Sec:To59)
VAR temp:BYTE EMPEZAR
temp := BYTE(Hr)
SI (ReadReg($B), Y 2) <> 2 THEN { RTC en 12 horas modo?... }
SI (Hr > 12) a CONTINUACIÓN, DEC(Hr,12) por el contrario, SI h = 0, a CONTINUACIÓN, Hr := 12
SI (ReadReg($B), Y 4) <> 4 then BEGIN { RTC quiere el formato BCD... }
Hr := Bin2BCD(Hr) Min := Bin2BCD(Min) S := Bin2BCD(Sec)
END{SI}
SI ((ReadReg($B) Y 2)<>2) Y (temp > 11) Hr := h O $80
WriteReg(0,S) WriteReg(2,Min) WriteReg(4,H)
END {SetTime}
PROCEDIMIENTO GetDate (VAR Años,Meses,Días:BYTE) COMIENZAN
Día := ReadReg(7) Mth := ReadReg(8) Año := ReadReg(9)
SI (ReadReg($B), Y 4) <> 4 then BEGIN { xlate BCD a binay... }
Día := BCD2Bin(Día) Mth := BCD2Bin(Mth) Año := BCD2Bin(Años)
END {SI}
END {GetDate}
PROCEDIMIENTO SetDate (Años,Meses,Días:BYTE) COMIENZAN
SI (ReadReg($B), Y 4) <> 4 then BEGIN { RTC quiere el formato BCD... }
Día := Bin2BCD(Día) Mth := Bin2BCD(Mth) Año := Bin2BCD(Años)
END{SI}
WriteReg(7 Día) WriteReg(8,Mth) WriteReg(9,Año)
END {SetDate}
BEGIN {RClock}
GetTime (Hr,Min,Seg) GetDate (Años,Meses,Días) WriteLn
Escribir ( & #39 Fecha es & #39 ,Mth, & #39 / & #39 ,Día, & #39 / & #39 ,Año, & #39 . & #39 )
WriteLn ( & #39 Tiempo es & #39 ,H, & #39 : & #39 ,Min:2, & #39 : & #39 ,Sec:2, & #39 . & #39 )
Escribir ( & #39 (IVA, el RTC está en & #39 )
SI (ReadReg($B), Y 2) <> 2 ENTONCES Escribir ( & #39 12 & #39 ) ELSE Escribir ( & #39 24 & #39 )
Escribir ( & #39 horas modo de uso & #39 )
SI (ReadReg($B), Y 4) <> 4 ENTONCES Escribir( & #39 BCD & #39 ) ELSE Write( & #39 binario & #39 )
WriteLn ( & #39 formato). & #39 )
END {RClock}.
Tiempo Real chip en pmode
Tiempo Real chip en pmode : Multi-millones de consejos para hacer su vida mas facil.
Como acceder en tiempo real Chip de modo Protegido.
Colaborador: GREG VIGNEAULT
{
MD>¿Que habria alguien de aqui recomendamos como la mejor manera para los DOS
>modo protegido para obtener la hora actual del dia *sin* voltear
>al modo real para hacer un estandar de llamada de DOS?
Si su codigo es permitido hablar con el reloj de tiempo real (RTC) de la viruta,
aqui & #39 s algunos ejemplos de codigo para acceder a la RTC directamente. Las funciones
el trabajo unicamente con 24 horas de formato de hora (si es necesario, internamente por el RTC,
se traducen entre 12/24-hr veces y binario/BCD formatos)...
}
(*******************************************************************)
PROGRAMA de RClock { Get/Set Time/Date directamente desde RTC chip }
{ 9 de junio de 1994. Greg Vigneault }
TIPO de Treg = 0..$D { intervalo de tiempo/fecha de registro de direcciones }
To23 = 0..23 { rango de horas }
To59 = 0..59 { rango para los minutos y segundos }
VAR Años, Meses, Dias, DoW, Hr, Min, Seg : BYTE
la FUNCION de RTCbusy:BOOLEAN BEGIN { RTC de fecha/hora se actualiza?... }
Port[$70] := $A RTCbusy := (Port[$71] Y 128) = 128
END {RTCbusy}
la FUNCION de ReadReg (Reg:Treg):BYTE BEGIN { leer un RTC registro... }
SI Reg [0..9], a CONTINUACION, REPITA {wait} HASTA que NO RTCbusy
Port[$70] := Reg ReadReg := Port[$71]
END {ReadReg}
PROCEDIMIENTO WriteReg (Reg:Treg de Datos:BYTE) { escribir RTC reg... }
VAR temp:BYTE EMPEZAR
SI Reg [0..9] THEN BEGIN { tiempo/fecha reg? }
REPETIR {wait} HASTA que NO RTCbusy
Port[$70] := $B temp := Port[$71] Puerto[$71] := temp O $80
END{SI}
Port[$70] := Reg Port[$71] := Datos
SI Reg [0..9], a CONTINUACION, EMPEZAR
Port[$70] := $B Port[$71] := temp Y NO $80
END{SI}
END {WriteReg}
la FUNCION de BCD2Bin (BCD:BYTE):BYTE BEGIN { xlate BCD a binario... }
BCD2Bin := (BCD Y $0F) ((BCD SHR 4) * 10)
END {BCD2Bin}
FUNCION Bin2BCD (Bin:BYTE):BYTE BEGIN { xlate binario a BCD... }
Bin2BCD := (Bin MOD 10) O BYTE((Bin DIV 10) SHL 4)
END {Bin2BCD}
PROCEDIMIENTO GetTime (VAR Hr,Min,Seg:BYTE)
VAR temp:BYTE EMPEZAR
Seg := ReadReg(0) Min := ReadReg(2)
Hr := ReadReg(4) temp := Hr Hr= Hr Y NO $80
SI (ReadReg($B), Y 4) <> 4 then BEGIN { xlate BCD a bin... }
Seg := BCD2Bin(Sec) Min := BCD2Bin(Min) Hr := BCD2Bin(Hr)
END{SI}
SI (ReadReg($B), Y 2) <> 2 THEN { RTC en 12 horas modo?... }
SI (temp Y 128) = 128 { P. M.? }
a CONTINUACION, BEGIN IF (Hora < 12), a CONTINUACION, INC(Hr,12) END
SI por el contrario, Hr = 12 ENTONCES Hr := 0
END {GetTime}
PROCEDIMIENTO SetTime (Hr:To23 Min,Sec:To59)
VAR temp:BYTE EMPEZAR
temp := BYTE(Hr)
SI (ReadReg($B), Y 2) <> 2 THEN { RTC en 12 horas modo?... }
SI (Hr > 12) a CONTINUACION, DEC(Hr,12) por el contrario, SI h = 0, a CONTINUACION, Hr := 12
SI (ReadReg($B), Y 4) <> 4 then BEGIN { RTC quiere el formato BCD... }
Hr := Bin2BCD(Hr) Min := Bin2BCD(Min) S := Bin2BCD(Sec)
END{SI}
SI ((ReadReg($B) Y 2)<>2) Y (temp > 11) Hr := h O $80
WriteReg(0,S) WriteReg(2,Min) WriteReg(4,H)
END {SetTime}
PROCEDIMIENTO GetDate (VAR Años,Meses,Dias:BYTE) COMIENZAN
Dia := ReadReg(7) Mth := ReadReg(8) Año := ReadReg(9)
SI (ReadReg($B), Y 4) <> 4 then BEGIN { xlate BCD a binay... }
Dia := BCD2Bin(Dia) Mth := BCD2Bin(Mth) Año := BCD2Bin(Años)
END {SI}
END {GetDate}
PROCEDIMIENTO SetDate (Años,Meses,Dias:BYTE) COMIENZAN
SI (ReadReg($B), Y 4) <> 4 then BEGIN { RTC quiere el formato BCD... }
Dia := Bin2BCD(Dia) Mth := Bin2BCD(Mth) Año := Bin2BCD(Años)
END{SI}
WriteReg(7 Dia) WriteReg(8,Mth) WriteReg(9,Año)
END {SetDate}
BEGIN {RClock}
GetTime (Hr,Min,Seg) GetDate (Años,Meses,Dias) WriteLn
Escribir ( & #39 Fecha es & #39 ,Mth, & #39 / & #39 ,Dia, & #39 / & #39 ,Año, & #39 . & #39 )
WriteLn ( & #39 Tiempo es & #39 ,H, & #39 : & #39 ,Min:2, & #39 : & #39 ,Sec:2, & #39 . & #39 )
Escribir ( & #39 (IVA, el RTC esta en & #39 )
SI (ReadReg($B), Y 2) <> 2 ENTONCES Escribir ( & #39 12 & #39 ) ELSE Escribir ( & #39 24 & #39 )
Escribir ( & #39 horas modo de uso & #39 )
SI (ReadReg($B), Y 4) <> 4 ENTONCES Escribir( & #39 BCD & #39 ) ELSE Write( & #39 binario & #39 )
WriteLn ( & #39 formato). & #39 )
END {RClock}.
Tiempo Real chip en pmode
By Consejos Y Trucos
Tiempo Real chip en pmode : Multi-millones de consejos para hacer su vida más fácil.