home *** CD-ROM | disk | FTP | other *** search
/ ftp.whtech.com / ftp.whtech.com.tar / ftp.whtech.com / Geneve / 9640news / CAT36 / EMULSRC.ZIP / TI99EMUL.C < prev    next >
Text File  |  1993-05-06  |  2KB  |  80 lines

  1. /*
  2. ** TI-99/4A emulator main program.
  3. ** (c) 1993 by T. Brouwer
  4. **
  5. **
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <alloc.h>
  10. #include <string.h>
  11. #include "ti99emul.h"
  12. #include "instr.h"
  13. #include "opc_tabl.c"
  14. #include "sysdepen.c"    /* system dependent routines */
  15. #include "grom.c"    /* handle GROM access */
  16. #include "vdp.c"        /* display emulator, vdp memory access */
  17. #include "memory.c"    /* handle memory accesses */
  18. #include "boot.c"    /* setup environment (ROMs & GROMs) */
  19. #include "operands.c"    /* decode instruction operands */
  20. #include "kscan.c"    /* KSCAN bypass routine */
  21. #include "status.c"    /* handle status register setting */
  22. #include "processor.c"    /* fetch, decode & execute 9900 instructions */
  23. #include "dsk1.c"    /* Disk access emulation */
  24. #include "sound.c"    /* Sound chip emulation */
  25.  
  26. /***********************************************************************/
  27.  
  28. void main(int argc,char *argv[])
  29. {
  30.     /* Set config filename from cmdline argument or default */
  31.  
  32.     char configname[15];
  33.     if (argc>1) strcpy(configname,argv[1]);
  34.     else strcpy(configname,"ticonfig.dat");
  35.  
  36.     /* allow for initialisation for every functional unit of the
  37.        emulator */
  38.  
  39.     clear_screen();
  40.     printf("TI-99/4A Emulator\nWritten by Ton Brouwer\nVersion 7/5/1993\n\n");
  41.  
  42.     init_vdp();
  43.     init_cpu();
  44.     init_grom();
  45.     load_roms(configname);
  46.  
  47.     printf("\n\nPress any key to powerup.\n");
  48.     wait_for_keypress();
  49.         clear_screen();
  50.     printf("wait...\n");
  51.  
  52. /* This is the implementation of the vonn Neumann
  53. ** cycle: Fetch, decode, execute.
  54. */
  55.  
  56.     /* Initialise 9900 internal registers */
  57.  
  58.     STATUS=IR=0;
  59.     WP=memory_read(0);
  60.     PC=memory_read(2);
  61.  
  62.     while(TRUE)
  63.     {
  64.         IR=memory_read(PC);    /* fetch */
  65.         PC+=2;                  /* update program counter */
  66.         (*opcode_table[IR>>8])();    /* execute instruction */
  67.     }
  68.  
  69. } /* end of main */
  70.  
  71.  
  72. void TAB2(void)
  73. {
  74.     (*low_opcode_table[IR>>5])();
  75. }
  76.  
  77.  
  78.  
  79.  
  80.