600D ROM support for both 24- and 48-character modes

ronin47
Posts: 135
Joined: Thu Dec 14, 2023 2:17 pm

Re: 600D ROM support for both 24- and 48-character modes

Post by ronin47 »

Mark wrote: Thu Apr 11, 2024 6:59 pm Steve Gray has made a color RGBI interface for C1P see this thread: viewtopic.php?f=3&t=452 or his project page here: http://cbmsteve.ca/osi-600d-colour/index.html

(It's a LOT smaller than a 630 board!)

-Mark
This is rather cool and up my street, but it does seem to require yet another monitor ROM, I'm getting quite the collection now!

I think for now I'll leave as is and concentrate on the 610 board, and I think I probably also need a data separator board too if I want to use floppies. Is that correct?
ronin47
Posts: 135
Joined: Thu Dec 14, 2023 2:17 pm

Re: 600D ROM support for both 24- and 48-character modes

Post by ronin47 »

@bxdanny

I just noticed that with the 48 column ROM, I'm getting odd results on other displays with my current values.

For example, if I use the 5" TV I have, or the large Dell display, the LHS is chopped off again.

Also, if I use the 10" LCD (My primary display at present), the BASIC side works just fine in either 24 or 48 column modes, however if I use the Monitor, the left 2 columns are cut off.

This I presume means that I'll either need to have a specific display I need to use it with all the 600D all the time, and that any other displays will need specific settings.

I also assume that each of the D/C/W/M options has individual settings for the LH column starting point?

BTW this is the case either through the onboard composite or via my buffer board.
bxdanny
Posts: 338
Joined: Thu Apr 16, 2015 2:27 pm
Location: Bronx, NY USA

Re: 600D ROM support for both 24- and 48-character modes

Post by bxdanny »

ronin47,

[Replying to your most recent message]
The standard values for $FFE0-$FFE2 are 65 17 00 for 24-column mode and 4B 2F 00 for 48-column mode. You were getting cut-off characters with those settings on the monitor I thought you wanted to use, so I adjusted them for you to work better with it. The "standard" ones are best for most monitors (I think), but if different monitors give different results, you aren't going to find one set of values that will work on any monitor. In the Monitor program (I'll use a capital M for the program and a small m for the screen - the double meaning of "monitor" can get confusing) there isn't just one byte that would adjust everything. The main value for where on $D0 page the address data begins is at $FED6, but you would also have to set $FEC4 to be four more than that, and $FEC7 to be five more than it, otherwise the spaces between the address and data displays will not be blank spaces.

------------------------
[replying to your previous message]
I agree, color should not be the priority. Getting a 610 and floppy drive sounds like it would be more useful. But after reading the discussion about color options, I did come up with an idea of my own for one. Yes, it involves another ROM, but not as the Monitor. Not in the CPU address space at all, but rather as the only component that (I think) would be needed to interface the board (via J75) to an RGBI (CGA-type) monitor. It would act as a lookup table to generate the RGBI signals from the monochrome video, color enable line, and four bits of color data. I present the lookup table below. [All the interesting data is in the second half (COLOR EN high); with COLOR EN low, the monochrome VID value is simply passed on to each of the four RGBI inputs of the monitor.]

Code: Select all

  Input bits (Address lines)           Output bits (data lines)
--------------------------------     -----------------------------
  5     4    3    2    1     0        3     2    1    0
Color  Vid  CD3  CD2  CD1   CD0      Int    B    G    R
 En         (B)  (G)  (R)  (Inv)
