NSM CDR 100 SC Jukebox Hacker's Guide

This may be useful to you if you have a jukebox like this or similar. It looks like NSM is still making CD jukeboxes that look pretty much the same, they just keep changing the drive inside. I'd do that to mine if I had the guts to rip the old one out.

Specifications

My CDR 100 SC has the following specifications:

bullet100 CD changer
bullettransparent lockable front loading access
bulletvertical lift mechanism between two 50-disc racks
bulletPhilips "LMS CM214 E.13" SCSI CD ROM (maybe CD recordable?)
bulletserial (9 pin) in/out interface for the lift mechanism control
bulletruns at 9600baud, 8 data bits, 1 start, 1 stop, no parity (this may be changeable with the dip switch)
bullethas an RS232 ID of 0-9 settable on a rotary switch
bulletSCSI I in and out ("big bulky" connector type)
bullethas a SCSI ID of 0-9 settable on a rotary switch
bulletRCA left and right speaker jacks. See below if you want to access the drive's headphone jack instead.
bulletButtons and Lights:
bulletrear panel power switch with reversable plug for 110V or 220V.
bullettransparent lockable front loading access (push lock in to open door)
bulletpress release lever towards center of box to swing 50 disc rack forward, then press release lever towards edge of box to remove rack.
bullettwo front panel led's: amber = power, green = ready or flashing for busy
bulletmicroswitch for door open detect located in front left corner (this is not the same as the button sticking out the front).
bulleton the CD drive (must remove left tower and possibly plastic cover over power transformer to get at):
bulletheadphone jack
bullettwo buttons for volume, rear is quieter, front is louder. This may only affect headphone jack (rear panel jack not tried).
bulletblinking red LED inside top panel (visible through door release), unknown function. (I haven't taken the top apart yet.)
bulletManufactured in 1993 (best guess from all the stickers and part datecodes)
bulletVisible partnumbers:
bulletFront panel marking: CDR 100 SC
bulletRear panel label: CDR 100SC, Made in Germany, NSM Aktiengesellscshaft, 6530 Bingen am Rhein.
[Aktiensesellscshaft is corporation in German]
bulletPart number on rear of case 176795
bulletNSM INTERFACE 216051/856 interface board
bulletNSM LP LIFTADAPTER SACHNR. 206904/245
bulletmore to come when I open the top up...
bulletCD drive motherboard SCI 2425

Commands

The serial port controls the loading mechanism, and the drive is controlled through the SCSI port.

Serial Port Commands

The sequence is to send an address byte, followed by a command block, then wait for an acknowledge block.

The address byte has the following structure:

7 6 5 4 3 2 1 0
1 b address

The bit b, is 0 to enable acknowledge, or 1 to buffer acknowledge.
address selects which RS232 ID to talk to (set by dial on device).

The command block has the following structure:

Byte Length Contents Meaning
0 1 STX Start of Text 02 hex
1 2 00..99 number of bytes that follow, excluding ETX (ascii)
3 2 00..99 Command code (ascii)
5 n Data Command arguments (ascii)
6+n 1 ETX End of Text 03 hex

The acknowledge block has the following structure:

Byte Length Contents Meaning
0 1 STX Start of Text 02 hex
1 2 00..99 number of bytes that follow, excluding ETX (ascii)
3 2 00..99 Command code (ascii)
5 2 00..99 Return code (ascii), 00=OK
7 n Data Acknowledge arguments (ascii)
8+n 1 ETX End of Text 03 hex

List of available commands:

Code Argument Function Response
14 . Request ID-Code 01RO020104NSM
nnROttffffNSM
nn=RS232 ID number
tt=Device type
ffff=Firmware version
19 . Request Version 010401
22 A##
+##
-##
Loac Disc
A is absolute slot
+/- is relative slot
.
23 . Stop Disc .
24 . Return Disc .
25 . Request Status DRC01
sso##
ss: DR=Disc Ready,
. LN=No Disc Loaded,
. LE=Loader Error
o: O=door open,
. C=door closed
Undocumented Commands
20 A0p

 

Read queue entry
p=position requested (0-3)
aa0p#vvvvvttt
aa=# of entries in queue (0-20)
p=position (0-2) 0=(most recent)
#=unknown digit
vvvvv=data stored in cmd 27
ttt=time stored (unknown units)
27 r#####
000000
1000##
2#####
assorted queue commands
0: clear queue
1: hex to decimal convert
2: insert item to queue
.
.
two digit decimal value
.
29 A## Read something (constant?) 00000F

Note on the undocumented commands:

 

I don't know what these commands do, or if these are all. I found them by writing random commands, and checking for ones that returned something other than 01 (Unknown Command). I didn't search much above 32. I then played with the argument until it returned something other than 03 (Error in Command Format). Then I just tried different combinations of discs, commands, status reads, etc. and tried to guess what they do.

There seems to be a queue of hex values that can be stored with the 27.2 command and read using the 20 command. Each store value is inserted into the 0 position, with the old value being shifted down to the 1 and then 2 positions. Only the first three positions can be read. The number of 'entries in the queue' number keeps incrementing up to 20, at which point it sticks. The unknown digit has been seen to have different values at different times but is consistant over repeated reads, I don't know what determines that. The queue can be cleared with the 27.0 command. The nice thing is that this queue is stored in non-volatile memory and will survive a power cycle. One hypothesis that hasn't been checked is that this has something to do with the acknowledge buffered bit in the address byte.

The 27.1 command seems to be a simple hex to decimal conversion routine taking two hex digits and returning the lowest two decimal digits (numbers above 100 are chopped off). It is quite likely that this is doing something else, and the side effect is just a hex to decimal conversion.

The 29 command seems to always return a constant 00000F. Maybe this means something, maybe not.

 

SCSI Interface

I haven't played as much with the SCSI commands yet. Here's what I know about SCSI driver compatability and problems.

Under Win98 (retail), changing discs usually makes the drive disappear until you go into control panel and refresh the SCSI chain (select the controller and click refresh). This doesn't happen under Win98 with service pack 1 on a different machine. This may not be OS version related as much as driver or adapter version.

Under Win98, the CD Audio functions don't work, you get an error message.

Win98 exit to DOS allows running the command line interface that came with the drive called jbcmd.exe. Audio CDs can be played, I was able to use CDPLAY, a DOS TSR made by Future Domain. Other programs would probably work. The guy at my local computer store had it working under Win 3.11 with a GUI audio program.

FreeBSD 2.0.5 works just fine for data discs, but cannot play audio discs:

ILLEGAL REQUEST asc:24,0 Invalid Field in CDB

It is necessary to unmount the disc and then mount it again after changing discs.

 

Software and Reference Material

bulletjbcmd.zip - DOS command line interface shipped with box
bulletjbcmd.c - C Source code for a much friendlier version of the command line interface. Written for FreeBSD, but probably works on Linux, easy to port to other platforms. Or, the source code might just be a useful command reference. Makefile
bullet command.exe - Win95/98 NSM Jukebox Commander user interface shipped with box.
bullet cdr100e.pdf - English version of the manual available from NSM's website, seems to cover a bunch of versions of the box, but not exactly mine. Useful command reference.
bullet cdr100.txt - A 1 pager describing how to set up the system under Win95/98.
bulletxa_e.pdf - brochure for NSM's current generation CDR 100 jukeboxes.

In progress... Getting the audio to work under FreeBSD; A CD manager program that will pull in a disc with a particular file or song, and then auto mount it/play it with a nice continuous audio jukebox mode.

 

CLICK TO GO BACK TO OUR MAIN PAGE