diff --git a/10.01_base/2_src/arm/unibusdevice.cpp b/10.01_base/2_src/arm/unibusdevice.cpp index f4e1d59..444bebf 100644 --- a/10.01_base/2_src/arm/unibusdevice.cpp +++ b/10.01_base/2_src/arm/unibusdevice.cpp @@ -269,7 +269,7 @@ char *unibusdevice_c::get_unibus_resource_info(void) { slot_to = std::max(slot_to, (*it)->get_priority_slot()); } - if (slot_from > slot_to) // no requests: use devcie parameter + if (slot_from > slot_to) // no requests: use device parameter slot_from = slot_to = priority_slot.value; if (slot_from == slot_to) sprintf(tmpbuff, ", slot %u", (unsigned) slot_from); diff --git a/10.01_base/2_src/pru1/pru1_main_unibus.c b/10.01_base/2_src/pru1/pru1_main_unibus.c index 8140c26..09d5fab 100644 --- a/10.01_base/2_src/pru1/pru1_main_unibus.c +++ b/10.01_base/2_src/pru1/pru1_main_unibus.c @@ -159,8 +159,9 @@ void main(void) { // "set" is inverting! cpu_grant_mask = buslatches_getbyte(0) & PRIORITY_ARBITRATION_BIT_MASK; // read GRANT IN // forward un-requested GRANT IN to GRANT OUT for other cards on neighbor slots - buslatches_setbits(0, PRIORITY_ARBITRATION_BIT_MASK & ~sm_arb.device_request_mask, ~cpu_grant_mask) - ; + uint8_t grant_out_mask = cpu_grant_mask & ~sm_arb.device_request_mask ; + buslatches_setbits(0, PRIORITY_ARBITRATION_BIT_MASK, ~grant_out_mask) + ; } // handle GRANT/SACK/BBSY for emulated devices uint8_t granted_request = sm_device_arb_worker(cpu_grant_mask); // devices process GRANT diff --git a/10.01_base/2_src/pru1/pru1_statemachine_arbitration.c b/10.01_base/2_src/pru1/pru1_statemachine_arbitration.c index a9890c8..3c55511 100644 --- a/10.01_base/2_src/pru1/pru1_statemachine_arbitration.c +++ b/10.01_base/2_src/pru1/pru1_statemachine_arbitration.c @@ -271,7 +271,7 @@ uint8_t sm_arb_worker_cpu() { timeout_cleanup(TIMEOUT_SACK); } // put the single BR/NPR GRANT onto GRANT OUT BUS line, latches inverted. - // visible for physical devices, not for emulated devcies on this UniBone + // visible for physical devices, not for emulated devices on this UniBone buslatches_setbits(0, PRIORITY_ARBITRATION_BIT_MASK, ~sm_arb.arbitrator_grant_mask ) ; diff --git a/10.01_base/2_src/pru1/pru1_statemachine_data_slave.c b/10.01_base/2_src/pru1/pru1_statemachine_data_slave.c index 2f0c691..4509023 100644 --- a/10.01_base/2_src/pru1/pru1_statemachine_data_slave.c +++ b/10.01_base/2_src/pru1/pru1_statemachine_data_slave.c @@ -83,11 +83,7 @@ statemachine_state_func sm_data_slave_start() { // addr8..15 = latch[3] // addr 16,17 = latch[4].0,1 addr = latch2val | ((uint32_t) latch3val << 8) | ((uint32_t) (latch4val & 3) << 16); -//if (addr == 01046) // trigger address -// PRU_DEBUG_PIN0(1) ; // trigger to LA. - - // make bool of a17..a13. iopage, if a17..a13 all 1's // iopage = ((latch3val & 0xe0) | (latch4val & 3)) == 0xe3; // 2 statements above = 12 cycles = 60ns @@ -98,6 +94,12 @@ statemachine_state_func sm_data_slave_start() { // !!! Attention: on fast UNIBUS cycles to other devices, // !!! SSYN may already be asserted. Or MSYN may even be inactive again !!! +// if (addr == 0 && control == UNIBUS_CONTROL_DATI) // trigger address, after boot +// PRU_DEBUG_PIN0(1) ; // trigger to LA. +//if (addr >= 0777560 && addr <= 0777566) // trigger address, after boot +// PRU_DEBUG_PIN0(1) ; // trigger to LA. + + // page_table_entry = PAGE_TABLE_ENTRY(deviceregisters,addr) ; // is addr ignored,memory,iopage? // if (addr >= 0x8000 && addr < 0x10000) // page_table_entry = PAGE_MEMORY ; diff --git a/10.01_base/2_src/shared/unibus.h b/10.01_base/2_src/shared/unibus.h index 971371b..6352793 100644 --- a/10.01_base/2_src/shared/unibus.h +++ b/10.01_base/2_src/shared/unibus.h @@ -74,7 +74,7 @@ private: // false: no running CPU on UNIBUS (physical or emulated) // devices do DMA without NPR/NPG protocol - // true: active CPU. devcies pus perform Request/Grant/SACK protocoll + // true: active CPU. devices perform Request/Grant/SACK protocoll bool arbitrator_active; public: diff --git a/10.02_devices/2_src/uda.cpp b/10.02_devices/2_src/uda.cpp index dd882e1..d720fe1 100644 --- a/10.02_devices/2_src/uda.cpp +++ b/10.02_devices/2_src/uda.cpp @@ -966,6 +966,8 @@ uda_c::DMAWrite( uint8_t* buffer) { assert ((lengthInBytes % 2) == 0); +// if (address >= 0x40000) +// logger->dump(logger->default_filepath) ; assert (address < 0x40000); unibusadapter->DMA(dma_request, true, diff --git a/10.03_app_demo/2_src/menus.cpp b/10.03_app_demo/2_src/menus.cpp index 62dc3fd..155d278 100644 --- a/10.03_app_demo/2_src/menus.cpp +++ b/10.03_app_demo/2_src/menus.cpp @@ -102,7 +102,7 @@ bool application_c::parse_slot(char *txt, uint8_t *priority_slot) { void application_c::print_arbitration_info(const char *indent) { if (unibus->get_arbitrator_active()) { - printf("%s\"UniBone devcies are clients to PDP-11 CPU doing NPR/INTR Arbitrator\n", + printf("%s\"UniBone devices are clients to PDP-11 CPU doing NPR/INTR Arbitrator\n", indent); printf("%s(CPU active, console processor inactive).\n", indent); printf("%sCPU is physical or emulated.\n", indent); diff --git a/10.03_app_demo/5_applications/211bsd.mscp/2.11BSD_du_44.cmd b/10.03_app_demo/5_applications/211bsd.mscp/2.11BSD_du_44.cmd index eb599a0..5103e4d 100644 --- a/10.03_app_demo/5_applications/211bsd.mscp/2.11BSD_du_44.cmd +++ b/10.03_app_demo/5_applications/211bsd.mscp/2.11BSD_du_44.cmd @@ -8,11 +8,14 @@ m i # install max UNIBUS memory # Deposit bootloader into memory m ll du.lst +en uda # enable UDA50 controller + # mount 2.11bSD in drive #0 and start +en uda0 # enable drive #0 sd uda0 # select drive #0 -p type RA72 -p image 2.11BSD_44.ra72 # mount image file with test pattern +p type RA92 +p image 2.11BSD_44.ra92 # mount image file with test pattern .print MSCP drives ready. .print UDA50 boot loader installed. diff --git a/10.03_app_demo/5_applications/211bsd.mscp/211bsd_44.simh_pdp11 b/10.03_app_demo/5_applications/211bsd.mscp/211bsd_44.simh_pdp11 index bebb821..0217e8b 100644 --- a/10.03_app_demo/5_applications/211bsd.mscp/211bsd_44.simh_pdp11 +++ b/10.03_app_demo/5_applications/211bsd.mscp/211bsd_44.simh_pdp11 @@ -1,3 +1,5 @@ +; after http://www.vaxman.de/publications/bsd211_inst.pdf + ; model a PDP-11/44 with maximum memory, fpu, no CIS set cpu 11/44 4096K fpp nocis @@ -11,7 +13,6 @@ set rp disabled set rk disabled set xu disabled set xq disabled -set rl disabled set rx disabled set tm disabled set ts disabled @@ -23,8 +24,12 @@ set tto 7b ; set the boot disk as a 1GB RA72 on an MSCP UDA50 set rq enabled -set rq0 ra72 -attach rq0 2.11BSD_44.ra72 +set rq0 ra92 +attach rq0 2.11BSD_44.ra92 + +; boot tape +set ts enable +attach ts 211bsd.tap ; set one DZ11 8 line async mux ; accessible via telnet to 127.0.0.1:4000...4007 @@ -37,7 +42,7 @@ attach -am dz 4000 ; set one DELUA/DEUNA unibus enet controller ; ==> must setup eth0/eth1 per your system config set xu enabled -set xu type=deuna +set xu type=delua attach xu eth0 ; enable one tape device on a TMSCP controller @@ -46,6 +51,5 @@ set tq enabled ; show our config show devices -set cons telnet=23 -; boot it +; set cons telnet=23 boot rq0