--------------------------------     -----------------------------
  0     0    0    0    0     0        0     0    0    0
  0     0    0    0    0     1        0     0    0    0
  0     0    0    0    1     0        0     0    0    0
  0     0    0    0    1     1        0     0    0    0
  0     0    0    1    0     0        0     0    0    0
  0     0    0    1    0     1        0     0    0    0
  0     0    0    1    1     0        0     0    0    0
  0     0    0    1    1     1        0     0    0    0
  0     0    1    0    0     0        0     0    0    0
  0     0    1    0    0     1        0     0    0    0
  0     0    1    0    1     0        0     0    0    0
  0     0    1    0    1     1        0     0    0    0
  0     0    1    1    0     0        0     0    0    0
  0     0    1    1    0     1        0     0    0    0
  0     0    1    1    1     0        0     0    0    0
  0     0    1    1    1     1        0     0    0    0
  0     1    0    0    0     0        1     1    1    1
  0     1    0    0    0     1        1     1    1    1
  0     1    0    0    1     0        1     1    1    1
  0     1    0    0    1     1        1     1    1    1
  0     1    0    1    0     0        1     1    1    1
  0     1    0    1    0     1        1     1    1    1
  0     1    0    1    1     0        1     1    1    1
  0     1    0    1    1     1        1     1    1    1
  0     1    1    0    0     0        1     1    1    1
  0     1    1    0    0     1        1     1    1    1
  0     1    1    0    1     0        1     1    1    1
  0     1    1    0    1     1        1     1    1    1
  0     1    1    1    0     0        1     1    1    1
  0     1    1    1    0     1        1     1    1    1
  0     1    1    1    1     0        1     1    1    1
  0     1    1    1    1     1        1     1    1    1
  1     0    0    0    0     0        0     0    0    0
  1     0    0    0    0     1        1     0    1    1
  1     0    0    0    1     0        0     0    0    0
  1     0    0    0    1     1        1     0    0    1
  1     0    0    1    0     0        0     0    0    0
  1     0    0    1    0     1        1     0    1    0
  1     0    0    1    1     0        0     0    0    0
  1     0    0    1    1     1        0     0    1    1
  1     0    1    0    0     0        0     0    0    0
  1     0    1    0    0     1        1     1    0    0
  1     0    1    0    1     0        0     0    0    0
  1     0    1    0    1     1        1     1    0    1
  1     0    1    1    0     0        0     0    0    0
  1     0    1    1    0     1        1     1    1    0
  1     0    1    1    1     0        0     0    0    0
  1     0    1    1    1     1        1     1    1    1
  1     1    0    0    0     0        1     0    1    1
  1     1    0    0    0     1        0     0    0    0
  1     1    0    0    1     0        1     0    0    1
  1     1    0    0    1     1        0     0    0    0
  1     1    0    1    0     0        1     0    1    0
  1     1    0    1    0     1        0     0    0    0
  1     1    0    1    1     0        0     0    1    1
  1     1    0    1    1     1        0     0    0    0
  1     1    1    0    0     0        1     1    0    0
  1     1    1    0    0     1        0     0    0    0
  1     1    1    0    1     0        1     1    0    1
  1     1    1    0    1     1        0     0    0    0
  1     1    1    1    0     0        1     1    1    0
  1     1    1    1    0     1        0     0    0    0
  1     1    1    1    1     0        1     1    1    1
  1     1    1    1    1     1        0     0    0    0
The one odd thing about OSI's color scheme is the use of color 0 to mean yellow. So with all bits of color data at 0, but VID at 1, the RG and I outputs will be on. [I am setting the Intensity bit on for all (non-blank) output except color 4, which OSI calls Olive Green, but I equate with brown, and which CGA monitors handled specially, producing brown instead of low-intensity yellow. I am equating Sky Blue to cyan, and Purple to magenta.]

The inputs to a CGA monitor [if you can find one] are ground to pins 1 and 2, RGB and I to pins 3 through 6 respectively, HSync to 8 and VSync to 9, with 7 left unconnected ("Reserved"), all TTL levels as far as I can tell. Anyone want to comment on how well this would work?

As for the data separator, Klyball [who makes the boards] can probably answer the question best. But basically, yes, you will need one unless you have an original MPI drive that had the data separator (of a different sort) mounted internally. As I understand it, Klyball's data separator is part of the "paddleboard" interface between the 610 and the drive, and not a separate piece.

