Roman Watch Code
Thursday, November 20th, 2025 | Author:

I think the idea is regular LEDS behind a mask.

Time setting isn’t in the code. It’s assumed there is a time and date function that can be called. A micro controller can do that in software using a 32.768 kHz watch crystal.

Here is the javascript, for those that don’t know how to scrape it with the browser:

<script type="text/javascript">
var tick_tock = false;
function set_line_1(num) {
var txt = 'IVIIIXII';
switch (num) { 
case 0: case 24:
txt = '<span style="color:DarkOliveGreen;">IVIIIXII</span> '; 
break; 
case 1: case 13:
txt = '<span style="color:DarkOliveGreen;">IV</span><span style="color:Chartreuse;">I</span><span style="color:DarkOliveGreen;">IIXII</span>';
break; 
case 2: case 14:
txt = '<span style="color:DarkOliveGreen;">IV</span><span style="color:Chartreuse;">II</span><span style="color:DarkOliveGreen;">IXII</span>';
break; 
case 3: case 15:
txt = '<span style="color:DarkOliveGreen;">IV</span><span style="color:Chartreuse;">III</span><span style="color:DarkOliveGreen;">XII</span>';
break; 
case 4: case 16:
txt = '<span style="color:Chartreuse;">IV</span><span style="color:DarkOliveGreen;">IIIXII</span>';
break; 
case 5: case 17:
txt = '<span style="color:DarkOliveGreen;">I</span><span style="color:Chartreuse;">V</span><span style="color:DarkOliveGreen;">IIIXII</span>';
break; 
case 6:case 18:
txt = '<span style="color:DarkOliveGreen;">I</span><span style="color:Chartreuse;">VI</span><span style="color:DarkOliveGreen;">IIXII</span>';
break; 
case 7: case 19:
txt = '<span style="color:DarkOliveGreen;">I</span><span style="color:Chartreuse;">VII</span><span style="color:DarkOliveGreen;">IXII</span>';
break; 
case 8: case 20:
txt = '<span style="color:DarkOliveGreen;">I</span><span style="color:Chartreuse;">VIII</span><span style="color:DarkOliveGreen;">XII</span>';
break; 
case 9: case 21:
txt = '<span style="color:DarkOliveGreen;">IVII</span><span style="color:Chartreuse;">IX</span><span style="color:DarkOliveGreen;">II</span>';
break; 
case 10: case 22:
txt = '<span style="color:DarkOliveGreen;">IVIII</span><span style="color:Chartreuse;">X</span><span style="color:DarkOliveGreen;">II</span>';
break; 
case 11: case 23:
txt = '<span style="color:DarkOliveGreen;">IVIII</span><span style="color:Chartreuse;">XI</span><span style="color:DarkOliveGreen;">I</span>';
break; 
case 12: 
txt = '<span style="color:DarkOliveGreen;">IVIII</span><span style="color:Chartreuse;">XII</span>';
break; 
default: 
txt = '<span style="color:Red;">IVIIIX</span>';
} 
return txt;
}
function set_line_2(num) {
var txt = 'IIIV';
switch (num) {
case 0:
txt = '<span style="color:DarkOliveGreen;">IIIV</span>'; 
break; 
case 1:
txt = '<span style="color:Chartreuse;">I</span><span style="color:DarkOliveGreen;">IIV</span>';
break; 
case 2: 
txt = '<span style="color:Chartreuse;">II</span><span style="color:DarkOliveGreen;">IV</span>';
break; 
case 3: 
txt = '<span style="color:Chartreuse;">III</span><span style="color:DarkOliveGreen;">V</span>';
break; 
case 4: 
txt = '<span style="color:DarkOliveGreen;">II</span><span style="color:Chartreuse;">IV</span>';
break; 
case 5:
txt = '<span style="color:DarkOliveGreen;">III</span><span style="color:Chartreuse;">V</span>';
break; 
default: 
txt = '<span style="color:Red;">IIIV</span>';
} 
return txt;
}
function set_line_3(num) {
var txt = 'IVIIIX';
switch (num) { 
case 0:
txt = '<span style="color:DarkOliveGreen;">IVIIIX</span>'; 
break; 
case 1:
txt = '<span style="color:DarkOliveGreen;">IV</span><span style="color:Chartreuse;">I</span><span style="color:DarkOliveGreen;">IIX</span>';
break; 
case 2: 
txt = '<span style="color:DarkOliveGreen;">IV</span><span style="color:Chartreuse;">II</span><span style="color:DarkOliveGreen;">IX</span>';
break; 
case 3: 
txt = '<span style="color:DarkOliveGreen;">IV</span><span style="color:Chartreuse;">III</span><span style="color:DarkOliveGreen;">X</span>';
break; 
case 4: 
txt = '<span style="color:Chartreuse;">IV</span><span style="color:DarkOliveGreen;">IIIX</span>';
break; 
case 5:
txt = '<span style="color:DarkOliveGreen;">I</span><span style="color:Chartreuse;">V</span><span style="color:DarkOliveGreen;">IIIX</span>';
break; 
case 6:
txt = '<span style="color:DarkOliveGreen;">I</span><span style="color:Chartreuse;">VI</span><span style="color:DarkOliveGreen;">IIX</span>';
break; 
case 7:
txt = '<span style="color:DarkOliveGreen;">I</span><span style="color:Chartreuse;">VII</span><span style="color:DarkOliveGreen;">IX</span>';
break; 
case 8:
txt = '<span style="color:DarkOliveGreen;">I</span><span style="color:Chartreuse;">VIII</span><span style="color:DarkOliveGreen;">X</span>';
break; 
case 9: 
txt = '<span style="color:DarkOliveGreen;">IVII</span><span style="color:Chartreuse;">IX</span>';
break; 
default: 
txt = '<span style="color:Red;">IVIIIX</span>';
} 
return txt;
}
function animate() {
var time = new Date();
window.setTimeout('animate()', 500);
tick_tock = ! tick_tock;
var hours_roman = 'IVIIIXII';
var tens_roman = 'IIIV';
var units_roman = 'IVIIIX';
var hours = time.getHours();
var minutes = time.getMinutes();
var seconds = time.getSeconds();
var second_units = minutes % 10;
var months = time.getMonth();
var days = time.getDate();
var d_ind = '<span style="color:DarkOliveGreen;">D</span>&nbsp;';
var prefix_txt = '<span style="color:Chartreuse;">A</span>&nbsp;';
var suffix_txt = '&nbsp;<span style="color:DarkOliveGreen;">P</span>';

if (document.getElementById("crown").indeterminate){ // do date
d_ind = '<span style="color:Chartreuse;">D</span>&nbsp;';
units_roman = d_ind + set_line_3(days % 10);
days = Math.floor(days / 10); 
tens_roman = set_line_2(days); 
hours_roman = set_line_1(months+1); 
}
else { // time

if (document.getElementById("crown").checked ==1) {
second_units = seconds % 10;
}
second_units = Math.floor(second_units);
units_roman = set_line_3 (second_units); 
units_roman = d_ind + units_roman;
var seconds_tens = 0;
if (document.getElementById("crown").checked ==1) {
seconds_tens = seconds / 10;
}
else {
seconds_tens = minutes / 10;
}
seconds_tens =Math.floor(seconds_tens);
tens_roman = set_line_2 (seconds_tens);
if (document.getElementById("crown").checked ==1) {
if (tick_tock) {
var prefix_txt = '<span style="color:DarkOliveGreen;">A</span>&nbsp;';
var suffix_txt = '&nbsp;<span style="color:Chartreuse;">P</span>';
}
else {
var prefix_txt = '<span style="color:Chartreuse;">A</span>&nbsp;';
var suffix_txt = '&nbsp;<span style="color:DarkOliveGreen;">P</span>'; 
}
}
else // normal time
{
if (hours > 12) {
prefix_txt = '<span style="color:DarkOliveGreen;">A</span>&nbsp;';
suffix_txt = '&nbsp;<span style="color:Chartreuse;">P</span>';
} 
else {
prefix_txt = '<span style="color:Chartreuse;">A</span>&nbsp;';
suffix_txt = '&nbsp;<span style="color:DarkOliveGreen;">P</span>'; 
}
}
hours_roman = set_line_1 (hours);
}
tens_roman = prefix_txt + tens_roman + suffix_txt;
document.getElementById("line_1").innerHTML = hours_roman;
document.getElementById("line_2").innerHTML= tens_roman;
document.getElementById("line_3").innerHTML= units_roman; 
}

