|
Joined: Apr 2012
Posts: 193
Senior Member
|
Senior Member
Joined: Apr 2012
Posts: 193 |
Today i promoted the Rainbow-100-B driver to working. I also added a fourth (PC double density) drive for better data exchange. Note that you will need IMPDRV3.SYS in CONFIG.SYS (and D: becomes unavailable). The screenshot shows a Rainbow-100 B with amber monitor, mounted hard disk and real time clock. DC.COM (a fast, free Norton Commander clone) is running under CodeBlue (a 3rd party PC emulator). Most non-graphical applications work. There is a FreeDOS image mounted on F: (you cannot boot that, before anyone asks)... Noticed that DIPs are a bit garbled in newer builds. They used to be aligned according to the order of the DIP macros.
P.S.: the serial port still needs some love.
Last edited by Bavarese; 07/07/16 04:12 PM.
|
|
|
|
Joined: Apr 2012
Posts: 193
Senior Member
|
Senior Member
Joined: Apr 2012
Posts: 193 |
From the Shoutbox:
R. Belmont: Bav: if you're around, I have a question about your vtvideo patch. is the case 0x0b: meant to fall through into 0x0c?
'0x0a' and '0x0b' are separate cases. Truth is, i changed the polarity of 'reverse_field' -late- to get correct colors (both in SETUP and the video test on the diag.disk). Perhaps my idea of a reverse characters is wrong? VT-180 specs, chapter 6-43 says: "reverse characters are (an) XOR of reverse video and reverse screen" and i came up with
invert = invert ^ m_reverse_field ^ m_basic_attribute;
..which looked good. There is also a separate logic to handle 'blank' space (bit = m_reverse_field ^ m_basic_attribute). I spent quite some time to reconcile my code with the docs, and verify character attributes. There was even a truth table in the VT100 tech.manual i implemented (see reference a. below). It should be possible to iron out the remaining bugs. I assume a complete rewrite might be overkill for a business machine. REFERENCES:a. complete truth table (for attributes) from TABLE 4-6-4 (in VT100 technical manual) b. VT-180 manual 6-30 (for screen attributes) c. VT-180 specs, chapter 6-43 (where multiple attributes are described
Last edited by Bavarese; 07/08/16 12:52 AM.
|
|
|
|
Joined: Apr 2012
Posts: 193
Senior Member
|
Senior Member
Joined: Apr 2012
Posts: 193 |
Saved from the Shoutbox:
Lord Nightmare: bavarese: vtvideo.cpp is incorrectly showing vt100 video as interlaced regardless of the setting of the config bit on setup page B
Lord Nightmare: i assume changing the setup bit should instantly take effect
Lord Nightmare: to get to vt100 setup page b: boot vt100, press f5 repeatedly until setup page A comes up, then press '5' repeatedly until setup page B comes up
Lord Nightmare: the meaning of the block of config bits at the bottom can be found on page 6-4 (PDF page 249) of
http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/terminal/vt100/EK-VT100-TM-003_VT100_Technical_Manual_Jul82.pdf
Lord Nightmare: NEVERMIND, I screwed up, the interlace bit works PERFECTLY. I miscounted which field to change the bit in
Lord Nightmare: what doesn't seem to work is the 'inverse video' or white on black vs black on white bit, nor the AVO functions which should have "SETUP A"
blinking and "to exit press setup" underlined, but that is most likely a vt100 driver issue, not a vtvideo.cpp prob
Lord Nightmare: so AVO support in vt100 driver is currently at least partially broken, if not completely.
Bavarese: VTVIDEO contains 2 sections. The VT100 section
vt100_video_device::device_start(), vt100_video_device::display_char)
is essentially unchanged since 2009 and many features (48 line mode; soft scroll; intensity / 4 color palette, interlaced mode) are unimplemented there...
When i began, i lacked ROMs and experience, plus i have never seen a VT style terminal to this day. So i am unable to compare my interpretation of attributes with live hardware.
The Rainbow is my reference machine. It doesnt have an AVO as such, while it treats the basic attribute as inverse (*)
Once you * have * the larger picture, this approach appears inadequate and must be expanded (...somehow)
You could try to adapt the VT driver to use
'rainbow_video_device::display_char' and 'rainbow_video_device::device_reset()'
instead of the vt100_ (old, 2009 style) routines.
Evaluation of DC011 and DC012 (write) registers is mostly the same. Just take care of the extra 'break' statements in cases 0x0d and 0x0f (of routine dc012_w)...!
(*) P.S.: i think that a VT100 _with_ AVO interprets the 'basic attribute' as inverse, while one without treats it as _underline_.
Last edited by Bavarese; 07/11/16 07:41 AM.
|
|
|
|
Joined: Jan 2016
Posts: 76 Likes: 5
Member
|
Member
Joined: Jan 2016
Posts: 76 Likes: 5 |
(*) P.S.: i think that a VT100 _with_ AVO interprets the 'basic attribute' as inverse, while one without treats it as _underline_. [/b] I recall this being one of the (few) differences between running programs on the Rainbow and running them on the VT102 at work (which had the AVO stuff). It mattered only for one silly program I ran back in the day, but I can't recall what that was. Warner P.S. I'm back. I had to take a couple months off from this project, but I'm back now.
|
|
|
|
Joined: Apr 2012
Posts: 193
Senior Member
|
Senior Member
Joined: Apr 2012
Posts: 193 |
Post 3.10 patches from January 1990 for CodeBlue. Handles a bug in the keyboard routine. Also addresses users of international keyboards (January 1990). Interesting because it lists (and somehow knows / patches in) all the various keyboards sold (mine for example, is a 'LK201-AG')...
Last edited by Bavarese; 08/04/16 05:59 PM.
|
|
|
|
Joined: Apr 2012
Posts: 193
Senior Member
|
Senior Member
Joined: Apr 2012
Posts: 193 |
(Question regarding screen macro) How do i specify a second, totally independent graphical screen from within the rainbow. driver? First screen is reserved for the on-board output (vt100 video, text only; working). The 2nd (new) screen should be driven exclusively by the NEC 7220 display controller (accessed in several drivers like QX10, DMV, IF800 and VT240). I now have implemented some of the extra logic on the Rainbow color graphics board, as well as the mandatory UPD7220_DISPLAY_PIXELS_MEMBER( hgdc_display_pixels );...and now cant figure out how to "set the screen". Is it
MCFG_UPD7220_SET_SCREEN("screen2")
or
MCFG_VIDEO_SET_SCREEN("screen2")
I'd also like to have a callback to set and clear the video interrupt on VSYNCs, similar to the VT100 (text only) video driver. For the vt100 video driver, it used to be something like
MCFG_CPU_VBLANK_INT_DRIVER("screen", rainbow_state, vblank_irq)
MCFG_VT_VIDEO_CLEAR_VIDEO_INTERRUPT_CALLBACK(WRITELINE(rainbow_state, clear_video_interrupt))
Can you help me? Is there something obvious i overlooked? Thank you very much, Karl. Errors i copied over from previous attempts:
Driver rainbow (file rainbow.cpp): 1 errors, 0 warnings
Errors:
uPD7220 device 'upd7220': No screen specified for device ':upd7220', but multiple screens found
------------
On another occasion (different macro config):
MCFG_VIDEO_SET_SCREEN called on device ':screen2' with no video interface
Macro code for screen 1 and screen 2 (= preliminary):
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(132 * 10, 49 * 10)
MCFG_SCREEN_VISIBLE_AREA(0, 80 * 10 - 1, 0, 48 * 10 - 1)
MCFG_SCREEN_UPDATE_DRIVER(rainbow_state, screen_update_rainbow)
MCFG_SCREEN_PALETTE("vt100_video:palette")
MCFG_GFXDECODE_ADD("gfxdecode", "vt100_video:palette", rainbow)
MCFG_DEVICE_ADD("vt100_video", RAINBOW_VIDEO, 0)
MCFG_VT_SET_SCREEN("screen")
MCFG_VT_CHARGEN("chargen")
MCFG_VT_VIDEO_RAM_CALLBACK(READ8(rainbow_state, read_video_ram_r))
MCFG_VT_VIDEO_CLEAR_VIDEO_INTERRUPT_CALLBACK(WRITELINE(rainbow_state, clear_video_interrupt))
// ************************************************ SECOND video hardware (GDC-NEW)
/* Devices (GDC-NEW) */
MCFG_DEVICE_ADD("upd7220", UPD7220, 8000000/6) // unk clock
// MCFG_DEVICE_ADDRESS_MAP(AS_0, upd7220_map)
MCFG_UPD7220_DISPLAY_PIXELS_CALLBACK_OWNER(rainbow_state, hgdc_display_pixels)
MCFG_SCREEN_ADD("screen2", RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK | VIDEO_ALWAYS_UPDATE)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate
MCFG_SCREEN_SIZE(800, 240)
MCFG_SCREEN_VISIBLE_AREA(0, 800-1, 0, 240-1)
MCFG_SCREEN_UPDATE_DEVICE("upd7220", upd7220_device, screen_update)
Last edited by Bavarese; 08/15/16 10:01 AM.
|
|
|
|
Joined: May 2004
Posts: 996 Likes: 103
Senior Member
|
Senior Member
Joined: May 2004
Posts: 996 Likes: 103 |
You need to add a new screen with MCFG_SCREEN_ADD("screen name", RASTER) ... For the VSYNC there is a callback you can add: MCFG_UPD7220_VSYNC_CALLBACK EDIT: MCFG_VIDEO_SET_SCREEN needs to be added after your 7720 device in the machine config, not after the screen.
Last edited by Duke; 08/15/16 10:09 AM.
|
|
|
|
Joined: Apr 2012
Posts: 193
Senior Member
|
Senior Member
Joined: Apr 2012
Posts: 193 |
I am working on code for the circuitry DEC apparently added to the Graphics Option. Six ports (0x50 to 0x55) seem to add functionality not present on the original NEC 7220, for example up to 4 bit planes, a color map, a scroll map (and more). https://dl.dropboxusercontent.com/u/37819653/BANNISTER/GDC_and_EXTRA_PORTS.jpgCurrently, i dont know how to implement the Readback Latch (see path in red at right top) which provides 16 bits to the FIFO. I see that Read, modify, write (RMW) cycles are unimplemented in upd7220.cpp... There must be a way to pipe back display data (orange) to the GDC. How is it done correctly? There is also some logic involving a "pixel mask" - data apparently coming from the GDC (green arrow). Thanks for insights, Karl https://dl.dropboxusercontent.com/u...on_Programmers_Reference_Guide_Jun84.pdf[Click to enlarge block diagram]
Last edited by Bavarese; 08/18/16 03:29 PM.
|
|
|
|
Joined: Jan 2012
Posts: 891 Likes: 17
Senior Member
|
Senior Member
Joined: Jan 2012
Posts: 891 Likes: 17 |
That looks quite similar to the vt240. You should look there for hints. You'll probably find it somewhat opaque though as the hardware is rather odd.
|
|
|
3 members (Cpt. Pugwash, 2 invisible),
196
guests, and
1
robot. |
Key:
Admin,
Global Mod,
Mod
|
|
Forums9
Topics9,320
Posts121,923
Members5,074
|
Most Online1,283 Dec 21st, 2022
|
|
These forums are sponsored by Superior Solitaire, an ad-free card game collection for macOS and iOS. Download it today!
|
|
|
|