{"id":23377799,"url":"https://github.com/isysxp/gt40","last_synced_at":"2025-04-10T19:34:18.331Z","repository":{"id":92848842,"uuid":"332535956","full_name":"Isysxp/GT40","owner":"Isysxp","description":"DEC GT40 Graphics terminal","archived":false,"fork":false,"pushed_at":"2024-08-20T17:29:30.000Z","size":53899,"stargazers_count":11,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-24T17:11:51.008Z","etag":null,"topics":["display","graphics","gt40","pdp11","simh"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Isysxp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-01-24T19:23:36.000Z","updated_at":"2024-12-22T11:01:41.000Z","dependencies_parsed_at":"2023-03-21T22:32:56.441Z","dependency_job_id":"c10f8492-62dd-40cf-9b45-3e23bb767e8f","html_url":"https://github.com/Isysxp/GT40","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Isysxp%2FGT40","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Isysxp%2FGT40/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Isysxp%2FGT40/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Isysxp%2FGT40/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Isysxp","download_url":"https://codeload.github.com/Isysxp/GT40/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248281422,"owners_count":21077423,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["display","graphics","gt40","pdp11","simh"],"created_at":"2024-12-21T18:19:47.584Z","updated_at":"2025-04-10T19:34:13.313Z","avatar_url":"https://github.com/Isysxp.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\tA simulation of the GT40. A graphics terminal manufactured by the Digital Equipment Corporation (DEC).\nThe simulation is based upon the pdp11 simulator from Simh. https://github.com/simh/simh\nThe original display system code developed by Matt Burke, Phil Budne, Alan Frisbie and others\nhas been significantly modified to add a simulated KY11-J front panel which is functional.\nSimilarly, I would like to thank Lars Brinkhoff for his expert assistance is getting the ITS\ngraphics interfaces running.\nThe original graphics for this panel were provided by Joerg Hoppe and are planned to be included\nin his Blinkebone-panelsim system at some stage. The rationale behind this project is that\nwe can now move beyond simple terminal windows for these simulated system to simulations that\nallow for a more coherent experience of using these old computers. Clearly this is why Oscar's\nPiDP8 and PiDP11 have been so successful as have Joerg's simulated panels which give us much\nmore of a feel for how these systems were used. In addition, the GT40 was one of the graphics\nsystems that were developed at the same time as the PDP10 and PDP11. I would note the PDP10 in\nparticular as Oscar is in the process of developing the PiDP10 and, to run on this system, ITS\nis probably the main game in town for which there is also graphics support.\n\nIntroduction:\n\n The GT40 is a self contained graphics/text terminal developed by DEC and first introduced\nin 1972. A complete outline of this device can be found in the users guide:\nEK-GT40-OP-002_GT40_GT42_Users_Guide_Feb75.pdf This is included in this download.\n\nBuilding the system:\n\nThe download contains makefiles for Linux, MacOSX and Windows.\n\nThis application depends upon SDL2 for graphics. Please install the dev files\nfor this first.\n\neg (Linux) sudo apt-get install libsdl2-dev\n   (MacOSX) brew install sdl2\n   (Windows) for this OS you will need the windows build system for simh. This is contained\n   in a separate directory and should be included in your VS projects directory. \n\n1.\tLinux\n\tFrom GT40 directory, make will build the gt40 binary and make a copy\n\tin the BIN Directory.\n2.\tMacOSX\n\tFrom the GT40 directory, build with make -f makefile.simh. This will result in a binary\n\tname 'pdp11' in the BIN directory. You can rename it to gt40. The reason for not changing\n\tthe name of the executable is due to the complex structure of the simh makefile.\n3.\tWindows\n\tThere is a Visual Studio project file in the 'Visual Studio Projects' directory. To build\n\tthis you will need a version of Visual Studio \u003e= 2008.\n\n\nHowto:\n\n\tThe GT40 is a terminal that is connected to a master system via a serial line. It consists\nof a pdp 11/05 processor with a VT11 display system. To act as a terminal the 11/05 requires a\nprogramme. First, try the script rt11 in the .BIN directory with\n(Linux/OSX) ./gt40 rt11 \u003cyour master system name\u003e:\u003cport number\u003e\nThis script will setup a DL11 serial port and connect it to the master system and port as above.\nAlso, the script will attach an RT11 image to RL0 and a graphics utilities disk to RK0.\nIn addition, the script will load the standard GT40 rom.\nFinally, the script will load a terminal interface app (vt07.bin) that maybe used to connect to ITS.\nTo this end, there are a number of options:\n\n1. \tThe GT40 was supplied with a boot rom containing a minimal terminal interface programme.\n\tAn image of the rom is in ./BIN/bootvt.img and this can be loaded in the simh rom system.\n\tThe rom image is loaded to address 17766000 which is also the start address.\n\tThis may be started by pressing 'Load Address' and the 'Start' as the SR is already set.\n\tApparently, nothing will happen. This is because, being a serial terminal, any characters\n\tsent before starting the programme will be lost.\n\tIf you test it using the telnet port to another system, just start typing the username\n\tand the login prompt will appear. The, you are online with a very basic terminal. It is\n\tlittle better than a teletype.\n\n2.\tIf you wish, you can use the VT07 terminal system to connect to any system, not just ITS.\n\tSet the SR to 1000 press 'Load Address' and 'Start' and carry on as above. This is a slighly more\n\treliable terminal which also contains a graphics interface and may be used with EMACS under ITS.\n\tAgain, you will see only a cursor. Start typing to move things along.\n\n3.\tRT11 may be used to build graphics apps with either BASIC/RT11 saved as \n\tGBASIC.SAV or, FORTRAN. See DRAW.FOR. RT11 can be booted from the simh prompt with boot rl0.\n\tIn addition, there is an RT11 app GTERM.SAV. This is another very simple terminal programme\n\tthat uses the RT11 VT11 scroller system to display the text. It is not a VT100 sim!!!!!\n\tAlternatively you can be a real programmer and toggle in the RL02 bootstrap from the 11/05\n\tpanel.\n\tSee: DEC-11-LBACA-D-D_basicRTlangRef_Oct74 (included)\n\n4.\tIf you want to try your hand with ITS, you will need to download the latest build from github\n\thttps://github.com/PDP-10/its. To connect to this, you can use either the VT07 script as above\n\tto connect to port 10019 on the ITS system. Or, use the rom bootstrap, login to ITS and then the\n\tGTLOAD app to load the VT07 binary from the ITS server. Then you can play with Lisp/Logo\n\tor the incomprehensible Stanford University Drawing System (SUDS)!\n\t\n5.\tThe focal script loads and runs FocalGT. This also contains a primitive terminal\n\tinterface that is usually used with VTCOM under RT11.\n\tSee: FOCAL-GT_RT_UsersMan\n\n6.\tFinally, games. Needless to say, Lunar Lander is still in and can be run from the rt11 script\n\tsimh prompt with boot vt. There is a copy of Space War that can be loaded with the command\n\tload sw.lda and then run. This game uses the switch register for control. Find out which\n\tone is which yourself!\n\tNB: to boot vt for Lunar lander use this script:\u003cbr\u003e\n\tset vt crt=vr14\u003cbr\u003e\n\tset vt scale=2\u003cbr\u003e\n\tset vt ena\u003cbr\u003e\n\tboot vt\u003cbr\u003e\n\n\tIn conclusion, this GT40 app is another step towards a complete virtual machine and at least\n\tprovides a genuine green screen experience. I think the display resolution is a bit low at\n\tthe moment. However, scaling the whole thing is a bit of a challenge as it already takes up\n\tquite a bit of space on my 2560x1440 (1440P) monitor. For the next step, a 4K monitor is\n\trequired!\n\tAlso, I would request that if anyone has a really nice picture of a VR17 that could be used\n\tinstead of the current VR14, do drop me a line.\n\n\tThis software is provided under GPLv3.\n\tIan Schofield Jan 2021.\n\n\tComments for 2022::\n\t\n1.\tThis app will not buid for Windows using Visual Studio 2019/2022 due to the well known __iob_func problem.\n\tThis error is quite hard to fix and requires a new version of SDL. I stongly suggest that you use Visual\n\tStudio 2008 at the moment until this can be fixed. In the meanwhile, change the linked library setting to\n\tinclude SDL2.dll and remove the definition HAVE_LIBPNG.\u003cbr\u003e\n\t\n2.\tThere is a new version of Spacewar available. Many thanks to Lars Brinkhoff for sorting this out.\u003cbr\u003e\n\tIt can be found at: https://github.com/pdp11/mit-gt40-spacewar\u003cbr\u003e\n\tThis also means that you can become a DOS-11 expert!\n\u003cbr\u003e\n\tUpdate Oct 2023:\u003cbr\u003e\n \u003cbr\u003e\n \tThis update is for evaluation purposes at the moment.\u003cbr\u003e 1: recent 64 bit SDL2 libraries do not allow\n\tUpdateWindowSurface off the SDL main thread. Mloop() and refresh() have been updated to correct this.\n\tThis does affect the screen refresh so any comments about display quality would be great.\u003cbr\u003e\n\t2: console command injection which is used for key strokes into the GT40 UI window has been updated\n\tas the use of TIOCSTI is deprecated. The update is to the console KL11 handler in pdp11_stddev such that\n\ta key event in the UI window is now injected into the KL11 (or remote) input stream. This is equivalent\n\tto having an LK40 keyboard linked to the 11/05 console KL11. Now, you can have the UI in focus and type\n\tinto the screen. This still works in Windows. This update has been tested in Fedora 38 64 bit.\n\tOther new distros should be OK.\n\u003cbr\u003e\n\u003cbr\u003e\n\tIan Schofield Oct 2023.\n\u003cbr\u003e\n\u003cbr\u003e\n \tSee above. This update to sim_video_gt40.c is significant. The display logic has been changed to take\n\tadvantage of a number of useful features of SDL2. However, this also gets into game territory where\n\tanything less that 180 FPS means you have no chance! The display update is now frame synced and called\n\tfrom Mloop(). Now, Refresh() is slaved to Mloop() rather then the other way around. This considerably\n\treduces display flicker and shading. This has been tested in Fedora 38 64bit and Windows. The app\n\twill also work on a Pi. I have tried Bookworm 64bit on a Pi4 to do this. But, the app really hammers the CPU\n\tso I cannot recommend this device.\n\t(For the Pi app to work, you need: export SDL_VIDEODRIVER=x11 and export SDL_VIDEO_X11_XRANDR=0).\n\tAs this update may cause some problems, I have left a previous copy of sim_video_gt40.c in the repo\n\u003cbr\u003e\n\u003cbr\u003e\n\tIan Schofield Oct 2023.\n\u003cbr\u003e\n\u003cbr\u003e\n   \tThis build has some further updates to the display system. The Refresh() function is now called from Mloop()\n  \twhich is synced to the monitor frame rate. Also, the original sync system in vt11.c has been disabled such\n  \tthat the VT11 hardware always runs as fast as possible. The effect of this is patricularly noticeable\n  \tusing the VT07 graphics app which uses a software character builder and is line synced. The line sync\n  \tlogic as above was always only an approximation to the true line frequency. Now that this is disabled,\n  \tthe VT07 display no longer flickers.\n  \tAs above, the app performance is still borderline on a Pi4. It may be that it is useable on a Pi5.\n\u003cbr\u003e\n\u003cbr\u003e\n\tIan Schofield Nov 2023.\u003cbr\u003e\n \u003cbr\u003e\n \u003cbr\u003e\n \tYet another minor change to the display system so that the app works on a Mac. This was tested in a VM\n\trunning Sonoma. This was rather hard work as SDL works slighly differently.\n\u003cbr\u003e\n\u003cbr\u003e\n\tIan Schofield Nov 2023\u003cbr\u003e\n \u003cbr\u003e\n \u003cbr\u003e\n \tThis update adds some more versions of spacewar and a way of presetting the SR from SIMH. To do this\n\tuse 'DEP SR xxxxx' before the 'SET VT ENA' command.\u003cbr\u003e\n \tPlease note that if you wish to try the GTLOAD option to connect to ITS, use the vt07 script\n\tand change lines 17 and 18 to 'boot rom0'. Using this option can cause a VT11 trap. If this\n\toccurs, change line 65 in PDP11/pdp_vt.c to '#define VT11_DELAY 20'. This trap  occurs because\n\tthe bootvt programme cannot keep up with the VT11 instruction fetches.\n\tIn addition, I have included a script to run the VT11 embedded Lunar Lander. 'do lunar'.\n\tI have added two versions of Spacewar.\n\tRun with 'do spacewar'. This is from Lars Brinkhoff and I am not sure how it works.\n\tRun with 'do spwar'. I do not know where this is from but it uses the SR to control the ships. (Really hard!).\u003cbr\u003e\n   \tFinally as the amazing PiDP10 has arrived, I have added a specific ITS script. Use as 'do its (DNS name of your PiDP10)'.\n  \tThis will attach the GT40 to port 10019 and allow it to be used as a LLOGO display slave.\u003cbr\u003e\n   \tsim_txmr.c has been updated so that the telnet negociation now works.\n\u003cbr\u003e\n\u003cbr\u003e\n\tIan Schofield Mar 2024\u003cbr\u003e\n \u003cbr\u003e\n \tThis patch is to synchronise the screen update from the SDL2 code in MLoop() (sim_video_gt40.c)\u003cbr\u003e\n\tIn addition, this corrects a crash that can occur using the bootvt.img rom bootstrap.\u003cbr\u003e\n \tTo try/use this boostrap code see the its script. The boot image contains code that may\n\tbe used to load binaries from ITS using the :GTLOAD command.\u003cbr\u003e\n \tHowever, I would note that the Lunar Lander ITS binary never gets past the start screen.\u003cbr\u003e\n  \tTo correct this, once the start screen is on the display, stop simh from the GT40 console (^e)\u003cbr\u003e\n   \tthen type the following into simh:  d psw 0 and then c. After a few seconds Lunar Lander will start.\u003cbr\u003e\n    \u003cbr\u003e\n    \tIan Schofield Jun 2024\u003cbr\u003e\n     \u003cbr\u003e\n     \tAfter some thought, I have re-enabled the option to control simh with the PDP11/05 paddle switches.\u003cbr\u003e\n        This is achieved using the TIOCSTI ioctl. Please note the above in that this method is deprecated.\u003cbr\u003e\n\tIn the case of the KL11 mod, this injection is at the device handler level (line 297 pdp11_stddev.c).\u003cbr\u003e\n\tUnfortunately there is no other obvious method of injecting text into the simh console.\u003cbr\u003e\n\tI would note that the method used for windows does not seem to have attracted the same amount of attention.\u003cbr\u003e\n\tThe Linux code is at line 4031 in sim_console.c. Disable this if you wish.\u003cbr\u003e\n     \u003cbr\u003e\n     \tIan Schofield August 2024\u003cbr\u003e\n  \t\n \n \n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisysxp%2Fgt40","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fisysxp%2Fgt40","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisysxp%2Fgt40/lists"}