terminal-simulator icon indicating copy to clipboard operation
terminal-simulator copied to clipboard

Firmware images

Open larsbrinkhoff opened this issue 4 years ago • 35 comments

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.

larsbrinkhoff avatar May 17 '21 09:05 larsbrinkhoff

GIGI: vk100.zip

23-017E4-00, E52
23-018E4-00, E51
23-031E4-00, E53
23-190E2-00, E50

larsbrinkhoff avatar May 17 '21 09:05 larsbrinkhoff

VT101: vt101.zip

23-028E4-00, E71

larsbrinkhoff avatar May 17 '21 09:05 larsbrinkhoff

VT102: vt102.zip

23-041E4-00, E69
23-042E4-00, E71
23-225E4-00, E69
23-226E4-00, E71

larsbrinkhoff avatar May 17 '21 09:05 larsbrinkhoff

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

larsbrinkhoff avatar May 17 '21 09:05 larsbrinkhoff

CIT-101: cit101.zip

larsbrinkhoff avatar May 21 '21 09:05 larsbrinkhoff

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

larsbrinkhoff avatar May 21 '21 09:05 larsbrinkhoff

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.

larsbrinkhoff avatar May 23 '21 05:05 larsbrinkhoff

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.

fsword7 avatar May 30 '21 19:05 fsword7

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.

larsbrinkhoff avatar May 31 '21 05:05 larsbrinkhoff

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?

fsword7 avatar May 31 '21 17:05 fsword7

Not sure, but I will look and report back.

jeffpar avatar May 31 '21 17:05 jeffpar

ROM images on Bitsavers:

  • http://www.bitsavers.org/pdf/dec/terminal/vt340/firmware/
  • http://www.bitsavers.org/pdf/dec/terminal/vt420/firmware/

larsbrinkhoff avatar May 31 '21 17:05 larsbrinkhoff

Oh, I now got it. I was looking for other terminals on Bitsavers. Thanks.

fsword7 avatar May 31 '21 17:05 fsword7

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?

jeffpar avatar May 31 '21 17:05 jeffpar

Yeah! Thanks. I already found it before. I did not know who collected a listing of ROM images until now.

fsword7 avatar May 31 '21 17:05 fsword7

Yes, that's the one. Thanks!

larsbrinkhoff avatar May 31 '21 18:05 larsbrinkhoff

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.

avih avatar Aug 13 '21 09:08 avih

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.

larsbrinkhoff avatar Aug 13 '21 09:08 larsbrinkhoff

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.

avih avatar Aug 13 '21 10:08 avih

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.

larsbrinkhoff avatar Aug 13 '21 18:08 larsbrinkhoff

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 :)

avih avatar Aug 14 '21 11:08 avih

Oh right, VT100-Hax was a major source of information for me. Sorry I forgot to mention it.

larsbrinkhoff avatar Aug 14 '21 17:08 larsbrinkhoff

VT240 board, photo by @techfury90. vt240

larsbrinkhoff avatar Jan 23 '22 20:01 larsbrinkhoff

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!

hisdeedsaredust avatar Feb 21 '22 21:02 hisdeedsaredust

Thank you @hisdeedsaredust. That's right, I hadn't located the VT125 ROM yet.

larsbrinkhoff avatar Feb 24 '22 05:02 larsbrinkhoff

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.

hisdeedsaredust avatar Mar 10 '22 09:03 hisdeedsaredust

Thanks again @hisdeedsaredust! I better gather up all those ROM images and put them in one place.

larsbrinkhoff avatar Mar 14 '22 07:03 larsbrinkhoff

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

WarlockD avatar Mar 26 '22 21:03 WarlockD

@9track revealed his set of ROM dumps, including VAXstation 100:
http://www.9track.net/roms/

vs100.zip

larsbrinkhoff avatar Sep 06 '22 05:09 larsbrinkhoff

VT50 microcode listing found here:
http://www.bitsavers.org/www.computer.museum.uq.edu.au/pdf/VT50%20Service%20Notes.pdf

larsbrinkhoff avatar Nov 12 '22 19:11 larsbrinkhoff