Annotation of hatari/src/reset.c, revision 1.1.1.1

1.1       root        1: /*
                      2:   Hatari
                      3: 
                      4:   Reset emulation state
                      5: */
                      6: 
                      7: #include "main.h"
                      8: #include "cart.h"
                      9: #include "decode.h"
                     10: #include "fdc.h"
                     11: #include "floppy.h"
                     12: #include "gemdos.h"
                     13: #include "ikbd.h"
                     14: #include "int.h"
                     15: #include "m68000.h"
                     16: #include "misc.h"
                     17: #include "mfp.h"
                     18: #include "psg.h"
                     19: #include "reset.h"
                     20: #include "screen.h"
                     21: #include "sound.h"
                     22: #include "stMemory.h"
                     23: #include "tos.h"
                     24: #include "video.h"
                     25: 
                     26: //-----------------------------------------------------------------------
                     27: /*
                     28:   Cold reset ST (reset memory, all registers and reboot)
                     29: */
                     30: void Reset_Cold(void)
                     31: {
                     32:   Reset_ST(TRUE);
                     33: }
                     34: 
                     35: //-----------------------------------------------------------------------
                     36: /*
                     37:   Warm reset ST (reset registers, leave in same state and reboot)
                     38: */
                     39: void Reset_Warm(void)
                     40: {
                     41:   Reset_ST(FALSE);
                     42: }
                     43: 
                     44: //-----------------------------------------------------------------------
                     45: /*
                     46:   Reset ST emulator states, chips, interrupts and registers
                     47: */
                     48: void Reset_ST(BOOL bCold)
                     49: {
                     50:   if (bCold) {
                     51:     STMemory_Clear(0x00000000,0x00400000);  // Clear First 4Mb
                     52:     STMemory_Clear(0x00e00000,0x00ffffff);  // Clear Upper memory  
                     53:     STMemory_WriteLong(4,0x00fc0020);       // Set reset vector
                     54:     STMemory_WriteLong(0,0x0000f000);       // And reset stack pointer
                     55: 
                     56:     Floppy_GetBootDrive();          // Find which device to boot from(A: or C:)
                     57:     Cart_LoadImage();               // Load program into cartridge memory. Used for gemdos loading
                     58:     TOS_LoadImage();                // Load TOS, writes into cartridge memory
                     59:   }
                     60:   Int_Reset();                      // Reset interrupts
                     61:   MFP_Reset();                      // Setup MFP chip
                     62:   Video_Reset();                    // Reset video
                     63:   if (bCold) {
                     64:     FDC_Reset();                    // Reset FDC
                     65:     GemDOS_Reset();                 // Reset GEM
                     66:   }
                     67:   PSG_Reset();                      // Reset PSG
                     68:   Sound_Reset();                    // Reset Sound
                     69:   IKBD_Reset(bCold);                // Keyboard  
                     70:   Screen_Reset();                   // Reset screen
                     71:   M68000_Reset(bCold);              // Reset CPU
                     72: 
                     73:   // And VBL interrupt, MUST always be one interrupt ready to trigger
                     74:   Int_AddAbsoluteInterrupt(CYCLES_ENDLINE,INTERRUPT_VIDEO_ENDLINE);
                     75:   Int_AddAbsoluteInterrupt(CYCLES_HBL,INTERRUPT_VIDEO_HBL);
                     76:   Int_AddAbsoluteInterrupt(CYCLES_PER_FRAME,INTERRUPT_VIDEO_VBL);
                     77:   // And keyboard check for debugger
                     78: #ifdef USE_DEBUGGER
                     79:   Int_AddAbsoluteInterrupt(CYCLES_DEBUGGER,INTERRUPT_DEBUGGER);
                     80: #endif
                     81: }

unix.superglobalmegacorp.com

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