1 ; **************************************************************************** 2 ; clock2.s (TRDOS 386, TRDOS v2.0 - sample binary file, 'clock2.s') 3 ; ---------------------------------------------------------------------------- 4 ; CLOCK2.PRG ! TEST program ! 5 ; TRDOS 386 RTC interrupt & timer event test program (by Erdogan Tan) 6 ; 7 ; 02/06/2016 8 ; 9 ; [ Last Modification: 11/06/2016 ] 10 ; 11 ; **************************************************************************** 12 ; clock.s (TRDOS 386, RTC interrupt test program, 31/05/2016) 13 14 [BITS 32] 15 00000000 BE[50010000] mov esi, prg_msg 16 00000005 E832010000 call print_msg 17 18 0000000A B400 mov ah, 0 ; set video mode 19 0000000C B003 mov al, 3 ; 80x25 text mode, CGA colors 20 0000000E CD31 int 31h ; TRDOS 386 video interrupt 21 ; (IBM PC/AT ROMBIOS, INT 10h) 22 23 ; start (Real Time Clock) timer function 24 00000010 B3FF mov bl, 0FFh ; signal return (response) byte 25 00000012 B703 mov bh, 3 ; 1 second (rtc interrupt) 26 00000014 B901000000 mov ecx, 1 27 ;mov cl, 1 28 00000019 BA[EB010000] mov edx, timer_event ; signal return (response) address 29 0000001E B821000000 mov eax, 33 ; 'systimer' 30 00000023 CD40 int 40h ; TRDOS 386 system call 31 00000025 0F82F7000000 jc terminate 32 33 0000002B A2[EC010000] mov [timer_event_number], al 34 35 rtc_p1: 36 ; Set cursor position 37 00000030 6631D2 xor dx, dx ; row 0, column 0 38 00000033 30FF xor bh, bh ; Video page 0 39 00000035 B402 mov ah, 2 ; set cursor position 40 00000037 CD31 int 31h ; TRDOS 386 video interrupt 41 42 ; Print Real Time Clock content 43 ; 44 00000039 B402 mov ah, 2 ; read the time 45 0000003B CD35 int 35h ; TRDOS 386 date&time interrupt 46 0000003D 0F82DF000000 jc terminate 47 48 00000043 8835[E8010000] mov [time_second], dh 49 ;mov [time_minute], cl 50 ;mov [time_hour], ch 51 00000049 66890D[E9010000] mov [time_minute], cx 52 ; 53 00000050 B404 mov ah, 4 ; read the date 54 00000052 CD35 int 35h ; TRDOS 386 date&time interrupt 55 ; (IBM PC/AT ROMBIOS, INT 1Ah) 56 00000054 0F82C8000000 jc terminate 57 58 ;mov [date_day], dl 59 ;mov [date_month], dh 60 0000005A 668915[E4010000] mov [date_day], dx 61 ;mov [date_year], cl 62 ;mov [date_century], ch 63 00000061 66890D[E6010000] mov [date_year], cx 64 ; 65 00000068 A0[E7010000] mov al, [date_century] 66 0000006D E8BC000000 call bcd_to_ascii 67 00000072 66A3[D4010000] mov [datestr+6], ax 68 00000078 A0[E6010000] mov al, byte [date_year] 69 0000007D E8AC000000 call bcd_to_ascii 70 00000082 66A3[D6010000] mov [datestr+8], ax 71 00000088 A0[E5010000] mov al, byte [date_month] 72 0000008D E89C000000 call bcd_to_ascii 73 00000092 66A3[D1010000] mov [datestr+3], ax 74 00000098 A0[E4010000] mov al, byte [date_day] 75 0000009D E88C000000 call bcd_to_ascii 76 000000A2 66A3[CE010000] mov [datestr], ax 77 ; 78 000000A8 A0[EA010000] mov al, byte [time_hour] 79 000000AD E87C000000 call bcd_to_ascii 80 000000B2 66A3[DA010000] mov [timestr], ax 81 000000B8 A0[E9010000] mov al, byte [time_minute] 82 000000BD E86C000000 call bcd_to_ascii 83 000000C2 66A3[DD010000] mov [timestr+3], ax 84 000000C8 A0[E8010000] mov al, byte [time_second] 85 000000CD E85C000000 call bcd_to_ascii 86 000000D2 66A3[E0010000] mov [timestr+6], ax 87 ; 88 000000D8 BB[BC010000] mov ebx, rtc_msg ; message offset 89 000000DD B9FF000000 mov ecx, 255 ; message length 90 000000E2 BA0F000000 mov edx, 0Fh ; white color 91 000000E7 B823000000 mov eax, 35 ; 'sysmsg' 92 000000EC CD40 int 40h ; TRDOS 386 system call 93 94 rtc_p2: 95 000000EE 803D[EB010000]FF cmp byte [timer_event], 0FFh 96 000000F5 750C jne short rtc_p3 97 98 000000F7 C605[EB010000]00 mov byte [timer_event], 0 99 000000FE E92DFFFFFF jmp rtc_p1 100 101 rtc_p3: 102 ; Check keyboard buffer 103 00000103 B411 mov ah, 11h 104 00000105 CD32 int 32h ; TRDOS 386 keyboard interrupt 105 ; (IBM PC/AT ROMBIOS, INT 16h) 106 00000107 74E5 jz short rtc_p2 ; keyboard buffer empty 107 108 00000109 E829000000 call getch 109 0000010E 3C1B cmp al, 1Bh 110 00000110 77DC ja short rtc_p2 111 00000112 740E je short terminate 112 113 ; Stop timer event 114 00000114 0FB61D[EC010000] movzx ebx, byte [timer_event_number] 115 ; bh = 0 -> stop timer event 116 0000011B B821000000 mov eax, 33 ; 'systimer' 117 00000120 CD40 int 40h ; TRDOS 386 system call 118 119 terminate: 120 00000122 B801000000 mov eax, 1 ; 'sysexit' 121 00000127 CD40 int 40h ; TRDOS 386 system call 122 hang: 123 00000129 90 nop 124 0000012A 90 nop 125 0000012B 90 nop 126 0000012C EBFB jmp short hang 127 128 bcd_to_ascii: 129 ; INPUT -> 130 ; AL = Packed BCD number 131 ; OUTPUT -> 132 ; AX = ASCII word/number 133 ; 134 0000012E D410 db 0D4h, 10h ; Undocumented inst. AAM 135 ; AH = AL / 10h 136 ; AL = AL MOD 10h 137 00000130 660D3030 or ax, '00' ; Make it ASCII based 138 00000134 86E0 xchg ah, al 139 00000136 C3 retn 140 141 getch: 142 ; Getchar by using keyboard interrupt 143 00000137 B410 mov ah, 10h 144 00000139 CD32 int 32h ; TRDOS 386 keyboard interrupt 145 ; (IBM PC/AT ROMBIOS, INT 16h) 146 0000013B C3 retn 147 148 print_msg: 149 0000013C 66BB0700 mov bx, 7 150 00000140 B40E mov ah, 0Eh 151 pmsg_loop: 152 00000142 AC lodsb 153 00000143 20C0 and al, al 154 00000145 7404 jz short pmsg_ok 155 00000147 CD31 int 31h ; TRDOS 386 video interrupt 156 00000149 EBF7 jmp short pmsg_loop 157 pmsg_ok: 158 0000014B B410 mov ah, 10h ; Getchar 159 0000014D CD32 int 32h ; TRDOS 386 keyboard interrupt 160 0000014F C3 retn 161 162 ; /// MESSAGE - DATA /// 163 164 prg_msg: 165 00000150 0D0A07 db 0Dh, 0Ah, 07h 166 00000153 5452444F5320333836- db 'TRDOS 386 RTC & timer event test program by Erdogan Tan [11/06/2016]' 166 0000015C 205254432026207469- 166 00000165 6D6572206576656E74- 166 0000016E 20746573742070726F- 166 00000177 6772616D2062792045- 166 00000180 72646F67616E205461- 166 00000189 6E205B31312F30362F- 166 00000192 323031365D 167 00000197 0D0A0D0A db 0Dh, 0Ah, 0Dh, 0Ah 168 0000019B 28507265737320616E- db '(Press any key to continue...)' 168 000001A4 79206B657920746F20- 168 000001AD 636F6E74696E75652E- 168 000001B6 2E2E29 169 000001B9 0D0A00 db 0Dh, 0Ah, 0 170 171 rtc_msg: 172 000001BC 5265616C2054696D65- db "Real Time Clock - " 172 000001C5 20436C6F636B202D20 173 datestr: 174 000001CE 30302F30302F303030- db "00/00/0000" 174 000001D7 30 175 000001D8 2020 db " " 176 timestr: 177 000001DA 30303A30303A3030 db "00:00:00" 178 000001E2 20 db " " 179 000001E3 00 db 0 180 181 000001E4 11 date_day: db 11h 182 000001E5 06 date_month: db 06h 183 000001E6 16 date_year: db 16h 184 000001E7 20 date_century: db 20h 185 186 000001E8 99 time_second: db 99h 187 000001E9 30 time_minute: db 30h 188 000001EA 02 time_hour: db 02h 189 190 000001EB 00 timer_event: db 0 191 000001EC 00 timer_event_number: db 0 192 193 000001ED 495354414E42554C00 db 'ISTANBUL', 0