Finally, for when you are ready, or for anyone else who wants to use the mod I started this thread with in conjunction with a disk system, I present some operating system disks that will take account of which video mode is active (i.e. of the video parameters starting at $FFE0). They are a version of Hexdos (the auto-run program, which erases itself when done, does the adjustments), a version of 65D 3.2 (with a modified BASIC containing some additions and bug fixes), and a version of my own Enhanced Pico-Dos (the only difference from the 1.40 version in that system's thread is that you can warm start it after switching video modes [i.e. do <Break>SW], with or without the Editor loaded, and continue working).

Note: To make an HFE file of the Hexdos disk, for use with the Gotek drive, you need to include the -5 option on the OSIHFE command line, otherwise the resulting file won't work. This applies to all images of Hexdos disks.
Attachments
BOOT2448.ZIP
(99.64 KiB) Downloaded 11 times
Last edited by bxdanny on Mon Apr 15, 2024 12:21 pm, edited 1 time in total.
No current OSI hardware
Former programmer for Dwo Quong Fok Lok Sow and Orion Software Associates
Former owner of C1P MF (original version) and C2-8P DF (502-based)
ronin47
Posts: 135
Joined: Thu Dec 14, 2023 2:17 pm

Re: 600D ROM support for both 24- and 48-character modes

Post by ronin47 »

As ever @bxdanny, thanks so much for all of your input here.

I guess I am a little spoiled in that all of my machines work on all of the displays I hook them up to, but the OSI is not quite the same in that respect.

I think I'll plan to mostly use it with the 10" display I have for simplicity's sake (It's small, portable & gives a good image for this machine in particular.

I'll see what I can do about adjusting with your guidance and will post the results back here.

I was aware that Klyball also did a data separator board, so I will look into that too, I think the end goal will be a Gotek, so as far as I can see it'll be needed.

Appreciate all the work on the system disks, though when I'll be able to use it depends entirely when I can finish the 610 and floppy interface.
ronin47
Posts: 135
Joined: Thu Dec 14, 2023 2:17 pm

Re: 600D ROM support for both 24- and 48-character modes

Post by ronin47 »

@bxdanny

I've managed to tweak the ROM so that I now get the monitor prompt appearing correctly on screen for 48 column mode.

It's still a bit far over in 24 column mode, but it doesn't bother me since it moved over to the right, so isn't off the screen.

In 48 column mode it's bang on the money at the top left with a slight indent, same as BASIC, so all good.

Here it is before:


IMG20240415150155.jpg
IMG20240415150155.jpg (4.4 MiB) Viewed 217 times

And here it is after:

IMG20240415150124.jpg
IMG20240415150124.jpg (3.4 MiB) Viewed 217 times

For my specific Monitor ROM, my values are as follows:

$FFE0=49
$FFE1=2F
$FFE2=00

$FED6=C9
$FEC4=CD
$FEC7=CE

Since I'll be sticking with this display going forwards, I'll leave those settings as they are and I at least know where to change them if I do something different in the future.

With respect to the colour board you described, I have a C128 and that uses RGBI so I might be able to re-use the cable for that which drives a SCART output very nicely, though knowing CBM they probably did something funky with the RGBI port...

Also, do you think a simple board as you've described would be relatively easy to build? I'd certainly be prepared to attempt to build one and see how it goes.
Steve Gray
Posts: 325
Joined: Mon Oct 06, 2008 1:54 pm
Location: Markham, Ontario, Canada
Contact:

Re: 600D ROM support for both 24- and 48-character modes

Post by Steve Gray »

Yeah, my 600D colour board use the "RGBI" or CGA standard colour scheme, not the composite colours that OSI used.

And I also have a 600D compatible CEGMON (open source) with 24/48 column support as well, but it replaces the DISK support. If you have a ROM expansion then you can get both. https://github.com/sjgray/OSI-monitor-roms

Steve
C4P working, C1P working. 600D Replica working, C4P+D&N floppy not working. 505 board, 610 board, Mittendorf board, TOSIE hacker board need testing, PicoDOS disk untested.
bxdanny
Posts: 338
Joined: Thu Apr 16, 2015 2:27 pm
Location: Bronx, NY USA

Re: 600D ROM support for both 24- and 48-character modes

Post by bxdanny »

The "board" I was proposing for color support would consist of nothing but a single ROM (EPROM) chip, and maybe a bypass cap across the power rails. You would need to pick up +5V and the separate horizontal and vertical sync pulses from somewhere other than J75. And if you saw annoying flashes on screen when writing to the color RAM, you might need to move the input to U56, pin 2, to +5V, as shown in the upper-right corner of sheet 4 (of 5) of the 600D schematics. The output from the ROM and the two sync signals should be compatible with that from the C128. But I'm thinking that the margins of the color display will probably not match those of the 10" LCD that you like.

I will try to work up a diagram of just what would connect where, and a binary file for programming the EPROM. I feel about 80% confident this would work, but I'd appreciate having someone who has more experience with such things weigh in with their opinion. Mark, Klyball, Thomas?
No current OSI hardware
Former programmer for Dwo Quong Fok Lok Sow and Orion Software Associates
Former owner of C1P MF (original version) and C2-8P DF (502-based)
ronin47
Posts: 135
Joined: Thu Dec 14, 2023 2:17 pm

Re: 600D ROM support for both 24- and 48-character modes

Post by ronin47 »

bxdanny wrote: Mon Apr 15, 2024 7:23 pm The "board" I was proposing for color support would consist of nothing but a single ROM (EPROM) chip, and maybe a bypass cap across the power rails. You would need to pick up +5V and the separate horizontal and vertical sync pulses from somewhere other than J75. And if you saw annoying flashes on screen when writing to the color RAM, you might need to move the input to U56, pin 2, to +5V, as shown in the upper-right corner of sheet 4 (of 5) of the 600D schematics. The output from the ROM and the two sync signals should be compatible with that from the C128. But I'm thinking that the margins of the color display will probably not match those of the 10" LCD that you like.

I will try to work up a diagram of just what would connect where, and a binary file for programming the EPROM. I feel about 80% confident this would work, but I'd appreciate having someone who has more experience with such things weigh in with their opinion. Mark, Klyball, Thomas?
Well I'm game to give it a test, just let me know what I need :)
Steve Gray
Posts: 325
Joined: Mon Oct 06, 2008 1:54 pm
Location: Markham, Ontario, Canada
Contact:

Re: 600D ROM support for both 24- and 48-character modes

Post by Steve Gray »

bxdanny wrote: Mon Apr 15, 2024 7:23 pm The "board" I was proposing for color support would consist of nothing but a single ROM (EPROM) chip, and maybe a bypass cap across the power rails. You would need to pick up +5V and the separate horizontal and vertical sync pulses from somewhere other than J75. And if you saw annoying flashes on screen when writing to the color RAM, you might need to move the input to U56, pin 2, to +5V, as shown in the upper-right corner of sheet 4 (of 5) of the 600D schematics. The output from the ROM and the two sync signals should be compatible with that from the C128. But I'm thinking that the margins of the color display will probably not match those of the 10" LCD that you like.

I will try to work up a diagram of just what would connect where, and a binary file for programming the EPROM. I feel about 80% confident this would work, but I'd appreciate having someone who has more experience with such things weigh in with their opinion. Mark, Klyball, Thomas?
I found that jumper is required that or writing to colour RAM was unreliable. Will you be changing the RGBI lines at the pixel rate? you'll need a fast EPROM ;-)

My board uses the pixel output from the shift register to toggle the RGBI lines, coming from colour ram, via a multiplexer. The second multiplexer is needed when colour mode is OFF (ie at cold-start) so that uninitialized colour ram won't give you random colours on the screen. You'll still need a new monitor ROM to initialize colour ram or include the colour_enable line into your eprom input. In any case, hope it works!

Steve
C4P working, C1P working. 600D Replica working, C4P+D&N floppy not working. 505 board, 610 board, Mittendorf board, TOSIE hacker board need testing, PicoDOS disk untested.
bxdanny
Posts: 338
Joined: Thu Apr 16, 2015 2:27 pm
Location: Bronx, NY USA

Re: 600D ROM support for both 24- and 48-character modes

Post by bxdanny »

Steve,

Yes, the monitor ROM used initializes the color RAM, and COLOR EN is included in the EPROM inputs. But you are likely right that the EPROM will simply not be fast enough. I thought there might be a catch, otherwise you may have done it this way. Yes, the idea was to switch it at the pixel rate, and I didn't really think about the speed issue. Are EPROMs that switch fast enough available? The pixel clock on the 600D in 48-character mode is 8 MHz, right?
No current OSI hardware
Former programmer for Dwo Quong Fok Lok Sow and Orion Software Associates
Former owner of C1P MF (original version) and C2-8P DF (502-based)
Post Reply