disk activity atomic-booleans

This commit is contained in:
folkert van heusden 2022-03-21 14:03:58 +01:00
parent 32be62b911
commit 72545d6aef
2 changed files with 20 additions and 2 deletions

View file

@ -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);)

5
rk05.h
View file

@ -2,6 +2,7 @@
// Released under Apache License v2.0
#pragma once
#include <atomic>
#include <stdint.h>
#include <stdio.h>
#include <string>
@ -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);