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

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: 
1.1.1.2 ! root       26: 
        !            27: /*-----------------------------------------------------------------------*/
1.1       root       28: /*
                     29:   Cold reset ST (reset memory, all registers and reboot)
                     30: */
                     31: void Reset_Cold(void)
                     32: {
                     33:   Reset_ST(TRUE);
                     34: }
                     35: 
1.1.1.2 ! root       36: 
        !            37: /*-----------------------------------------------------------------------*/
1.1       root       38: /*
                     39:   Warm reset ST (reset registers, leave in same state and reboot)
                     40: */
                     41: void Reset_Warm(void)
                     42: {
                     43:   Reset_ST(FALSE);
                     44: }
                     45: 
1.1.1.2 ! root       46: 
        !            47: /*-----------------------------------------------------------------------*/
1.1       root       48: /*
                     49:   Reset ST emulator states, chips, interrupts and registers
                     50: */
                     51: void Reset_ST(BOOL bCold)
                     52: {
                     53:   if (bCold) {
1.1.1.2 ! root       54:     STMemory_Clear(0x00000000,0x00400000);  /* Clear First 4Mb */
        !            55:     STMemory_Clear(0x00e00000,0x00ffffff);  /* Clear Upper memory */
        !            56:     STMemory_WriteLong(4,0x00fc0020);       /* Set reset vector */
        !            57:     STMemory_WriteLong(0,0x0000f000);       /* And reset stack pointer */
        !            58: 
        !            59:     Floppy_GetBootDrive();      /* Find which device to boot from(A: or C:) */
        !            60:     Cart_LoadImage();           /* Load program into cartridge memory. Used for gemdos loading */
        !            61:     TOS_LoadImage();            /* Load TOS, writes into cartridge memory */
1.1       root       62:   }
1.1.1.2 ! root       63:   Int_Reset();                  /* Reset interrupts */
        !            64:   MFP_Reset();                  /* Setup MFP chip */
        !            65:   Video_Reset();                /* Reset video */
1.1       root       66:   if (bCold) {
1.1.1.2 ! root       67:     FDC_Reset();                /* Reset FDC */
        !            68:     GemDOS_Reset();             /* Reset GEM */
1.1       root       69:   }
1.1.1.2 ! root       70:   PSG_Reset();                  /* Reset PSG */
        !            71:   Sound_Reset();                /* Reset Sound */
        !            72:   IKBD_Reset(bCold);            /* Keyboard */
        !            73:   Screen_Reset();               /* Reset screen */
        !            74:   M68000_Reset(bCold);          /* Reset CPU */
1.1       root       75: 
1.1.1.2 ! root       76:   /* And VBL interrupt, MUST always be one interrupt ready to trigger */
1.1       root       77:   Int_AddAbsoluteInterrupt(CYCLES_ENDLINE,INTERRUPT_VIDEO_ENDLINE);
                     78:   Int_AddAbsoluteInterrupt(CYCLES_HBL,INTERRUPT_VIDEO_HBL);
                     79:   Int_AddAbsoluteInterrupt(CYCLES_PER_FRAME,INTERRUPT_VIDEO_VBL);
1.1.1.2 ! root       80:   /* And keyboard check for debugger */
1.1       root       81: #ifdef USE_DEBUGGER
                     82:   Int_AddAbsoluteInterrupt(CYCLES_DEBUGGER,INTERRUPT_DEBUGGER);
                     83: #endif
                     84: }

unix.superglobalmegacorp.com

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