From 72545d6aef254f97e6301688bed1ae63d38ee808 Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Mon, 21 Mar 2022 14:03:58 +0100 Subject: [PATCH] disk activity atomic-booleans --- rk05.cpp | 17 ++++++++++++++++- rk05.h | 5 ++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/rk05.cpp b/rk05.cpp index 19a0a83..8a6d318 100644 --- a/rk05.cpp +++ b/rk05.cpp @@ -24,7 +24,10 @@ const char * const regnames[] = { "RK05_DATABUF " }; -rk05::rk05(const std::string & file, bus *const b) : b(b) +rk05::rk05(const std::string & file, bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomic_bool *const disk_write_acitivity) : + b(b), + disk_read_acitivity(disk_read_acitivity), + disk_write_acitivity(disk_write_acitivity) { memset(registers, 0x00, sizeof registers); memset(xfer_buffer, 0x00, sizeof xfer_buffer); @@ -167,6 +170,9 @@ void rk05::writeWord(const uint16_t addr, uint16_t v) } else if (func == 1) { // write + if (disk_write_acitivity) + *disk_write_acitivity = true; + D(fprintf(stderr, "invoke %d (write)\n", func);) D(fprintf(stderr, "RK05 writing %zo bytes to offset %o (%d dec)\n", reclen, diskoffb, diskoffb);) @@ -200,8 +206,14 @@ void rk05::writeWord(const uint16_t addr, uint16_t v) } registers[(RK05_DA - RK05_BASE) / 2] = sector | (surface << 4) | (cylinder << 5); + + if (disk_write_acitivity) + *disk_write_acitivity = false; } else if (func == 2) { // read + if (disk_read_acitivity) + *disk_read_acitivity = true; + D(fprintf(stderr, "invoke %d (read)\n", func);) D(fprintf(stderr, "RK05 reading %zo bytes from offset %o (%d dec) to %o\n", reclen, diskoffb, diskoffb, memoff);) @@ -251,6 +263,9 @@ void rk05::writeWord(const uint16_t addr, uint16_t v) } registers[(RK05_DA - RK05_BASE) / 2] = sector | (surface << 4) | (cylinder << 5); + + if (disk_write_acitivity) + *disk_write_acitivity = false; } else if (func == 4) { D(fprintf(stderr, "invoke %d (seek)\n", func);) diff --git a/rk05.h b/rk05.h index cef613d..a34b47c 100644 --- a/rk05.h +++ b/rk05.h @@ -2,6 +2,7 @@ // Released under Apache License v2.0 #pragma once +#include #include #include #include @@ -38,9 +39,11 @@ private: #else FILE *fh; #endif + std::atomic_bool *const disk_read_acitivity { nullptr }; + std::atomic_bool *const disk_write_acitivity { nullptr }; public: - rk05(const std::string & file, bus *const b); + rk05(const std::string & file, bus *const b, std::atomic_bool *const disk_read_acitivity, std::atomic_bool *const disk_write_acitivity); virtual ~rk05(); uint8_t readByte(const uint16_t addr);