terminal-simulator
terminal-simulator copied to clipboard
Firmware images
VT1xx ROMs. Four 2Kx8 make up the main firmware mapped at 0000-1FFF. The character set is another 2K8x, but is not available to the CPU. The "Advanced Video Option" (AVO) can supply extra RAM and ROM; the latter is in the 8000-BFFF range (16K).
- [x] VT100 firmware. Part numbers 23-031E2/23-061E2, 23-032E2, 23-033E2, 23-034E2.
- [x] VT100 US ASCII character set. Part number 23-018E2.
- [ ] AVO ROM. Part number 23-093E2.
- [ ] Alternate character set. Part number 23-094E2.
- [x] VT101, 1981 cost reduced, unexpandable; has its own firmware.
- [x] VT102, 1981 cost reduced, unexpandable; has its own firmware.
- [ ] VT125 - ReGIS graphical language board (GPO).
- [ ] VT132, 1980? base vt100 with AVO, STP, and its own 23-099e2/23-100e2 AVO character ROM set. Has its own base firmware ROMs which support block serial mode.
- [x] GIGI (with BASIC).
This comment will be continuously edited as more information appears.
VT180: vt180.zip
23-017E3-00
23-018E2-00, E4
23-021E3-00
23-032E2-00, E52
23-033E2-00, E45
23-034E2-00, E40
23-061E2-00, E56
CIT-101: cit101.zip
VT220:
vt220.zip
23-011M1, E1
23-178E6
23-182E5, E4
23-183E5, E3
23-348E4, E13
And the LK201 keyboard: lk201.zip
23-00S9
23-0042M2, E1
Grepping the VT220 files I see both V2.1 and V2.3.
A VT102 screenshot shows V1.1, but I don't see that in the vt102.zip files. There are two "V1" though, so maybe the minor number is output separately.
Do not forget about VT105, VT125 and VT340. There are copies of VT105, VT132 and VT340 firmware images on the Internet but we can't find VT125 expansion firmware images for VT105 base terminal that contains ReGIS processor routines.
Thanks @fsword7. Yes, those are possible simulation targets as well. But I'm not sure how much time I will have to explore much further beoynd the basic VT100. We'll see.
Bitsavers has some VTxxx ROMs, and there are others packages for MAME. I know @jeffpar has collected a long list of ROM images for various DEC machines, but I can't seem to find it now.
I can't find ROM images for terminal on Bitsavers. I got all ROM images from Dunnington FTP site that includes some terminals, PDP-11, VAX and some devices (RQDX1/2/3 and TKZ50). @jeffpar do you still have images available?
Not sure, but I will look and report back.
ROM images on Bitsavers:
- http://www.bitsavers.org/pdf/dec/terminal/vt340/firmware/
- http://www.bitsavers.org/pdf/dec/terminal/vt420/firmware/
Oh, I now got it. I was looking for other terminals on Bitsavers. Thanks.
Thanks @fsword7. Yes, those are possible simulation targets as well. But I'm not sure how much time I will have to explore much further beoynd the basic VT100. We'll see.
Bitsavers has some VTxxx ROMs, and there are others packages for MAME. I know @jeffpar has collected a long list of ROM images for various DEC machines, but I can't seem to find it now.
Is this maybe the page you were thinking of?
Yeah! Thanks. I already found it before. I did not know who collected a listing of ROM images until now.
Yes, that's the one. Thanks!
Hi, and thanks for maintaining this.
I'm interested in terminal emulation in general, and real hardware is hard to come by (and takes up space...) so it's not easy to test how a real VTXXX behaves (though docs do exist).
Other than this project, there's only one other hardware emulator which I know of - http://blog.schmorp.de/2015-11-10-emulating-vt102-hardware-in-perl-1.html which can help evaluate the behavior on a real VT100, so personally I find it much more than a niche "real retro vt100 for the RPI" project (and appreciate the -Q option), with some real world use cases other than being cute (though cute is valuable too!).
So I was hoping to try some of the other rom dumps posted above (personally I'm interested in VT102 and VT220, but the more the merrier), but couldn't quite figure out how to create a new rom.c from their content.
Which of those roms are supposed to (theoretically) work out of the box? I'd presume at least vt102? What about VT220, and possibly others?
How shuld one create a new rom.c from their content?
Maybe this project could incorporate the working roms into the source files so that one could choose (at compile or run time) which system to emulate?
Thanks again.
Hello @avih,
Thanks for your comments. There is also a working VT100 in MAME, and there's another one in JavaScript. I didn't know the one in Perl, so thanks for that.
There's no automated way to make a rom.c from a ROM image. It's basically just a hexdump.
For now I would only expect VT100 and VT101 ROMs to work. VT102 would probably expect AVO (advanced video option, more attributes like bold, bright, blink, etc) which I haven't implemented yet. VT220 and up are significantly different hardware.
Support for more models would absolutely be in scope for this project, but at this point I don't have much time.
There is also a working VT100 in MAME, and there's another one in JavaScript
Nice. I somehow had the impression that the MAME one is incomplete or impractical, and was not aware of the JS one. Link please?
EDIT: for future reference, I was able to use the vt102 emulation in MAME after following this https://zork.net/~st/jottings/Real-VT102-emulation-with-MAME.html . Got it working as far as what's described there, which does have caveats. FWIW, nowhere near as simple and immediate as using this project.
There's no automated way to make a rom.c from a ROM image. It's basically just a hexdump.
Yeah, it looks as such. So for the vt101 one should just replace the first array at rom.c with a dump of the bin file inside https://github.com/larsbrinkhoff/terminal-simulator/files/6492806/vt101.zip ? (or just use -R romfile.bin with that zip content?)
VT102 would probably expect AVO (advanced video option, more attributes like bold, bright, blink, etc) which I haven't implemented yet.
This would be very nice ;)
at this point I don't have much time.
Right, such is life...
Thanks again though.
Here's the JavaScript VT100 emulator: https://www.pcjs.org/machines/dec/vt100/
So for the vt101 one should just replace the first array at rom.c with a dump of the bin file
Yes. Don't use -R, that's for loading a CP/M executable.
Here's the JavaScript VT100 emulator: https://www.pcjs.org/machines/dec/vt100/
Thanks. For me, like MAME, it was not easy to use as a test platform.
For reference, There's also this which I think is vt100+avo: https://github.com/phooky/VT100-Hax . I was able to get the ncurses version running (one might want to replace -lncurses with -lncursesw at the Makefile and run it with ./vt100sim -r ../../ROMs/basic.bin, and use F10 and then ^D to exit).
So we have 5 working hardware emulators: MAME, JS (vt100), VT100-Hax (vt100+avo), the perl one (vt100[+avo]/vt102/vt131), and this project (vt100).
This project is very easy to run and has feature for faithful reproduction of the real behavior/timing and visual output, while the perl one is mostly intended for behavior testing, and it has some features to help with that (status LEDSs, faster than real vt100, XON/XOFF handled internally to avoid drops), but needs to run in a terminal...
Good to have a choice :)
Oh right, VT100-Hax was a major source of information for me. Sorry I forgot to mention it.
VT240 board, photo by @techfury90.

