disk activity atomic-booleans
This commit is contained in:
parent
32be62b911
commit
72545d6aef
2 changed files with 20 additions and 2 deletions
17
rk05.cpp
17
rk05.cpp
|
@ -24,7 +24,10 @@ const char * const regnames[] = {
|
||||||
"RK05_DATABUF "
|
"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(registers, 0x00, sizeof registers);
|
||||||
memset(xfer_buffer, 0x00, sizeof xfer_buffer);
|
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
|
else if (func == 1) { // write
|
||||||
|
if (disk_write_acitivity)
|
||||||
|
*disk_write_acitivity = true;
|
||||||
|
|
||||||
D(fprintf(stderr, "invoke %d (write)\n", func);)
|
D(fprintf(stderr, "invoke %d (write)\n", func);)
|
||||||
D(fprintf(stderr, "RK05 writing %zo bytes to offset %o (%d dec)\n", reclen, diskoffb, diskoffb);)
|
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);
|
registers[(RK05_DA - RK05_BASE) / 2] = sector | (surface << 4) | (cylinder << 5);
|
||||||
|
|
||||||
|
if (disk_write_acitivity)
|
||||||
|
*disk_write_acitivity = false;
|
||||||
}
|
}
|
||||||
else if (func == 2) { // read
|
else if (func == 2) { // read
|
||||||
|
if (disk_read_acitivity)
|
||||||
|
*disk_read_acitivity = true;
|
||||||
|
|
||||||
D(fprintf(stderr, "invoke %d (read)\n", func);)
|
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);)
|
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);
|
registers[(RK05_DA - RK05_BASE) / 2] = sector | (surface << 4) | (cylinder << 5);
|
||||||
|
|
||||||
|
if (disk_write_acitivity)
|
||||||
|
*disk_write_acitivity = false;
|
||||||
}
|
}
|
||||||
else if (func == 4) {
|
else if (func == 4) {
|
||||||
D(fprintf(stderr, "invoke %d (seek)\n", func);)
|
D(fprintf(stderr, "invoke %d (seek)\n", func);)
|
||||||
|
|
5
rk05.h
5
rk05.h
|
@ -2,6 +2,7 @@
|
||||||
// Released under Apache License v2.0
|
// Released under Apache License v2.0
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <atomic>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -38,9 +39,11 @@ private:
|
||||||
#else
|
#else
|
||||||
FILE *fh;
|
FILE *fh;
|
||||||
#endif
|
#endif
|
||||||
|
std::atomic_bool *const disk_read_acitivity { nullptr };
|
||||||
|
std::atomic_bool *const disk_write_acitivity { nullptr };
|
||||||
|
|
||||||
public:
|
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();
|
virtual ~rk05();
|
||||||
|
|
||||||
uint8_t readByte(const uint16_t addr);
|
uint8_t readByte(const uint16_t addr);
|
||||||
|
|
Loading…
Add table
Reference in a new issue