• Please review our updated Terms and Rules here

Cromemco dazzler replica project

So experiment time
Put some messages (to the serial terminal) in the start of the GDEMO to track its progress and they all appear and repeat suggesting the program isn't crashing.
Put a halt in just after it calls PAGE to clear the screen.
It turns the Dazzler on but the screen just flickers with random lines at the bottom half of the screen.
I used a different page (which I believe I load HL (in this case 14H for a page of 2800)) and it still just flickers, even after the halt instruction. Reset and set 0E to show page 2800H and its mostly random apart from a black square

Changed the call to INITG to 20H (which I believe should give 4000H which worked with KSCOPE) and exactly the same.
 
That is 20H in H and 00H in L (2000H in HL)?

If GDEMO starts at 0100H in memory, where does it finish (allowing for the linked Dazzler library)?

L80 should be able to give you a map file identifying where things start and finish.

EDIT: /M option.

If the GDEMO program and library are overlaying the Dazzler buffer, everything will get horribly corrupt very quickly!

EDIT1: The GDEMO executable that I have appears to exist from 100H to B80H - so this is not your problem.

EDIT2: I just followed the logic through INITG for HL set to 2000H and it seems to work OK (setting the Dazzler buffer to 2000H).

Dave
 
Last edited:
Probably not understanding the code

LD HL,0 ;TELLS INITG TO LOCATE PICTURE
;BUFFER AT TOP OF CDOS USER AREA
CALL INITG ;INITIALIZE THE GRAPHICS PACKAGE

I was assuming (!) HL set the dazzler register but reading again, its not that simple. So if I want to force it to locate the buffer at say 4000H then HL to 2000H ?

I will try that
 
Last edited:
Setting HL to 0 and then calling INITG causes the graphics library to allocate the Dazzler buffer where it likes (in high memory) based on some Harry Potter logic that works for CDOS and may (or may not) work for CP/M or other operating systems.

Setting HL to a non-zero value before calling INITG causes the graphics library to assume you know what you are doing and you are taking responsibility for allocating the memory buffer for the Dazzler.

Setting HL to 4000H before calling INITG sets the buffer address to 4000H. The Graphics library works out the value for the Dazzler and turns the Dazzler ON. However, the graphics library does some basic checks that the buffer is 512-byte aligned and does modify the buffer address you supply in HL if this is not correct. So (if you get the initial value for the buffer not aligned correctly) you could be in for a shock.

I made an error in my post above that I have now corrected.

Dave
 
Last edited:
Result

Recompiled with 4000H as the buffer and GDEMO is now largely running. I need to amend the keyboard reading ports as it wont stop and the word CROMEMCO is corrupt and the word COLOR (apart from being spelt wrong) only has the C so some of the colour values aren't working

but apart from that, GDEMO is now running. As you say, the voodoo that GINIT uses when you set it to 0 obviously doesn't work with this version of CP/M

edit, fixed the CROMEMCO corruption, missed out the DC

Notably all the words that only print the first character are the ones on multiple lines, the routine must be seeing the high byte and moving on ? in CDOS, when compiled as originally speced, does it only set the high byte on the last one in the row ?

Quick edit to make all but the last character a DB and now that bit works too.
 
Last edited:
If you have split a multiple part DM statement up into multiple separate statements, you should only ask the system to add the 7th bit to the LAST part. The original DM statement just added the 7th bit to the very LAST character of the user line.

I should be able to modify the INITG voodoo in my graphics source code to make it work with CP/M. The existing code assumes the size of the code/data area before the entry point into the BDOS contained in the JUMP at location 5. INITG reads the byte at location 7 (the high byte of the BDOS entry point) and works it out from that.

Dave
 
One final bit that isn't working. The Large and small characters text does all the text in large. The strings are stored

STRIN6: DB WHITE
DB 'LARGE'
DB MAXR
STRIN7: DC 'AND SMALL'
DB R128
STRIN8: DC 'CHARACTERS'

So of course the processor stops at the E and L as they will have bit 7 set but if I alter it to

STRIN6: DB WHITE
DB 'LARGE'
DC MAXR
STRIN7: DB 'AND SMALL'
DC R128
STRIN8: DC 'CHARACTERS'

It complains

B>m80 test=test/z
A 044D' 41 58 DC MAXR
A 0458' 31 32 DC R128

So obviously set R128 and MAXR to have bit 7 set so MAXR = 128 and R128 = 130, just need to work out how to OR them in the compiler as it complained about

STRIN6: DB WHITE
DB 'LARGE'
DB MAXR OR 80H
 
Last edited:
MAXR and R128 are bytes, so you cannot use DC with them. DC assumes a string is provided.

I would have thought DB MAXR OR 80h should work - providing you put some whitespace before the DB...

Dave
 
Yes, I was expecting DC not to work

I will give it another go with OR as I thought it should work, probably got the formatting wrong
 
I have a question to Rev. D board:
where can I order the PCB's and is there a BOM with updated components as well (I think some parts are not easy to get nowadays)?

Thank you very much!
 
I have a question to Rev. D board:
where can I order the PCB's and is there a BOM with updated components as well (I think some parts are not easy to get nowadays)?

Thank you very much!

JCL are who made my set. https://jlcpcb.com/

They are cheap and accurate.

There is a BOM but its for the rev C. Easiest is to look at the board images and note down all the IC's and other components as they are all annotated.

The shift register use https://www.ebay.com/itm/225089482040? which are good value

The rest are standard 74 logic but many are 74XX rather than 74LSXX and getting harder to get

What machine do you want to use it with ?
 
JCL are who made my set. https://jlcpcb.com/

They are cheap and accurate.

There is a BOM but its for the rev C. Easiest is to look at the board images and note down all the IC's and other components as they are all annotated.

The shift register use https://www.ebay.com/itm/225089482040? which are good value

The rest are standard 74 logic but many are 74XX rather than 74LSXX and getting harder to get

What machine do you want to use it with ?
Thank you, but where can I find the Gerber and schematic files to be able to produce the PCB? Is there a project page?
 
I would also suggest reading this thread from start to finish. There is a lot of information within even if seems a bit of a slog, its actually quite good.
 
I'd also recommend to consult the README file included with the rev D gerbers, just in case you want to create a result as close to the original as possible. The gerbers contain only the information which is required for proper functionality. For a good match with the Cromemco original you also need to give additional requirements to the manufacturer.
 
Editable & copyable Rev D BOM

NumberDeviceNumberValueNumberValue
13417101/4 carbon140.1ufDisc13.579MHzSeries Resonant
27805391/4 carbon410uf50V Elec5014 Pin ICSockets
374001501/4 carbon1180pf2516 Pin ICSockets
174022201/4 carbon3560pf2HeatsinkTO220
474042701/4 carbon2220pfTo suitRG174/UCoax
274053301/4 carbon30.001uf216 pin DIL header4404A-16
574084701/4 carbon156pf
274108201/4 carbon120.1ufDisc
274201.5K1/4 carbon1330pf
1743010K1/4 carbon17-25pfvariable
2743215K1/4 carbon
3747318K1/4 carbon
474741K1/4 carbon222uH
2747530K1/4 carbon
1748336K1/4 carbon
3749362K1/4 carbon
1749575K1/4 carbon
9.1K1/4 carbon
174151500variable
474157
174161
474175
174367
474LS04
174LS08
274LS10
174LS30
174LS32
174LS74
12N3906
22N3904
11N5242
11N914

 
Back
Top