cmake
This commit is contained in:
parent
c56cb9079b
commit
3387852028
3 changed files with 55 additions and 9 deletions
41
CMakeLists.txt
Normal file
41
CMakeLists.txt
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
project(PDP-11)
|
||||||
|
cmake_minimum_required(VERSION 3.2)
|
||||||
|
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||||
|
|
||||||
|
add_executable(
|
||||||
|
kek
|
||||||
|
bus.cpp
|
||||||
|
cpu.cpp
|
||||||
|
error.cpp
|
||||||
|
main.cpp
|
||||||
|
memory.cpp
|
||||||
|
rk05.cpp
|
||||||
|
rx02.cpp
|
||||||
|
terminal.cpp
|
||||||
|
tests.cpp
|
||||||
|
tm-11.cpp
|
||||||
|
tty.cpp
|
||||||
|
utils.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
set(CMAKE_BUILD_TYPE Debug)
|
||||||
|
|
||||||
|
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
|
||||||
|
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
|
||||||
|
find_package(Threads)
|
||||||
|
target_link_libraries(kek Threads::Threads)
|
||||||
|
|
||||||
|
include(FindPkgConfig)
|
||||||
|
|
||||||
|
pkg_check_modules(NCURSES REQUIRED ncurses)
|
||||||
|
target_link_libraries(kek ${NCURSES_LIBRARIES})
|
||||||
|
target_include_directories(kek PUBLIC ${NCURSES_INCLUDE_DIRS})
|
||||||
|
target_compile_options(kek PUBLIC ${NCURSES_CFLAGS_OTHER})
|
||||||
|
|
||||||
|
pkg_check_modules(PANEL REQUIRED panel)
|
||||||
|
target_link_libraries(kek ${PANEL_LIBRARIES})
|
||||||
|
target_include_directories(kek PUBLIC ${PANEL_INCLUDE_DIRS})
|
||||||
|
target_compile_options(kek PUBLIC ${PANEL_CFLAGS_OTHER})
|
19
cpu.cpp
19
cpu.cpp
|
@ -194,7 +194,7 @@ uint16_t cpu::getGAM(const uint8_t mode, const uint8_t reg, const bool word_mode
|
||||||
addRegister(7, prev_mode, + 2);
|
addRegister(7, prev_mode, + 2);
|
||||||
temp = b -> read(getRegister(reg, prev_mode) + next_word, word_mode, prev_mode);
|
temp = b -> read(getRegister(reg, prev_mode) + next_word, word_mode, prev_mode);
|
||||||
//fprintf(stderr, "-> %d: %o\n", word_mode, temp);
|
//fprintf(stderr, "-> %d: %o\n", word_mode, temp);
|
||||||
#ifdef _DEBUG
|
#ifndef NDEBUG
|
||||||
if (reg == 7)
|
if (reg == 7)
|
||||||
*text = format("0o%o", getPC() + next_word); // FIXME
|
*text = format("0o%o", getPC() + next_word); // FIXME
|
||||||
else
|
else
|
||||||
|
@ -337,7 +337,7 @@ bool cpu::double_operand_instructions(const uint16_t instr)
|
||||||
const uint8_t src_mode = (src >> 3) & 7;
|
const uint8_t src_mode = (src >> 3) & 7;
|
||||||
const uint8_t src_reg = src & 7;
|
const uint8_t src_reg = src & 7;
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifndef NDEBUG
|
||||||
std::string debug_a, debug_b;
|
std::string debug_a, debug_b;
|
||||||
std::string *src_gam_text = &debug_a, *dst_gam_text = &debug_b;
|
std::string *src_gam_text = &debug_a, *dst_gam_text = &debug_b;
|
||||||
#endif
|
#endif
|
||||||
|
@ -433,7 +433,7 @@ bool cpu::double_operand_instructions(const uint16_t instr)
|
||||||
if (dst_mode == 0)
|
if (dst_mode == 0)
|
||||||
putGAM(dst_mode, dst_reg, word_mode, result, false, dst_gam_text);
|
putGAM(dst_mode, dst_reg, word_mode, result, false, dst_gam_text);
|
||||||
else {
|
else {
|
||||||
#ifdef _DEBUG
|
#ifndef NDEBUG
|
||||||
dst_gam_text -> assign(format("(%o)", a));
|
dst_gam_text -> assign(format("(%o)", a));
|
||||||
#endif
|
#endif
|
||||||
b -> write(a, word_mode, result);
|
b -> write(a, word_mode, result);
|
||||||
|
@ -479,7 +479,7 @@ bool cpu::additional_double_operand_instructions(const uint16_t instr)
|
||||||
{
|
{
|
||||||
const uint8_t reg = (instr >> 6) & 7;
|
const uint8_t reg = (instr >> 6) & 7;
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifndef NDEBUG
|
||||||
std::string debug_b;
|
std::string debug_b;
|
||||||
std::string *dst_gam_text = &debug_b;
|
std::string *dst_gam_text = &debug_b;
|
||||||
#endif
|
#endif
|
||||||
|
@ -624,7 +624,7 @@ bool cpu::single_operand_instructions(const uint16_t instr)
|
||||||
int32_t vl = -1;
|
int32_t vl = -1;
|
||||||
uint16_t v = -1;
|
uint16_t v = -1;
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifndef NDEBUG
|
||||||
std::string debug_b;
|
std::string debug_b;
|
||||||
std::string *dst_gam_text = &debug_b;
|
std::string *dst_gam_text = &debug_b;
|
||||||
#endif
|
#endif
|
||||||
|
@ -926,7 +926,7 @@ bool cpu::conditional_branch_instructions(const uint16_t instr)
|
||||||
const uint8_t opcode = (instr >> 8) & 255;
|
const uint8_t opcode = (instr >> 8) & 255;
|
||||||
const int8_t offset = instr & 255;
|
const int8_t offset = instr & 255;
|
||||||
bool take = false;
|
bool take = false;
|
||||||
#ifdef _DEBUG
|
#ifndef NDEBUG
|
||||||
std::string name;
|
std::string name;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1062,6 +1062,11 @@ bool cpu::condition_code_operations(const uint16_t instr)
|
||||||
|
|
||||||
void cpu::pushStack(const uint16_t v)
|
void cpu::pushStack(const uint16_t v)
|
||||||
{
|
{
|
||||||
|
if (getRegister(6) == stackLimitRegister) {
|
||||||
|
printf("stackLimitRegister reached\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
addRegister(6, false, -2);
|
addRegister(6, false, -2);
|
||||||
b -> writeWord(getRegister(6, false), v);
|
b -> writeWord(getRegister(6, false), v);
|
||||||
}
|
}
|
||||||
|
@ -1259,7 +1264,7 @@ bool cpu::step()
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
ok:
|
ok:
|
||||||
#ifdef _DEBUG
|
#ifndef NDEBUG
|
||||||
for(int r=0; r<8; r++)
|
for(int r=0; r<8; r++)
|
||||||
fprintf(stderr, "%06o ", getRegister(r, false));
|
fprintf(stderr, "%06o ", getRegister(r, false));
|
||||||
fprintf(stderr, " | n%dz%dv%dc%d P%dC%d S%d", getPSW_n(), getPSW_z(), getPSW_v(), getPSW_c(), (getPSW() >> 12) & 3, getPSW() >> 14, getBitPSW(11));
|
fprintf(stderr, " | n%dz%dv%dc%d P%dC%d S%d", getPSW_n(), getPSW_z(), getPSW_v(), getPSW_c(), (getPSW() >> 12) & 3, getPSW() >> 14, getBitPSW(11));
|
||||||
|
|
4
gen.h
4
gen.h
|
@ -1,6 +1,6 @@
|
||||||
// (C) 2018 by Folkert van Heusden
|
// (C) 2018-2022 by Folkert van Heusden
|
||||||
// Released under AGPL v3.0
|
// Released under AGPL v3.0
|
||||||
#ifdef _DEBUG
|
#ifndef NDEBUG
|
||||||
#define D(x) do { x } while(0);
|
#define D(x) do { x } while(0);
|
||||||
#else
|
#else
|
||||||
#define D(...) do { } while(0);
|
#define D(...) do { } while(0);
|
||||||
|
|
Loading…
Add table
Reference in a new issue