function ts(cb) {
if (cb.readOnly) cb.checked=cb.readOnly=false;
else if (!cb.checked) cb.readOnly=cb.indeterminate=true;
}

</script>
<p><br>
Click crown (mode) <input id="crown" name="crown" value="fast" type="checkbox" onclick="ts(this)"><br>
<div style="width:200px; height:140px; background-color:DarkSlateGray;">
<br/>
<div style="text-align: center; font-size:32px; font-family: Courier New,Courier,monospace;">
<span id="line_1">hours</span><br />
<span id="line_2">tens</span><br/>
<span id="line_3">units</span><br/>
</div></div>
<script type="text/javascript">
animate();
</script>

It’s done to make it easy to translate to JAL or something else on a micro controller such as PIC or Cortex M0

A dead Dell Inspiron 7500
Wednesday, November 19th, 2025 | Author:

This laptop originally had Windows NT 4.0 with multiboot using Boot.ini to DOS, Win3.1 and Windows 98. Later the NT was updates to Windows 2000.

It kept losing time, date and BIOS settings.

Eventually it didn’t do anything.

Difficult to find any information as Dell stupidly named a much later unrelated model as an Inspiron 15 7500.

A Dell person on a Forum suggested it has no “CMOS Battery”. What they really mean is that it’s not user replaceable. It’s a tiny 2 mm by 12.5mm vertically mounted rechargeable lithium cell soldered to the motherboard. It’s just between the rear dock connector and the dual slot PCMCIA holder. You have to remove the keyboard to get to four screws that hold on the rear plastic panel. You then have to remove the PCMCIA holder and then the sound card.

You can’t use a regular coin cell directly and replacing the Panasonic VL1220 seems a bad idea. So I can either use 2 x NiMH AAA cells, if there is space, or maybe a Schottky diode and coin cell, or a larger replaceable rechargeable coin cell (used in some solar charged torches).

This may not repair it (soldering in wires with polarity correct is challenging) and reassembly is tricky.  However I’ve seen plenty of 486 and PIII desktops that had blank video when CMOS battery was flat. Some have the cell inside the clock-RAM module, but I’ve cut away case at two places and added a CR2032 holder to fix those.

I may try a repair some rainy day.

Why bother with VMs?

With Oracle Virtual box you only get file share and copy/paste with XP or later. Not with Win98 or Windows 2000. Also even for XP the Direct 3D now fails on later Virtual Box, due to security.

Secondly some DOS and Windows 3.x and Windows 9x programs read specially crafted parts of the CD directly. This was to stop copied CDs working and piracy. Doesn’t stop “real” criminals. However it means the programs don’t run in a VM or even good emulators.

Update:
I found a working 486 desktop with DOS (2G HDD?) and scrapped a PIII desktop.

Category: Computers  | Leave a Comment