This commit is contained in:
folkert van heusden 2022-03-13 10:39:32 +01:00
parent c56cb9079b
commit 3387852028
3 changed files with 55 additions and 9 deletions

41
CMakeLists.txt Normal file
View 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
View file

@ -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);
temp = b -> read(getRegister(reg, prev_mode) + next_word, word_mode, prev_mode);
//fprintf(stderr, "-> %d: %o\n", word_mode, temp);
#ifdef _DEBUG
#ifndef NDEBUG
if (reg == 7)
*text = format("0o%o", getPC() + next_word); // FIXME
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_reg = src & 7;
#ifdef _DEBUG
#ifndef NDEBUG
std::string debug_a, debug_b;
std::string *src_gam_text = &debug_a, *dst_gam_text = &debug_b;
#endif
@ -433,7 +433,7 @@ bool cpu::double_operand_instructions(const uint16_t instr)
if (dst_mode == 0)
putGAM(dst_mode, dst_reg, word_mode, result, false, dst_gam_text);
else {
#ifdef _DEBUG
#ifndef NDEBUG
dst_gam_text -> assign(format("(%o)", a));
#endif
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;
#ifdef _DEBUG
#ifndef NDEBUG
std::string debug_b;
std::string *dst_gam_text = &debug_b;
#endif
@ -624,7 +624,7 @@ bool cpu::single_operand_instructions(const uint16_t instr)
int32_t vl = -1;
uint16_t v = -1;
#ifdef _DEBUG
#ifndef NDEBUG
std::string debug_b;
std::string *dst_gam_text = &debug_b;
#endif
@ -926,7 +926,7 @@ bool cpu::conditional_branch_instructions(const uint16_t instr)
const uint8_t opcode = (instr >> 8) & 255;
const int8_t offset = instr & 255;
bool take = false;
#ifdef _DEBUG
#ifndef NDEBUG
std::string name;
#endif
@ -1062,6 +1062,11 @@ bool cpu::condition_code_operations(const uint16_t instr)
void cpu::pushStack(const uint16_t v)
{
if (getRegister(6) == stackLimitRegister) {
printf("stackLimitRegister reached\n");
exit(1);
}
addRegister(6, false, -2);
b -> writeWord(getRegister(6, false), v);
}
@ -1259,7 +1264,7 @@ bool cpu::step()
return true;
ok:
#ifdef _DEBUG
#ifndef NDEBUG
for(int r=0; r<8; r++)
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));

4
gen.h
View file

@ -1,6 +1,6 @@
// (C) 2018 by Folkert van Heusden
// (C) 2018-2022 by Folkert van Heusden
// Released under AGPL v3.0
#ifdef _DEBUG
#ifndef NDEBUG
#define D(x) do { x } while(0);
#else
#define D(...) do { } while(0);