home *** CD-ROM | disk | FTP | other *** search
- /* Åα«úαá¼¼á ñ½∩ áóΓ«¼áΓ¿τÑ߬«ú« ߽Ѫѡ¿∩ ºá
- «íαáí«Γτ¿¬«¼ 21 ¿ 13 »αÑαδóá¡¿∩ ß ó«ßßΓá¡«ó½Ñ¡¿Ñ¼
- ¿ßσ«ñ¡δσ áñαÑß«ó */
-
- /********************************************
- * Restore Vector *
- * Demo Vercion *
- * *
- * Make by M.Potanin. *
- *********************************************/
-
- #include"ftrace.h"
-
- #include<stdio.h>
- #include<stdlib.h>
- #include<process.h>
- #include<alloc.h>
-
- void inittrace(funct t)
- {
- topstack->CS_IP.point = t;
- topstack[1].CS_IP.Words.cs = 0x1717;
- topstack->flags = 0x100;
- }
-
- void main()
- {
- char test=0,good=1;
- void far * fstack;
-
- puts("Restore Vector.\tDemo version\nMake by M.Potanin.");
-
- fstack=save_stat.stack.stack = (void far *) farmalloc(256);
- setvect(1,ftrace);
-
- inittrace((funct)getvect(0x13));
-
- while(topstack->CS_IP.Words.cs > 0x300)
- {
- topb[4]|=1; /*set trace bit*/
- if(test)
- {
- topb[6]&=0xFE; /*Clear immeg of trace bit*/
- test = 0;
- }
- step();
- if(*last_command == 0x9C)
- test=1;
- if(topstack->CS_IP.Words.cs == 0x1717)
- {
- puts("Can not restore 13 interrupt");
- good = 0;
- break;
- }
- }
- if(good)
- setvect(0x13,(interr)(topstack->CS_IP.point));
- good = 1;
- save_stat.stack.stack= fstack;
- inittrace((funct)getvect(0x21));
-
- while(topstack->CS_IP.Words.cs > 0x300)
- {
- topb[4]|=1; /*set trace bit*/
- if(test)
- {
- topb[6]&=0xFE; /*Clear immeg of trace bit*/
- test = 0;
- }
- step();
- if(*last_command == 0x9C)
- test=1;
- if(topstack->CS_IP.Words.cs == 0x1717)
- {
- puts("Can not restore 21 interrupt");
- good = 0;
- break;
- }
- }
- if(good)
- setvect(0x21,(interr)(topstack->CS_IP.point));
- }