Skip to content

Commit

Permalink
unixv1 initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
ryomuk committed Jun 24, 2024
1 parent 5e60930 commit 6ed9405
Show file tree
Hide file tree
Showing 52 changed files with 145,469 additions and 1 deletion.
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,15 @@ This document is written mostly in Japanese. If necessary, please use a translat
- PC11(tape reader/pucnch)エミュレータで,tape BASICを読み込んで起動します.
- SDメモリを使う練習用に作ったものなのでとりあえず動きます程度のものです.

## UNIX V1 (開発中)
## [UNIX V1](applications/unix-v1/) (開発中)
- SDメモリを使ったdiskエミュレータを作成し,UNIX V1を動かそうとしています.
- まだかなり不安定で,ちょっと修正しただけで起動しなくなるのですが,とりあえず公開することにしました.

# 動画
- [PDP-11 Paper-Tape BASIC running on DCJ-11 Processor](https://www.youtube.com/watch?v=F_eFMz5ysK8)

- [UNIX V1 on DEC DCJ-11 with TangNano 20K (under development)](https://www.youtube.com/watch?v=DT7xJWeF46Y)

# 旧版
## ブレッドボード版
- console ODT(Octal Debug Technique)の動作確認をするところから始めて,[豊四季タイニーBASIC](https://github.com/vintagechips/ttbasic_arduino)を軽微な修正で動かせるところまで確認しました.
Expand Down Expand Up @@ -98,6 +101,12 @@ This document is written mostly in Japanese. If necessary, please use a translat
- [PDP-11 Paper Tape BASIC](https://avitech.com.au/?page_id=709)
- [Learning PDP-11](https://www.learningpdp11.com/) Paper Tape BASICとboot loaderについてとても詳しく解説されています

## UNIX関連
- [The Unix Heritage Society](https://www.tuhs.org/)
- [V1](https://www.tuhs.org/cgi-bin/utree.pl?file=V1)
- [UNIX First Edition](https://gunkies.org/wiki/UNIX_First_Edition)
- [jserv/unix-v1](https://github.com/jserv/unix-v1)

# 更新履歴
- 2024/4/25: 初版公開
- 2024/4/25: README修正(BOM追加)
Expand All @@ -108,3 +117,4 @@ This document is written mostly in Japanese. If necessary, please use a translat
- 2024/6/19: SDHCの初期化部分にバグがあったので修正
- 2024/6/21: tapebasicのtop.vにバグがあったので修正
- 2024/6/21: baremetalとtapebasicを別フォルダに分離.READMEも分離.
- 2024/6/24: unix-v1用の開発中HDLを公開(かなり不安定です)
43 changes: 43 additions & 0 deletions applications/unix-v1/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# TangNanoDCJ11MEM (unix-v1)
![](../../images/unixv1_jumper.jpg)

- SDメモリを使ったdiskエミュレータを作成し,UNIX V1を動かそうとしています.
- まだかなり不安定で,ちょっと修正しただけで起動しなくなるのですが,とりあえず公開することにしました.
- DMAの制御が面倒だったので、時分割された擬似dual port RAMを作ってディスクからメモリへの読み書きをしていますが、不安定なのはそのあたりが原因かもしれません。

## RF11(drum), RK11(disk)エミュレータ [sdhd.v](TangNanoDCJ11MEM_project/src/sdhd.v)
- SDメモリはファイルシステム無しの生のままで使うのでddで読み書きします.
- ブロックサイズ(BS)は512で,0〜1023ブロックがRF11,それ以降がRK11です.

##とりあえず動かすための手順
- クロック用の水晶を4MHzにする
- IRQ、EVENT用に下記ジャンパ配線をする。HALTはデバッグ用なので任意。HALTはスイッチと競合するので1kの抵抗を付けます。
```
IRQ1 --- LED1
IRQ2 --- LED2
EVENT_n --- LED4
HALT --- 1k 抵抗 --- LED5
```
- [jserv/unix-v1](https://github.com/jserv/unix-v1) からsimh用のunix-v1環境一式をmakeして作られる images/rf0.dsk, images/rk0.dsk からsd用のイメージsd.dskを作り、sdメモリに書き込む。(書き込み先のsdメモリが/dev/sdb で正しいかちゃんと確認すること。間違えるとPCのディスクを破壊します。)
- 参考手順は下記の通り。
```
git clone https://github.com/jserv/unix-v1.git
cd unix-v1
make
dd if=/dev/zero of=sd.dsk bs=512 count=8192
dd if=images/rf0.dsk of=sd.dsk
dd if=images/rk0.dsk of=sd.dsk bs=512 seek=1024
dd if=sd.dsk of=/dev/sdb
```

## 既知のノウハウ
- single user modeの方が起動しやすいです。177570番地の値を73700にして起動するとsingle user modeになります。
- 以前に起動した環境で起動しなくなったときは、sdメモリのディスクイメージが破壊されている可能性があるので、sd.dskに書き直します。

## 既知の問題
- リセット時間を250msから350msに変えただけで起動しなったりします。
- UARTの速度を変えただけで起動しなかったりします。
- UARTが不安定で文字化けします。

## 動画
- [UNIX V1 on DEC DCJ-11 with TangNano 20K (under development)](https://www.youtube.com/watch?v=DT7xJWeF46Y)
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1" encoding="UTF-8"?>
<!DOCTYPE gowin-fpga-project>
<Project>
<Template>FPGA</Template>
<Version>5</Version>
<Device name="GW2AR-18C" pn="GW2AR-LV18QN88C8/I7">gw2ar18c-000</Device>
<FileList>
<File path="src/integer_division/integer_division.v" type="file.verilog" enable="1"/>
<File path="src/sdhd.v" type="file.verilog" enable="1"/>
<File path="src/top.v" type="file.verilog" enable="1"/>
<File path="src/uart.v" type="file.verilog" enable="1"/>
<File path="src/ws2812.v" type="file.verilog" enable="1"/>
<File path="src/tn20k.cst" type="file.cst" enable="1"/>
</FileList>
</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1" encoding="UTF-8"?>
<!DOCTYPE ProjectUserData>
<UserConfig>
<Version>1.0</Version>
<FlowState>
<Process ID="Synthesis" State="2"/>
<Process ID="Pnr" State="2"/>
<Process ID="Gao" State="2"/>
<Process ID="Rtl_Gao" State="2"/>
</FlowState>
<ResultFileList>
<ResultFile ResultFileType="RES.netlist" ResultFilePath="impl/gwsynthesis/TangNanoDCJ11MEM_project.vg"/>
<ResultFile ResultFileType="RES.pnr.bitstream" ResultFilePath="impl/pnr/TangNanoDCJ11MEM_project.fs"/>
<ResultFile ResultFileType="RES.pnr.pin.rpt" ResultFilePath="impl/pnr/TangNanoDCJ11MEM_project.pin.html"/>
<ResultFile ResultFileType="RES.pnr.posp.bin" ResultFilePath="impl/pnr/TangNanoDCJ11MEM_project.db"/>
<ResultFile ResultFileType="RES.pnr.pwr.rpt" ResultFilePath="impl/pnr/TangNanoDCJ11MEM_project.power.html"/>
<ResultFile ResultFileType="RES.pnr.report" ResultFilePath="impl/pnr/TangNanoDCJ11MEM_project.rpt.html"/>
<ResultFile ResultFileType="RES.pnr.timing.paths" ResultFilePath="impl/pnr/TangNanoDCJ11MEM_project.timing_paths"/>
<ResultFile ResultFileType="RES.pnr.timing.rpt" ResultFilePath="impl/pnr/TangNanoDCJ11MEM_project.tr.html"/>
<ResultFile ResultFileType="RES.syn.report" ResultFilePath="impl/gwsynthesis/TangNanoDCJ11MEM_project_syn.rpt.html"/>
<ResultFile ResultFileType="RES.syn.resource" ResultFilePath="impl/gwsynthesis/TangNanoDCJ11MEM_project_syn_rsc.xml"/>
</ResultFileList>
<Ui>000000ff00000001fd000000020000000000000100000001dffc0200000001fc00000037000001df0000000000fffffffaffffffff0200000003fb00000030004600700067006100500072006f006a006500630074002e00500061006e0065006c002e00440065007300690067006e0100000000ffffffff0000000000000000fb00000032004600700067006100500072006f006a006500630074002e00500061006e0065006c002e00500072006f00630065007300730100000000ffffffff0000000000000000fb00000036004600700067006100500072006f006a006500630074002e00500061006e0065006c002e0048006900650072006100720063006800790100000000ffffffff0000000000000000000000030000062a00000139fc0100000001fc000000000000062a000000a700fffffffa000000000100000002fb00000032004600700067006100500072006f006a006500630074002e00500061006e0065006c002e00470065006e006500720061006c0100000000ffffffff0000005100fffffffb0000002e004600700067006100500072006f006a006500630074002e00500061006e0065006c002e004900730073007500650100000000ffffffff000000a700ffffff00000526000001df00000004000000040000000800000008fc000000010000000200000003000000220043006f00720065002e0054006f006f006c006200610072002e00460069006c00650100000000ffffffff0000000000000000000000220043006f00720065002e0054006f006f006c006200610072002e004500640069007401000000adffffffff0000000000000000000000240043006f00720065002e0054006f006f006c006200610072002e0054006f006f006c0073010000017fffffffff0000000000000000</Ui>
</UserConfig>
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
{
"BACKGROUND_PROGRAMMING" : "off",
"COMPRESS" : false,
"CPU" : false,
"CRC_CHECK" : true,
"Clock_Route_Order" : 0,
"Correct_Hold_Violation" : true,
"DONE" : false,
"DOWNLOAD_SPEED" : "default",
"Disable_Insert_Pad" : false,
"ENABLE_CTP" : false,
"ENABLE_MERGE_MODE" : false,
"ENCRYPTION_KEY" : false,
"ENCRYPTION_KEY_TEXT" : "00000000000000000000000000000000",
"ERROR_DECTION_AND_CORRECTION" : false,
"ERROR_DECTION_ONLY" : false,
"ERROR_INJECTION" : false,
"EXTERNAL_MASTER_CONFIG_CLOCK" : false,
"Enable_DSRM" : false,
"FORMAT" : "binary",
"FREQUENCY_DIVIDER" : "",
"Generate_Constraint_File_of_Ports" : false,
"Generate_IBIS_File" : false,
"Generate_Plain_Text_Timing_Report" : false,
"Generate_Post_PNR_Simulation_Model_File" : false,
"Generate_Post_Place_File" : false,
"Generate_SDF_File" : false,
"Generate_VHDL_Post_PNR_Simulation_Model_File" : false,
"Global_Freq" : "default",
"GwSyn_Loop_Limit" : 2000,
"HOTBOOT" : false,
"I2C" : false,
"I2C_SLAVE_ADDR" : "00",
"IncludePath" : [

],
"Incremental_Compile" : "",
"Initialize_Primitives" : false,
"JTAG" : false,
"MODE_IO" : false,
"MSPI" : false,
"MSPI_JUMP" : false,
"MULTIBOOT_ADDRESS_WIDTH" : "24",
"MULTIBOOT_MODE" : "Normal",
"MULTIBOOT_SPI_FLASH_ADDRESS" : "00000000",
"MULTIJUMP_ADDRESS_WIDTH" : "24",
"MULTIJUMP_MODE" : "Normal",
"MULTIJUMP_SPI_FLASH_ADDRESS" : "000000",
"Multi_Boot" : true,
"OUTPUT_BASE_NAME" : "TangNanoDCJ11MEM_project",
"POWER_ON_RESET_MONITOR" : true,
"PRINT_BSRAM_VALUE" : true,
"PROGRAM_DONE_BYPASS" : false,
"PlaceInRegToIob" : true,
"PlaceIoRegToIob" : true,
"PlaceOutRegToIob" : true,
"Place_Option" : "0",
"Process_Configuration_Verion" : "1.0",
"Promote_Physical_Constraint_Warning_to_Error" : true,
"READY" : false,
"RECONFIG_N" : false,
"Ram_RW_Check" : false,
"Replicate_Resources" : false,
"Report_Auto-Placed_Io_Information" : false,
"Route_Maxfan" : 23,
"Route_Option" : "0",
"Run_Timing_Driven" : true,
"SECURE_MODE" : false,
"SECURITY_BIT" : true,
"SEU_HANDLER" : false,
"SEU_HANDLER_CHECKSUM" : false,
"SEU_HANDLER_MODE" : "auto",
"SSPI" : true,
"STOP_SEU_HANDLER" : false,
"Show_All_Warnings" : false,
"Synthesize_tool" : "GowinSyn",
"TclPre" : "",
"TopModule" : "top",
"USERCODE" : "default",
"Unused_Pin" : "As_input_tri_stated_with_pull_up",
"VCCAUX" : 3.3,
"VCCX" : "3.3",
"VHDL_Standard" : "VHDL_Std_1993",
"Verilog_Standard" : "Vlg_Std_2001",
"WAKE_UP" : "0",
"show_all_warnings" : false,
"turn_off_bg" : false
}
Loading

0 comments on commit 6ed9405

Please sign in to comment.