OSDN Git Service

svn rev.329より移動。
[chnosproject/CHNOSProject.git] / CHNOSProject / chnos / tolset_chn_000 / chnos_008 / chnos / naskfunc.nas
diff --git a/CHNOSProject/chnos/tolset_chn_000/chnos_008/chnos/naskfunc.nas b/CHNOSProject/chnos/tolset_chn_000/chnos_008/chnos/naskfunc.nas
new file mode 100644 (file)
index 0000000..50bac68
--- /dev/null
@@ -0,0 +1,891 @@
+[FORMAT "WCOFF"]\r
+[INSTRSET "i486p"]\r
+[BITS 32]\r
+[FILE "naskfunc.nas"]\r
+\r
+       GLOBAL  _io_hlt, _io_cli, _io_sti, _io_stihlt\r
+       GLOBAL  _io_in8,  _io_in16,  _io_in32\r
+       GLOBAL  _io_out8, _io_out16, _io_out32\r
+       GLOBAL  _io_load_eflags, _io_store_eflags\r
+       GLOBAL  _load_gdtr, _load_idtr\r
+       GLOBAL  _load_cr0, _store_cr0\r
+       GLOBAL  _load_cr1, _store_cr1\r
+       GLOBAL  _load_cr2, _store_cr2\r
+       GLOBAL  _load_cr3, _store_cr3\r
+       GLOBAL  _load_tr\r
+       GLOBAL  _asm_end_app\r
+       GLOBAL  _memtest_sub\r
+       GLOBAL  _farjmp, _farcall\r
+       GLOBAL  _start_app\r
+       GLOBAL  _asm_osselect_third\r
+       GLOBAL  _clts, _fnsave, _frstor\r
+       GLOBAL  _pit_beep_on, _pit_beep_off\r
+       GLOBAL  _pipelineflush\r
+       GLOBAL  _read_tsc\r
+       GLOBAL  _cpuid\r
+\r
+       GLOBAL  _asm_inthandler00, _asm_inthandler01, _asm_inthandler02, _asm_inthandler03, _asm_inthandler04, _asm_inthandler05, _asm_inthandler06, _asm_inthandler07, _asm_inthandler08, _asm_inthandler09, _asm_inthandler0a, _asm_inthandler0b, _asm_inthandler0c, _asm_inthandler0d, _asm_inthandler0e, _asm_inthandler0f, _asm_inthandler10, _asm_inthandler11, _asm_inthandler12, _asm_inthandler13, _asm_inthandler14, _asm_inthandler15, _asm_inthandler16, _asm_inthandler17, _asm_inthandler18, _asm_inthandler19, _asm_inthandler1a, _asm_inthandler1b, _asm_inthandler1c, _asm_inthandler1d, _asm_inthandler1e, _asm_inthandler1f\r
+       EXTERN  _inthandler00, _inthandler01, _inthandler02, _inthandler03, _inthandler04, _inthandler05, _inthandler06, _inthandler07, _inthandler08, _inthandler09, _inthandler0a, _inthandler0b, _inthandler0c, _inthandler0d, _inthandler0e, _inthandler0f, _inthandler10, _inthandler11, _inthandler12, _inthandler13, _inthandler14, _inthandler15, _inthandler16, _inthandler17, _inthandler18, _inthandler19, _inthandler1a, _inthandler1b, _inthandler1c, _inthandler1d, _inthandler1e, _inthandler1f\r
+\r
+       GLOBAL  _asm_inthandler27\r
+       EXTERN  _inthandler27\r
+\r
+       GLOBAL  _asm_inthandler20\r
+       EXTERN  _inthandler20\r
+\r
+       GLOBAL  _asm_inthandler21\r
+       EXTERN  _inthandler21\r
+\r
+       GLOBAL  _asm_inthandler2c\r
+       EXTERN  _inthandler2c\r
+\r
+       GLOBAL  _asm_hrb_api\r
+       EXTERN  _hrb_api\r
+\r
+[SECTION .text]\r
+\r
+_asm_hrb_api:\r
+       sti\r
+       push    ds\r
+       push    es\r
+       pushad\r
+       pushad\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call _hrb_api\r
+       cmp     eax,0\r
+       jne     _asm_end_app\r
+       add     esp,32\r
+       popad\r
+       pop     es\r
+       pop     ds\r
+       iretd\r
+\r
+_cpuid:\r
+       pushad\r
+       mov     esi,[esp+36]\r
+       mov     eax,[esp+40]\r
+       db      0x0f,0xa2\r
+       mov     [esi   ],eax\r
+       mov     [esi+ 4],ebx\r
+       mov     [esi+ 8],edx\r
+       mov     [esi+12],ecx\r
+       popad\r
+       ret\r
+\r
+_read_tsc:\r
+       pushad\r
+       mov     ebx,[esp+36]\r
+       db      0x0f,0x31\r
+       mov     [ebx],edx\r
+       mov     [ebx+4],eax\r
+       popad\r
+       ret\r
+\r
+_asm_inthandler2c:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler2c\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler21:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler21\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler20:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler20\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_pipelineflush:\r
+       jmp     flush\r
+flush:\r
+       ret\r
+\r
+\r
+_asm_inthandler00:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler00\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler01:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler01\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler02:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler02\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler03:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler03\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler04:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler04\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler05:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler05\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler06:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler06\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler07:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler07\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler08:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler08\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler09:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler09\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler0a:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler0a\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler0b:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler0b\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler0c:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler0c\r
+       cmp     eax,0\r
+       jne     _asm_end_app\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler0d:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler0d\r
+       cmp     eax,0\r
+       jne     _asm_end_app\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler0e:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler0e\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler0f:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler0f\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler10:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler10\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler11:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler11\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler12:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler12\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler13:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler13\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler14:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler14\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler15:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler15\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler16:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler16\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler17:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler17\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler18:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler18\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler19:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler19\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler1a:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler1a\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler1b:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler1b\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler1c:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler1c\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler1d:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler1d\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler1e:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler1e\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler1f:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler1f\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_asm_inthandler27:\r
+       push    es\r
+       push    ds\r
+       pushad\r
+       mov     eax,esp\r
+       push    eax\r
+       mov     ax,ss\r
+       mov     ds,ax\r
+       mov     es,ax\r
+       call    _inthandler27\r
+       pop     eax\r
+       popad\r
+       pop     ds\r
+       pop     es\r
+       iretd\r
+\r
+_pit_beep_on:\r
+       in      al,0x61\r
+       or      al,0x03\r
+       and     al,0x0f\r
+       out     0x61,al\r
+       ret\r
+\r
+_pit_beep_off:\r
+       in      al,0x61\r
+       and     al,0xd\r
+       out     0x61,al\r
+       ret\r
+\r
+_asm_osselect_third:\r
+        mov     ax,ss\r
+        mov     fs,ax\r
+        mov     gs,ax\r
+        mov     esp,[esp+4]\r
+        jmp     2*8:0x0000001b\r
+\r
+_clts:\r
+        clts\r
+        ret\r
+\r
+_fnsave:\r
+        mov     eax,[esp+4]     ; addr\r
+        fnsave  [eax]\r
+        ret\r
+\r
+_frstor:\r
+        mov     eax,[esp+4]     ; addr\r
+        frstor  [eax]\r
+        ret\r
+\r
+\r
+_io_hlt:\r
+       hlt\r
+       ret\r
+\r
+_io_cli:\r
+       cli\r
+       ret\r
+\r
+_io_sti:\r
+       sti\r
+       ret\r
+\r
+_io_stihlt:\r
+       sti\r
+       hlt\r
+       ret\r
+\r
+_io_in8:\r
+       mov     edx,[esp+4]\r
+       mov     eax,0\r
+       in      al,dx\r
+       ret\r
+\r
+_io_in16:\r
+       mov     edx,[esp+4]\r
+       mov     eax,0\r
+       in      ax,dx\r
+       ret\r
+\r
+_io_in32:\r
+       mov     edx,[esp+4]\r
+       in      eax,dx\r
+       ret\r
+\r
+_io_out8:\r
+       mov     edx,[esp+4]\r
+       mov     al,[esp+8]\r
+       out     dx,al\r
+       ret\r
+\r
+_io_out16:\r
+       mov     edx,[esp+4]\r
+       mov     eax,[esp+8]\r
+       out     dx,ax\r
+       ret\r
+\r
+_io_out32:\r
+       mov     edx,[esp+4]\r
+       mov     eax,[esp+8]\r
+       out     dx,eax\r
+       ret\r
+\r
+_io_load_eflags:\r
+       pushfd\r
+       pop     eax\r
+       ret\r
+\r
+_io_store_eflags:\r
+       mov     eax,[esp+4]\r
+       push    eax\r
+       popfd\r
+       ret\r
+\r
+_load_gdtr:\r
+       mov     ax,[esp+4]\r
+       mov     [esp+6],ax\r
+       lgdt    [esp+6]\r
+       ret\r
+\r
+_load_idtr:\r
+       mov     ax,[esp+4]\r
+       mov     [esp+6],ax\r
+       lidt    [esp+6]\r
+       ret\r
+\r
+_load_cr0:\r
+       mov     eax,cr0\r
+       ret\r
+\r
+_store_cr0:\r
+       mov     eax,[esp+4]\r
+       mov     cr0,eax\r
+       ret\r
+\r
+_load_cr1:\r
+       mov     eax,cr1\r
+       ret\r
+\r
+_store_cr1:\r
+       mov     eax,[esp+4]\r
+       mov     cr1,eax\r
+       ret\r
+\r
+_load_cr2:\r
+       mov     eax,cr2\r
+       ret\r
+\r
+_store_cr2:\r
+       mov     eax,[esp+4]\r
+       mov     cr2,eax\r
+       ret\r
+\r
+_load_cr3:\r
+       mov     eax,cr3\r
+       ret\r
+\r
+_store_cr3:\r
+       mov     eax,[esp+4]\r
+       mov     cr3,eax\r
+       ret\r
+\r
+_load_tr:\r
+       ltr     [esp+4]\r
+       ret\r
+\r
+_memtest_sub:\r
+       push    edi\r
+       push    esi\r
+       push    ebx\r
+       mov     esi,0xaa55aa55\r
+       mov     edi,0x55aa55aa\r
+       mov     eax,[esp+12+4]\r
+mts_loop:\r
+       mov     ebx,eax\r
+       add     ebx,0xffc\r
+       mov     edx,[ebx]\r
+       mov     [ebx],esi\r
+       xor     dword [ebx],0xffffffff\r
+       cmp     edi,[ebx]\r
+       jne     mts_fin\r
+       xor     dword [ebx],0xffffffff\r
+       cmp     esi,[ebx]\r
+       jne     mts_fin\r
+       mov     [ebx],edx\r
+       add     eax,0x1000\r
+       cmp     eax,[esp+12+8]\r
+       jbe     mts_loop\r
+       pop     ebx\r
+       pop     esi\r
+       pop     edi\r
+       ret\r
+mts_fin:\r
+       mov     [ebx],edx\r
+       pop     ebx\r
+       pop     esi\r
+       pop     edi\r
+       ret\r
+\r
+_farjmp:\r
+       jmp     far     [esp+4]\r
+       ret\r
+\r
+_farcall:\r
+       call    far     [esp+4]\r
+       ret\r
+\r
+\r
+_asm_end_app:\r
+       mov     esp,[eax]\r
+       mov     dword [eax+4],0\r
+       popad\r
+       ret\r
+\r
+_start_app:\r
+       pushad\r
+       mov     eax,[esp+36]\r
+       mov     ecx,[esp+40]\r
+       mov     edx,[esp+44]\r
+       mov     ebx,[esp+48]\r
+       mov     ebp,[esp+52]\r
+       mov     [ebp  ],esp\r
+       mov     [ebp+4],ss\r
+       mov     es,bx\r
+       mov     ds,bx\r
+       mov     fs,bx\r
+       mov     gs,bx\r
+\r
+       or      ecx,3\r
+       or      ebx,3\r
+       push    ebx\r
+       push    edx\r
+       push    ecx\r
+       push    eax\r
+       retf\r
+\r