; ; BCD CLOCK ; ; Compile with FASM for Menuet ; ; use32 org 0x0 db 'MENUET01' dd 0x01 dd START dd I_END dd 0x1000 dd 0x1000 dd 0x0 , 0x0 include 'lang.inc' include '../../../macros.inc' START: red: call drawwindow still: mov eax,23 ; wait for timeout mov ebx,50 mcall cmp eax,1 ; redraw ? je red cmp eax, 2 ; key je key cmp eax,3 ; button in buffer ? je button call drawclock jmp still key: mov eax, 2 int 0x40 jmp still button: mov al,17 ; get id mcall cmp ah,1 ; button id=1 ? jne noclose or eax,-1 ; close this program mcall noclose: jmp still drawclock: mov eax,3 ; get time mcall bswap eax shr eax,8 mov edi,dg1 mov ecx,6 dgtomem: push eax and al,0x0f mov [edi],al inc edi pop eax shr eax,4 loop dgtomem mov ebx,79*65536+11 mov edi,dg1 digitlp: mov ecx,10*65536+11 xor esi,esi plotlp: xor edx,edx test byte[edi],8 je nobit mov edx,0x00ff0000 nobit: mov eax,13 ; plot 8,4,2,1 mcall add ecx,13*65536 shl byte[edi],1 inc esi cmp esi,4 jne plotlp shr byte[edi],4 mov edx,0x00880040 mov eax,13 ; draw digit box mcall pusha mov edx,ebx and edx,0xffff0000 shr ecx,16 or edx,ecx add edx,3*65536+2 mov ebx,0x00010100 mov ecx,[edi] mov esi,0x00ffffff mov eax,47 ; display decimal mcall popa sub ebx,13*65536 inc edi cmp edi,dg1+6 jne digitlp ret drawwindow: mov eax,12 mov ebx,1 ; start redraw mcall mov eax, 48 mov ebx, 4 mcall mov ecx, eax xor eax,eax ; window mov ebx,100*65536+113 add ecx,100*65536+87 mov edx,0x34400088 mov edi,title mcall call drawclock mov eax,12 mov ebx,2 ; end redraw mcall ret title db 'BCD Clock',0 I_END: dg1: db ?