]> git.sesse.net Git - pistorm/commitdiff
Fix config reload?
authorbeeanyew <beeanyew@gmail.com>
Fri, 18 Jun 2021 08:39:39 +0000 (10:39 +0200)
committerRune Holm <rune.holm@gmail.com>
Fri, 18 Jun 2021 21:01:18 +0000 (22:01 +0100)
Apparently I forgot to stage a hunk, also don't attempt to initialize A314 emulation if it has already been initialized.

gpio/ps_protocol.c
platforms/amiga/amiga-platform.c

index cc21af6c27b35b268b78fffc460e4fa4d1241709..94e38a41b60481e2f2d5008af6cb862cfa2cd996 100644 (file)
@@ -177,10 +177,9 @@ unsigned int ps_read_16(unsigned int address) {
   *(gpio + 7) = (REG_DATA << PIN_A0);
   *(gpio + 7) = 1 << PIN_RD;
 
-  while (*(gpio + 13) & (1 << PIN_TXN_IN_PROGRESS))
-    ;
-
   unsigned int value = *(gpio + 13);
+  while ((value=*(gpio + 13)) & (1 << PIN_TXN_IN_PROGRESS))
+    ;
 
   *(gpio + 10) = 0xffffec;
 
@@ -209,10 +208,9 @@ unsigned int ps_read_8(unsigned int address) {
   *(gpio + 7) = (REG_DATA << PIN_A0);
   *(gpio + 7) = 1 << PIN_RD;
 
-  while (*(gpio + 13) & (1 << PIN_TXN_IN_PROGRESS))
-    ;
-
   unsigned int value = *(gpio + 13);
+  while ((value=*(gpio + 13)) & (1 << PIN_TXN_IN_PROGRESS))
+    ;
 
   *(gpio + 10) = 0xffffec;
 
index a395d8c77df402b444e94399746fc10303050461..09aa7bd1e6f11cb7869b8b3910cbe1f09bfcd8e0 100644 (file)
@@ -57,7 +57,7 @@ extern unsigned int a314_base;
 #define max(a, b) (a > b) ? a : b
 
 uint8_t rtg_enabled = 0, piscsi_enabled = 0, pinet_enabled = 0, kick13_mode = 0, pistorm_dev_enabled = 1;
-uint8_t a314_emulation_enabled = 0;
+uint8_t a314_emulation_enabled = 0, a314_initialized = 0;
 
 extern uint32_t piscsi_base, pistorm_dev_base;
 
@@ -440,11 +440,17 @@ void setvar_amiga(struct emulator_config *cfg, char *var, char *val) {
         kick13_mode = 1;
     }
     if CHKVAR("a314") {
-        int32_t res = a314_init();
-        if (res != 0) {
-            printf("[AMIGA] Failed to enable A314 emulation, error return code: %d.\n", res);
+        if (!a314_initialized) {
+            int32_t res = a314_init();
+            if (res != 0) {
+                printf("[AMIGA] Failed to enable A314 emulation, error return code: %d.\n", res);
+            } else {
+                printf("[AMIGA] A314 emulation enabled.\n");
+                add_z2_pic(ACTYPE_A314, 0);
+                a314_emulation_enabled = 1;
+                a314_initialized = 1;
+            }
         } else {
-            printf("[AMIGA] A314 emulation enabled.\n");
             add_z2_pic(ACTYPE_A314, 0);
             a314_emulation_enabled = 1;
         }
@@ -531,6 +537,7 @@ void handle_reset_amiga(struct emulator_config *cfg) {
 }
 
 void shutdown_platform_amiga(struct emulator_config *cfg) {
+    printf("[AMIGA] Performing Amiga platform shutdown.\n");
     if (cfg) {}
     if (cdtv_mode) {
         FILE *out = fopen("data/cdtv.sram", "wb+");
@@ -545,6 +552,7 @@ void shutdown_platform_amiga(struct emulator_config *cfg) {
     }
     if (cfg->platform->subsys) {
         free(cfg->platform->subsys);
+        cfg->platform->subsys = NULL;
     }
     if (piscsi_enabled) {
         piscsi_shutdown();