Annotation of hatari/src/uae-cpu/hatari-glue.c, revision 1.1.1.1

1.1       root        1: 
                      2: #include <stdio.h>
                      3: 
                      4: #include "newcpu.h"
                      5: 
                      6: #include "../includes/main.h"
                      7: #include "../includes/int.h"
                      8: #include "../includes/tos.h"
                      9: 
                     10: 
                     11: 
                     12: #ifndef FALSE
                     13: #define FALSE 0
                     14: #define TRUE 1
                     15: #endif
                     16: 
                     17: 
                     18: int illegal_mem = FALSE;
                     19: int address_space_24 = 1;
                     20: int cpu_level = 0;              /* 68000 (default) */
                     21: int cpu_compatible = 0;
                     22: int m68k_speed = 0;
                     23: 
                     24: long STmem_size = 0x100000;  /* 1MB */
                     25: long TTmem_size = 0;
                     26: 
                     27: 
                     28: /* Reset custom chips */
                     29: void customreset(void)
                     30: {
                     31:  /* Taken from Reset_ST in reset.c: */
                     32:  Int_Reset();                                  // Reset interrupts
                     33:  MFP_Reset();                                  // Setup MFP chip
                     34:  Video_Reset();                                        // Reset video
                     35:  PSG_Reset();                                  // Reset PSG
                     36:  Sound_Reset();                                        // Reset Sound
                     37:  IKBD_Reset(FALSE);                            // Keyboard     
                     38:  Screen_Reset();                               // Reset screen
                     39: 
                     40:  // And VBL interrupt, MUST always be one interrupt ready to trigger
                     41:  Int_AddAbsoluteInterrupt(CYCLES_ENDLINE,INTERRUPT_VIDEO_ENDLINE);
                     42:  Int_AddAbsoluteInterrupt(CYCLES_HBL,INTERRUPT_VIDEO_HBL);
                     43:  Int_AddAbsoluteInterrupt(CYCLES_PER_FRAME,INTERRUPT_VIDEO_VBL);
                     44: }
                     45: 
                     46: int intlev (void) /* ??? */
                     47: {
                     48:   return -1;
                     49: }
                     50: 
                     51: 
                     52: /* Initialize 680x0 emulation, CheckROM() must have been called first */
                     53: int Init680x0(void)
                     54: {
                     55:  memory_init();
                     56: fprintf(stderr, "TOS version: %x.%x\n", STMemory_ReadByte(2), STMemory_ReadByte(3));
                     57: fprintf(stderr, "PC start: $%lx\n", STMemory_ReadLong(4));
                     58: 
                     59:  init_m68k();
                     60: #ifdef USE_COMPILER
                     61:  compiler_init();
                     62: #endif
                     63:  return TRUE;
                     64: }
                     65: 
                     66: 
                     67: /* Deinitialize 680x0 emulation */
                     68: void Exit680x0(void)
                     69: {
                     70: }
                     71: 
                     72: 
                     73: /* Reset and start 680x0 emulation */
                     74: void Start680x0(void)
                     75: {
                     76:  m68k_reset();
                     77:  m68k_go(TRUE);
                     78: }
                     79: 
                     80: 
                     81: /* ----------------------------------------------------------------------- */
                     82: /*
                     83:   We use an illegal opcode to set ConnectedDrives, as TOS clears this
                     84:   value we cannot set it on init.
                     85: */
                     86: unsigned long OpCode_ConnectedDrive(uae_u32 opcode)
                     87: {
                     88:  fprintf(stderr, "OpCode_ConnectedDrive handled\n");
                     89:  /* Set connected drives */
                     90:  STMemory_WriteWord(0x4c2, ConnectedDriveMask);
                     91:  m68k_incpc(2);
                     92:  return 2;
                     93: }
                     94: 
                     95: /* ----------------------------------------------------------------------- */
                     96: /*
                     97:   Modify TimerD in GEMDos to gain more desktop performance
                     98: 
                     99:   Obviously, we need to emulate all timers correctly but GemDOS set's up Timer D at a very
                    100:   high rate(every couple of instructions). The interrupts isn't enabled but WinSTon still
                    101:   needs to process the interrupt table and this HALVES our frame rate!!! (It causes a cache
                    102:   reload each time). Some games actually reference this timer but don't set it up(eg Paradroid,
                    103:   Speedball I) so we simply intercept the Timer D setup code in GemDOS and fix the numbers
                    104:   with more 'laid-back' values. This still keeps 100% compatibility
                    105: */
                    106: unsigned long OpCode_TimerD(uae_u32 opcode)
                    107: {
                    108:  fprintf(stderr, "OpCode_TimerD handled\n");
                    109:  m68k_dreg(regs,0)=3;  /* 3 = Select Timer D */
                    110:  m68k_dreg(regs,1)=7;  /* 1 = /4 for 9600 baud(used /200) */
                    111:  m68k_dreg(regs,2)=100;        /* 2 = 9600 baud(100) */
                    112:  m68k_incpc(2);
                    113:  return 2;
                    114: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.