I don't think you've picked up on these yet, for the VT125: https://github.com/technomancer-lv/vt125-rom/tree/main/rom
From a quick concatenation, in the order they're listed, the disassembly makes sense. The ReGIS state machine is all visible as 14 jump tables between ~2600h and 3a00h and there's a load of glyph data from ~4200h.
I would've loved to have extended my ANSI parser specification to cover ReGIS years ago, but I didn't have any graphics terminal to experiment with!
Thank you @hisdeedsaredust. That's right, I hadn't located the VT125 ROM yet.
A VT102 screenshot shows V1.1, but I don't see that in the vt102.zip files. There are two "V1" though, so maybe the minor number is output separately.
The VT102 files are V1.2. The version number is present in ASCII form in both ROMS as V12 and a following 0ch byte for the binary form.
MAME ROM sites can also supply the VT131 extra ROM, which is tiny because nearly all of the functionality of the VT131 is an integral part of the base VT102 ROMS. The VT131 ROM only exists to (1) be a way to trigger the change to VT131 mode, and (2) to provide SET-UP C screen.
Thanks again @hisdeedsaredust! I better gather up all those ROM images and put them in one place.
Oh thought I should post, I have some VT52 roms off a board I bought years ago. Had to build something custom to get them though. The chips are named 119a9,120a9, 121a9, 122a9.
I was going to make a hex format but as I was dumping the roms I kind of forgot what sockets they were in and there really isn't a 4bit format for HEX that I am aware off. First like is just a hex text dump from the start of the chip and then a break out per line.
Hope this helps. I ment to do something like this 5 years ago but life got in a way, glad somone is working on it. vt52_rom_dump.txt
@9track revealed his set of ROM dumps, including VAXstation 100:
http://www.9track.net/roms/
VT50 microcode listing found here:
http://www.bitsavers.org/www.computer.museum.uq.edu.au/pdf/VT50%20Service%20Notes.pdf