From 5cf53976c5ccba15d9d412a3768f1f9f7986d779 Mon Sep 17 00:00:00 2001 From: Peter Weingartner Date: Sun, 4 Aug 2024 19:48:35 -0400 Subject: [PATCH] Fixed JSL issue with IEC sleep functions --- src/C256/iecll.s | 33 ++++++++++++++++++++++++++------- src/include/features.h | 5 ++++- src/include/iecll.h | 6 ++++++ src/toolbox.c | 18 +++++++++++------- 4 files changed, 47 insertions(+), 15 deletions(-) diff --git a/src/C256/iecll.s b/src/C256/iecll.s index 791e107..dfd9f93 100644 --- a/src/C256/iecll.s +++ b/src/C256/iecll.s @@ -17,6 +17,7 @@ .public iecll_listen .public iecll_listen_sa .public iecll_unlisten + .public iecll_reset #include "F256/iec_f256.h" @@ -86,6 +87,9 @@ read_DATA: read_bit IEC_DATA_i assert_DATA: assert_bit IEC_DATA_o release_DATA: release_bit IEC_DATA_o +assert_RST: assert_bit IEC_RST_o +release_RST: release_bit IEC_RST_o + ;; ;; Routines to wait various amounts of time ;; @@ -99,20 +103,20 @@ _loop$ dex sleep_100us: phx ldx #5 -_loop$ jsl sleep_20us +_loop$ jsr sleep_20us dex bne _loop$ plx rts -sleep_300us: jsl sleep_100us - jsl sleep_100us - jsl sleep_100us +sleep_300us: jsr sleep_100us + jsr sleep_100us + jsr sleep_100us rts -sleep_1ms: jsl sleep_300us - jsl sleep_300us - jsl sleep_300us +sleep_1ms: jsr sleep_300us + jsr sleep_300us + jsr sleep_300us jmp sleep_100us ;; @@ -315,6 +319,7 @@ zero$ jsr assert_DATA bra clock$ one$ jsr release_DATA + bra clock$ clock$ ; Toggle the clock @@ -658,5 +663,19 @@ iecll_out php queue$ sta queue dec delayed + plp + rtl + +; +; Trigger the reset line on the IEC port +; +iecll_reset: php + sei + sep #0x30 + + jsr assert_RST + jsr sleep_1ms + jsr release_RST + plp rtl \ No newline at end of file diff --git a/src/include/features.h b/src/include/features.h index 40f4c50..9c2f72c 100644 --- a/src/include/features.h +++ b/src/include/features.h @@ -41,10 +41,13 @@ #define HAS_EXTERNAL_SIDS 1 #define HAS_OPL3 1 #define HAS_PATA 1 -#elif MODEL == MODEL_FOENIX_F256KE +#elif MODEL == MODEL_FOENIX_F256KE || MODEL == MODEL_FOENIX_F256K #define HAS_EXTERNAL_SIDS 1 #define HAS_OPL3 1 #define HAS_IEC 1 +#elif MODEL == MODEL_FOENIX_F256 + #define HAS_OPL3 1 + #define HAS_IEC 1 #endif diff --git a/src/include/iecll.h b/src/include/iecll.h index 9d78df9..b903274 100644 --- a/src/include/iecll.h +++ b/src/include/iecll.h @@ -88,4 +88,10 @@ extern short iecll_eoi(); */ extern void iecll_out(uint8_t byte); +/** + * @brief Assert and release the reset line on the IEC bus + * + */ +extern void iecll_reset(); + #endif \ No newline at end of file diff --git a/src/toolbox.c b/src/toolbox.c index 80d91aa..8186725 100644 --- a/src/toolbox.c +++ b/src/toolbox.c @@ -51,6 +51,7 @@ #include "dev/fdc.h" #include "dev/fsys.h" #include "dev/iec.h" +#include "iecll.h" #include "dev/ps2.h" #include "dev/rtc.h" #include "dev/sdc.h" @@ -176,9 +177,9 @@ void initialize() { INFO("Console installed."); } -#if HAS_IEC - iec_init(); -#endif +// #if HAS_IDE +// iec_init(); +// #endif /* Initialize the timers the MCP uses */ timers_init(); @@ -485,13 +486,16 @@ int main(int argc, char * argv[]) { kbd_init(); test_sysinfo(); - // test_psg(); - // test_kbd(); - long jiffies = timers_jiffies(); - printf("Jiffies: %ld\n", jiffies); + + printf("Initializing IEC\n"); + result = iec_init(); + if (result != 0) { + printf("Error initializing IEC.\n"); + } printf("Attempting to get status for IEC drive #8: "); short n = iec_status(8, message, 256); + printf("\"%s\"\n", message); // Attempt to start up the user code