From 2d04cacc5322951f187bb17e017c12920ac8ebe2 Mon Sep 17 00:00:00 2001 From: Mark Zbikowski Date: Thu, 25 Apr 2024 21:24:10 +0100 Subject: MZ is back! --- v4.0/src/BIOS/CLOCKSUB.INC | 78 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 v4.0/src/BIOS/CLOCKSUB.INC (limited to 'v4.0/src/BIOS/CLOCKSUB.INC') diff --git a/v4.0/src/BIOS/CLOCKSUB.INC b/v4.0/src/BIOS/CLOCKSUB.INC new file mode 100644 index 0000000..65b6698 --- /dev/null +++ b/v4.0/src/BIOS/CLOCKSUB.INC @@ -0,0 +1,78 @@ +; +; date_verify loosely checks bcd date values to be in range in bin_date_time +; +date_verify: ; +assume ds:code,es:nothing + cmp byte ptr bin_date_time+0,20h ; century check + ja date_error ; jmp error + jz century_20 ; jmp in 20th century + cmp byte ptr bin_date_time+0,19h ; century check + jb date_error ; jmp error + cmp byte ptr bin_date_time+1,80h ; year check + jb date_error ; jmp error +century_20: ; + cmp byte ptr bin_date_time+1,99h ; year check + ja date_error ; jmp error + cmp byte ptr bin_date_time+2,12h ; month check + ja date_error ; jmp error + cmp byte ptr bin_date_time+2,00h ; month check + jbe date_error ; jmp error + cmp byte ptr bin_date_time+3,31h ; day check + ja date_error ; jmp error + cmp byte ptr bin_date_time+3,00h ; day check + jbe date_error ; jmp error + clc ; set success flag + ret ; +date_error: ; + stc ; set error flag + ret ; + +; +; time_verify very loosely checks bcd date values to be in range in bin_date_time +; +time_verify: +assume ds:code,es:nothing + cmp byte ptr bin_date_time+0,24H + ja time_error + cmp byte ptr bin_date_time+1,59H + ja time_error + cmp byte ptr bin_date_time+2,59H + ja time_error + clc + ret +time_error: + stc + ret + +; +; bcd_verify checks values in bin_date_time to be valid +; bcd numerals. carry set if any nibble out of range +; +bcd_verify: ; +assume ds:code,es:nothing + mov cx,4 ; 4 bytes to check + mov bx,offset bin_date_time ; +bv_loop: ; + mov al,[bx] ; get a bcd number (0..99) + mov ah,al ; + and ax,0f00fh ; 10's place in high ah, 1's in al + cmp al,10 ; is 1's place in range? + ja bv_error ; jmp out of range + shr ah,1 ; swap nibbles + shr ah,1 ; ... + shr ah,1 ; ... + shr ah,1 ; ... + and ah,0fh ; get rid of any erroneous bits + cmp ah,10 ; is 10's place in range + ja bv_error ; jmp out of range + inc bx ; next byte + dec cx ; + jnz bv_loop ; + clc ; set success flag + ret ; +bv_error: ; + stc ; set error flag + ret ; +; +; Dos 3.30 - The real time clock structures were moved to msbio2.asm +; -- cgit v1.2.3