It might be worth trying another USB to RS232 adapter, they are all a bit different! From playing with old bus destination controllers, the issue is not always the voltage, but also how the adapter goes about sending data. Some will queue up a few bytes to send on the PC side, then send in one USB transfer - that can cause odd delays that upset some devices. Then there's the way they receive, and again if they wait to have a few bytes before transferring things up the USB cable.
A bit more playing with my Windows XP laptop, FT232 cable and Cybermaster tonight. I used Portmon to record as BricxCC opened the port and sent two notes to the Cybermaster to play - hopefully this inserted properly:
2 0.03646972 BricxCC.exe IRP_MJ_CREATE VCP0 SUCCESS Options: Open
3 0.00000447 BricxCC.exe IOCTL_SERIAL_GET_BAUD_RATE VCP0 SUCCESS
4 0.00000307 BricxCC.exe IOCTL_SERIAL_GET_LINE_CONTROL VCP0 SUCCESS
5 0.00000251 BricxCC.exe IOCTL_SERIAL_GET_CHARS VCP0 SUCCESS
6 0.00000279 BricxCC.exe IOCTL_SERIAL_GET_HANDFLOW VCP0 SUCCESS
7 0.00000279 BricxCC.exe IOCTL_SERIAL_GET_BAUD_RATE VCP0 SUCCESS
8 0.00000251 BricxCC.exe IOCTL_SERIAL_GET_LINE_CONTROL VCP0 SUCCESS
9 0.00000251 BricxCC.exe IOCTL_SERIAL_GET_CHARS VCP0 SUCCESS
10 0.00000223 BricxCC.exe IOCTL_SERIAL_GET_HANDFLOW VCP0 SUCCESS
11 0.00176670 BricxCC.exe IOCTL_SERIAL_SET_BAUD_RATE VCP0 SUCCESS Rate: 2400
12 0.00198237 BricxCC.exe IOCTL_SERIAL_CLR_RTS VCP0 SUCCESS
13 0.00197399 BricxCC.exe IOCTL_SERIAL_SET_DTR VCP0 SUCCESS
14 0.00198377 BricxCC.exe IOCTL_SERIAL_SET_LINE_CONTROL VCP0 SUCCESS StopBits: 1 Parity: NONE WordLength: 8
15 0.00000307 BricxCC.exe IOCTL_SERIAL_SET_CHAR VCP0 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:1 XOFF:2
16 0.00193907 BricxCC.exe IOCTL_SERIAL_SET_HANDFLOW VCP0 SUCCESS Shake:1 Replace:0 XonLimit:100 XoffLimit:100
17 0.00000251 BricxCC.exe IOCTL_SERIAL_GET_BAUD_RATE VCP0 SUCCESS
18 0.00000223 BricxCC.exe IOCTL_SERIAL_GET_LINE_CONTROL VCP0 SUCCESS
19 0.00000223 BricxCC.exe IOCTL_SERIAL_GET_CHARS VCP0 SUCCESS
20 0.00000279 BricxCC.exe IOCTL_SERIAL_GET_HANDFLOW VCP0 SUCCESS
21 0.00000251 BricxCC.exe IOCTL_SERIAL_GET_BAUD_RATE VCP0 SUCCESS
22 0.00000223 BricxCC.exe IOCTL_SERIAL_GET_LINE_CONTROL VCP0 SUCCESS
23 0.00000251 BricxCC.exe IOCTL_SERIAL_GET_CHARS VCP0 SUCCESS
24 0.00000279 BricxCC.exe IOCTL_SERIAL_GET_HANDFLOW VCP0 SUCCESS
25 0.00180917 BricxCC.exe IOCTL_SERIAL_SET_BAUD_RATE VCP0 SUCCESS Rate: 2400
26 0.00197539 BricxCC.exe IOCTL_SERIAL_CLR_RTS VCP0 SUCCESS
27 0.00197120 BricxCC.exe IOCTL_SERIAL_SET_DTR VCP0 SUCCESS
28 0.00197288 BricxCC.exe IOCTL_SERIAL_SET_LINE_CONTROL VCP0 SUCCESS StopBits: 1 Parity: ODD WordLength: 8
29 0.00000279 BricxCC.exe IOCTL_SERIAL_SET_CHAR VCP0 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:1 XOFF:2
30 0.00196282 BricxCC.exe IOCTL_SERIAL_SET_HANDFLOW VCP0 SUCCESS Shake:1 Replace:0 XonLimit:100 XoffLimit:100
31 0.00197483 BricxCC.exe IOCTL_SERIAL_SET_DTR VCP0 SUCCESS
32 0.00199020 BricxCC.exe IOCTL_SERIAL_CLR_RTS VCP0 SUCCESS
33 0.00000559 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:-1 RM:0 RC:0 WM:0 WC:0
34 0.00000670 BricxCC.exe IRP_MJ_READ VCP0 SUCCESS Length 0:
35 0.00098923 BricxCC.exe IRP_MJ_WRITE VCP0 SUCCESS Length 8: FE 00 00 FF 10 EF 10 EF
36 0.00000391 BricxCC.exe IRP_MJ_FLUSH_BUFFERS VCP0 SUCCESS
37 0.00000307 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:0 RM:0 RC:400 WM:0 WC:0
38 0.40016566 BricxCC.exe IRP_MJ_READ VCP0 TIMEOUT Length 5: FF EF 10 EF 10
39 0.00000615 BricxCC.exe IRP_MJ_CLEANUP VCP0 SUCCESS
40 0.10638335 BricxCC.exe IRP_MJ_CLOSE VCP0 SUCCESS
41 0.03720277 BricxCC.exe IRP_MJ_CREATE VCP0 SUCCESS Options: Open
42 0.00000475 BricxCC.exe IOCTL_SERIAL_GET_BAUD_RATE VCP0 SUCCESS
43 0.00000307 BricxCC.exe IOCTL_SERIAL_GET_LINE_CONTROL VCP0 SUCCESS
44 0.00000279 BricxCC.exe IOCTL_SERIAL_GET_CHARS VCP0 SUCCESS
45 0.00000223 BricxCC.exe IOCTL_SERIAL_GET_HANDFLOW VCP0 SUCCESS
46 0.00000251 BricxCC.exe IOCTL_SERIAL_GET_BAUD_RATE VCP0 SUCCESS
47 0.00000251 BricxCC.exe IOCTL_SERIAL_GET_LINE_CONTROL VCP0 SUCCESS
48 0.00000251 BricxCC.exe IOCTL_SERIAL_GET_CHARS VCP0 SUCCESS
49 0.00000251 BricxCC.exe IOCTL_SERIAL_GET_HANDFLOW VCP0 SUCCESS
50 0.00179492 BricxCC.exe IOCTL_SERIAL_SET_BAUD_RATE VCP0 SUCCESS Rate: 2400
51 0.00197539 BricxCC.exe IOCTL_SERIAL_CLR_RTS VCP0 SUCCESS
52 0.00197539 BricxCC.exe IOCTL_SERIAL_SET_DTR VCP0 SUCCESS
53 0.00195891 BricxCC.exe IOCTL_SERIAL_SET_LINE_CONTROL VCP0 SUCCESS StopBits: 1 Parity: NONE WordLength: 8
54 0.00000307 BricxCC.exe IOCTL_SERIAL_SET_CHAR VCP0 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:1 XOFF:2
55 0.00196142 BricxCC.exe IOCTL_SERIAL_SET_HANDFLOW VCP0 SUCCESS Shake:1 Replace:0 XonLimit:100 XoffLimit:100
56 0.00000251 BricxCC.exe IOCTL_SERIAL_GET_BAUD_RATE VCP0 SUCCESS
57 0.00000279 BricxCC.exe IOCTL_SERIAL_GET_LINE_CONTROL VCP0 SUCCESS
58 0.00000251 BricxCC.exe IOCTL_SERIAL_GET_CHARS VCP0 SUCCESS
59 0.00000279 BricxCC.exe IOCTL_SERIAL_GET_HANDFLOW VCP0 SUCCESS
60 0.00000279 BricxCC.exe IOCTL_SERIAL_GET_BAUD_RATE VCP0 SUCCESS
61 0.00000223 BricxCC.exe IOCTL_SERIAL_GET_LINE_CONTROL VCP0 SUCCESS
62 0.00000223 BricxCC.exe IOCTL_SERIAL_GET_CHARS VCP0 SUCCESS
63 0.00000251 BricxCC.exe IOCTL_SERIAL_GET_HANDFLOW VCP0 SUCCESS
64 0.00181308 BricxCC.exe IOCTL_SERIAL_SET_BAUD_RATE VCP0 SUCCESS Rate: 2400
65 0.00197846 BricxCC.exe IOCTL_SERIAL_CLR_RTS VCP0 SUCCESS
66 0.00199104 BricxCC.exe IOCTL_SERIAL_SET_DTR VCP0 SUCCESS
67 0.00197707 BricxCC.exe IOCTL_SERIAL_SET_LINE_CONTROL VCP0 SUCCESS StopBits: 1 Parity: ODD WordLength: 8
68 0.00000279 BricxCC.exe IOCTL_SERIAL_SET_CHAR VCP0 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:1 XOFF:2
69 0.00195863 BricxCC.exe IOCTL_SERIAL_SET_HANDFLOW VCP0 SUCCESS Shake:1 Replace:0 XonLimit:100 XoffLimit:100
70 0.00196869 BricxCC.exe IOCTL_SERIAL_SET_DTR VCP0 SUCCESS
71 0.00196338 BricxCC.exe IOCTL_SERIAL_CLR_RTS VCP0 SUCCESS
72 0.00000335 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:-1 RM:0 RC:0 WM:0 WC:0
73 0.00000559 BricxCC.exe IRP_MJ_READ VCP0 SUCCESS Length 0:
74 0.00092889 BricxCC.exe IRP_MJ_WRITE VCP0 SUCCESS Length 8: FE 00 00 FF 18 E7 18 E7
75 0.00000307 BricxCC.exe IRP_MJ_FLUSH_BUFFERS VCP0 SUCCESS
76 0.00000279 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:0 RM:0 RC:400 WM:0 WC:0
77 0.39955637 BricxCC.exe IRP_MJ_READ VCP0 TIMEOUT Length 5: FF E7 18 E7 18
78 0.00000503 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:-1 RM:0 RC:0 WM:0 WC:0
79 0.00000531 BricxCC.exe IRP_MJ_READ VCP0 SUCCESS Length 0:
80 0.00025841 BricxCC.exe IRP_MJ_WRITE VCP0 SUCCESS Length 60: FE 00 00 FF A5 5A 44 BB 6F 90 20 DF 79 86 6F 90 75 8A 20 DF 62
81 0.00000335 BricxCC.exe IRP_MJ_FLUSH_BUFFERS VCP0 SUCCESS
82 0.00000251 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:0 RM:0 RC:400 WM:0 WC:0
83 0.39992904 BricxCC.exe IRP_MJ_READ VCP0 TIMEOUT Length 22: FF 5A A5 4A B5 75 8A 73 8C 74 8B 20 DF 61 9E 20 DF 62 9D 69 96
84 0.00000531 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:0 RM:0 RC:200 WM:0 WC:0
85 0.20010085 BricxCC.exe IRP_MJ_READ VCP0 TIMEOUT Length 33: 8B 20 DF 6F 90 66 99 66 99 20 DF 74 8B 68 97 65 9A 20 DF 62 9D
86 0.00000559 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:-1 RM:0 RC:0 WM:0 WC:0
87 0.00000559 BricxCC.exe IRP_MJ_READ VCP0 SUCCESS Length 0:
88 0.00060538 BricxCC.exe IRP_MJ_WRITE VCP0 SUCCESS Length 8: FE 00 00 FF 10 EF 10 EF
89 0.00000307 BricxCC.exe IRP_MJ_FLUSH_BUFFERS VCP0 SUCCESS
90 0.00000279 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:0 RM:0 RC:400 WM:0 WC:0
91 0.39954715 BricxCC.exe IRP_MJ_READ VCP0 TIMEOUT Length 5: FF EF 10 EF 10
92 0.00000503 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:-1 RM:0 RC:0 WM:0 WC:0
93 0.00000559 BricxCC.exe IRP_MJ_READ VCP0 SUCCESS Length 0:
94 0.00089592 BricxCC.exe IRP_MJ_WRITE VCP0 SUCCESS Length 8: FE 00 00 FF 18 E7 18 E7
95 0.00000475 BricxCC.exe IRP_MJ_FLUSH_BUFFERS VCP0 SUCCESS
96 0.00000363 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:0 RM:0 RC:400 WM:0 WC:0
97 0.39987987 BricxCC.exe IRP_MJ_READ VCP0 TIMEOUT Length 5: FF E7 18 E7 18
98 0.00000559 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:-1 RM:0 RC:0 WM:0 WC:0
99 0.00000587 BricxCC.exe IRP_MJ_READ VCP0 SUCCESS Length 0:
100 0.00080541 BricxCC.exe IRP_MJ_WRITE VCP0 SUCCESS Length 8: FE 00 00 FF 10 EF 10 EF
101 0.00000335 BricxCC.exe IRP_MJ_FLUSH_BUFFERS VCP0 SUCCESS
102 0.00000335 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:0 RM:0 RC:400 WM:0 WC:0
103 0.40025506 BricxCC.exe IRP_MJ_READ VCP0 TIMEOUT Length 5: FF EF 10 EF 10
104 0.00000587 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:-1 RM:0 RC:0 WM:0 WC:0
105 0.00000615 BricxCC.exe IRP_MJ_READ VCP0 SUCCESS Length 0:
106 0.00104008 BricxCC.exe IRP_MJ_WRITE VCP0 SUCCESS Length 14: FE 00 00 FF 23 DC 88 77 01 FE 28 D7 D4 2B
107 0.00000307 BricxCC.exe IRP_MJ_FLUSH_BUFFERS VCP0 SUCCESS
108 0.00000307 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:0 RM:0 RC:400 WM:0 WC:0
109 0.39988043 BricxCC.exe IRP_MJ_READ VCP0 TIMEOUT Length 5: FF DC 23 DC 23
110 0.00000587 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:-1 RM:0 RC:0 WM:0 WC:0
111 0.00000643 BricxCC.exe IRP_MJ_READ VCP0 SUCCESS Length 0:
112 0.00012851 BricxCC.exe IRP_MJ_WRITE VCP0 SUCCESS Length 14: FE 00 00 FF 2B D4 B8 47 01 FE 28 D7 0C F3
113 0.00000363 BricxCC.exe IRP_MJ_FLUSH_BUFFERS VCP0 SUCCESS
114 0.00000335 BricxCC.exe IOCTL_SERIAL_SET_TIMEOUTS VCP0 SUCCESS RI:0 RM:0 RC:400 WM:0 WC:0
115 0.39975081 BricxCC.exe IRP_MJ_READ VCP0 TIMEOUT Length 5: FF D4 2B D4 2B
I also downloaded talkrcx from here and had a play: https://web.archive.org/web/20010415171811/http://www.phesk.demon.co.uk/lego/talkqbas.htm. It took a bit to hack it to run with FreeBASIC and send the Cybermaster header, but it did get some noises out of the Cybermaster.
Sending the sound opcodes from the RCX2 LASM byte codes in the RCX2 SDK worked well. Opcode 51/59 is the PlaySystemSound instruction and takes a parameter between 0 and 5, corresponding to RCX tones 1 to 6. The Cybermaster has the same tones.
Sending FE 00 00 FF 59 A6 05 FA 5E A1 got sound 6 from the Cybermaster.
Playing a certain tone also worked using PlayTone, which is 23/2B followed by the low byte for frequency, the high byte for frequency, and a byte for duration. An example: FE 00 00 FF 23 DC 88 77 01 FE 28 D7 D4 2B
A couple of thoughts on your code. One is that the RCX and seemingly the Cybermaster needs the the 0x08 bit of the command to toggle between instructions - it won't follow two instructions in a row that have the same value in the bit representing 8. So sending 23 then 51 would not work, but sending 23 then 59 would. After 59, the next instruction could be either 51 or 23, followed by 59 or 2B. Hopefully not a tricky change to make. Also, from memory, UnlockFirmware is used at the end of the firmware download on an RCX to boot the firmware - not sure if the Cybermaster has that one? Sound commands are always my favourite for testing because they are generally not too complicated, and you can tell quickly if it worked.
Sometimes BricxCC won't connect properly for me either, turning the Cybermaster off and on again helps eventually.
All the best with finding a well behaved USB to serial cable! Always a challenge getting these things to talk to modern hardware, but cracking that is part of the fun.