Difference between revisions of "Project:Infotec displays"

From London Hackspace Wiki
Jump to navigation Jump to search
m (removed nortHACKton link (no web.archive.org archive link available - just kill it off))
 
(67 intermediate revisions by 9 users not shown)
Line 1: Line 1:
Donated by Nottinghack, who have a [http://wiki.nottinghack.org.uk/wiki/BigClocks project page] with pictures.Further information [http://northackton.stdin.co.uk/wiki/BigClock posted by NortHACKton].
+
Donated by Nottinghack, who have a [http://wiki.nottinghack.org.uk/wiki/BigClocks project page] with pictures. Further information posted by [http://leedshackspace.org.uk/projects-2/brunell-station-clocks/ Leeds].
 +
 
 +
== Status ==
 +
 
 +
The screen on one side has been damaged and a roughly 10x10 pixel area is dead.
 +
 
 +
Works fine apart from that.
 +
 
 +
== Hardware ==
 +
 
 +
[http://www.flickr.com/photos/fishies_go_pook/sets/72157627801508165/with/6258987178/ Photos] by Akki
 +
 
 +
The serial port is exposed as a header on some master boards, in the comms ribbon cables, and as DE-9 connectors on the case board (where the power is split between the two units).
 +
 
 +
[[File:Infotec_COM0_pinout.jpg|300px]]  [[File:Infotec_COM0_IDC_pinout.jpg|320px]]
 +
 
 +
The header, with the register pin to the left, left-to-right, top-to-bottom is RX, TX, GND, GND.
 +
 
 +
== Notes ==
 +
 
 +
Mark has done some work on the dumped rom, including extracting the fonts at Tom's [http://pastebin.com/nUY9CKE2 suggestion]:
 +
 
 +
A little more on possible protocols here: http://www.infotec.co.uk/index.php?page=communication
 +
 
 +
https://github.com/marksteward/Infotec/
 +
 
 +
The serial port is probably accessible using RS422 via the junction board that distributes power and signal to both clocks in the outer case. It is also available on the clock control board at RS232 levels (the signals are combined using combinational logic, rather than chosen with a switch). This is the small white 3-pin connector between the coin cell and the 2-pin connector for the front panel LED. Pins are ground, txd, rxd, counting from the edge of the motherboard towards the daughterboard. Protocol is 9600 8,n,1
 +
 
 +
== Protocols ==
 +
The command
 +
 
 +
>PR#0#00#00,07,08#25,05,2012,2#3D<
 +
 
 +
sets the time to 00:07:08 (and, presumably, the calendar to 25/5/12 though we don't know how to display that at the moment). The tailing 3D is a checksum - the 2-digit hex representation of the XOR of all the preceding characters, starting with the '>'.
 +
 
 +
The clock seems to initially set itself up for 19200 baud serial port but later in the initialisation changes it to 9600.
 +
 
 +
Turning on DIP switch 8 and cycling power puts the clock in a display test mode.
 +
 
 +
Typing <>< into the clock causes it to sleep for a couple of seconds.
 +
 
 +
== Numbered commands ==
 +
 
 +
Command messages are in the format:
 +
>inflags#sendresponse#cmdnum#serialtask#inbuf#args,args,...#checksum<
 +
 
 +
'''<''', '''>''' and '''#''' in inbuf are escaped using '''^'''
 +
 
 +
All except inbuf are in hex.  As a start, try <code>0</code> for inflags, <code>1</code> for sendresponse, <code>0</code> for serialtask, and <code>cc</code> to ignore the checksum
 +
 
 +
=== 0x0 Display text ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! serialtask
 +
|
 +
* display 0, 1, etc.
 +
* flag 0x80 for all
 +
|-
 +
! buf
 +
| message
 +
|-
 +
! arg0
 +
|
 +
* 0 = left
 +
* 1 = centre
 +
|-
 +
! arg1
 +
| time to display for?
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! colspan=2 | ?
 +
|}
 +
 
 +
>0#1#0#00#asd##cc<
 +
>00#40#01##3B<
 +
 
 +
 
 +
=== 0x1 ? ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! serialtask
 +
|
 +
* display 0, 1, etc.
 +
* flag 0x80 for all
 +
|-
 +
! buf
 +
| message
 +
|-
 +
! arg0
 +
| Bitfield of 4 flags.
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! colspan=2 | ?
 +
|}
 +
 
 +
Seems to reboot for anything at the moment. There's probably something we need to prepare.
 +
 
 +
>0#1#1#00#blah#2#cc<
 +
>00#40#01##3B<
 +
 
 +
=== 0x2 Scroll text upwards ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! serialtask
 +
|
 +
* display 0, 1, etc.
 +
* flag 0x80 for all
 +
|-
 +
! buf
 +
| message
 +
|-
 +
! arg0
 +
| delay in secs
 +
|-
 +
! arg1
 +
|
 +
* 0 = don't repeat
 +
* 1 = repeat
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! colspan=2 | ?
 +
|}
 +
 
 +
Text is centred, and wrapped!
 +
 
 +
>0#1#2#00#hello#2,0#cc<
 +
>00#40#01##3B<
 +
 
 +
=== 0x3 Display wrapped text ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! serialtask
 +
|
 +
* display 0, 1, etc.
 +
* flag 0x80 for all
 +
|-
 +
! buf
 +
| message
 +
|-
 +
! arg0
 +
|
 +
* 0 = don't centre
 +
* 1 = centre
 +
|-
 +
! arg1
 +
|
 +
* ?
 +
* ?
 +
|-
 +
! arg2
 +
| delay between pages
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! colspan=2 | ?
 +
|}
 +
 
 +
>0#1#3#00#hello world#1,0,2#cc<
 +
>00#00#01##3F<
 +
 
 +
 
 +
=== 0x4 Clear screen? ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! serialtask
 +
|
 +
* display 0, 1, etc.
 +
* flag 0x80 for all
 +
|-
 +
! arg0
 +
|
 +
* ?
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! colspan=2 | ?
 +
|}
 +
 
 +
>0#1#4#00##ff#cc<
 +
>00#00#01##3F<
 +
 
 +
=== 0x5 Clear screen? ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! serialtask
 +
|
 +
* display 0, 1, etc.
 +
* flag 0x80 for all
 +
|-
 +
! arg0
 +
|
 +
* ?
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! colspan=2 | ?
 +
|}
 +
 
 +
Also set some serial flag
 +
>0#1#5#00##1#cc<
 +
>00#00#01##3F<
 +
 
 +
=== 0x6 Stop animation ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! serialtask
 +
|
 +
* display 0, 1, etc.
 +
* flag 0x80 for all
 +
|-
 +
! arg0
 +
|
 +
* ?
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! colspan=2 | ?
 +
|}
 +
 
 +
>0#1#6#00##0#cc<
 +
>00#00#01##3F<
 +
 
 +
=== 0x7 Stop animation? ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! serialtask
 +
|
 +
* display 0, 1, etc.
 +
* flag 0x80 for all
 +
|-
 +
! arg0
 +
|
 +
* 0 = ?
 +
* 1 = ?
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! colspan=2 | ?
 +
|}
 +
 
 +
>0#1#7#00##0#cc<
 +
>00#00#01##3F<
 +
 
 +
=== 0x8 Display text ? ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! serialtask
 +
|
 +
* display 0, 1, etc.
 +
* flag 0x80 for all
 +
|-
 +
! buf
 +
| message
 +
|-
 +
! arg0
 +
|
 +
* 0 = ?
 +
* 1 = ?
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! colspan=2 | ?
 +
|}
 +
 
 +
>0#1#8#00#hello world#0#cc<
 +
>00#00#01##3F<
 +
 
 +
=== 0x9 ? ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! serialtask
 +
|
 +
* display 0, 1, etc.
 +
* flag 0x80 for all
 +
|-
 +
! buf
 +
| message
 +
|-
 +
! arg0
 +
|
 +
* 0 = ?
 +
* 1 = ? (Seems to turn on the test pattern)
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! colspan=2 | ?
 +
|}
 +
 
 +
>0#1#9#00##0#cc<
 +
>00#00#01##3F<
 +
 
 +
 
 +
 
 +
=== 0xa Display by half-screens ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! serialtask
 +
|
 +
* display 0, 1, etc.
 +
* flag 0x80 for all
 +
|-
 +
! buf
 +
| message
 +
|-
 +
! arg0
 +
|
 +
* 0 = ?
 +
* 1 = ? (might crash it)
 +
|-
 +
! arg1
 +
| 0x10-0xbf = clear top half afterwards? wrapping height?
 +
|-
 +
! arg2
 +
| 1 = do top half, then bottom half
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! colspan=2 | ?
 +
|}
 +
 
 +
>0#1#a#00#hi there#0,0,0#cc<
 +
>00#00#01##3F<
 +
 
 +
=== 0x8b Set time ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! serialtask
 +
|
 +
* display 0, 1, etc.
 +
* flag 0x80 for all
 +
|-
 +
! arg0
 +
| hours
 +
|-
 +
! arg1
 +
| minutes
 +
|-
 +
! arg2
 +
| seconds
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! colspan=2 | ?
 +
|}
 +
 
 +
>0#1#8b#00##14,3B,3B#cc<
 +
?
 +
 
 +
=== 0x8c Set date ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! serialtask
 +
|
 +
* display 0, 1, etc.
 +
* flag 0x80 for all
 +
|-
 +
! arg0
 +
| day
 +
|-
 +
! arg1
 +
| month
 +
|-
 +
! arg2
 +
| year
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! colspan=2 | ?
 +
|}
 +
 
 +
>0#1#8c#00##1F,0C,0A#cc<
 +
?
 +
 
 +
=== 0xF0 Get serial task count ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! colspan=2 | ''none''
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! arg0
 +
| count
 +
|}
 +
 
 +
>0#1#F0####cc<
 +
>00#80#01#03#34<
 +
 
 +
 
 +
>0#1#F1####cc<
 +
>00#03#00##3D<
 +
 
 +
>0#1#F2####cc<
 +
>00#80#01#00#37<
 +
 
 +
=== 0xF3 Get time ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! colspan=2 | ''none''
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! arg0
 +
| hours
 +
|-
 +
! arg1
 +
| minutes
 +
|-
 +
! arg2
 +
| seconds
 +
|}
 +
 
 +
>0#1#F3####cc<
 +
>00#80#01#02,32,29#3F<
 +
 
 +
=== 0xF4 Get date ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! colspan=2 | ''none''
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! arg0
 +
| date
 +
|-
 +
! arg1
 +
| month
 +
|-
 +
! arg2
 +
| year
 +
|}
 +
 
 +
>0#1#F4####cc<
 +
>00#80#01#1E,05,0A#37<
 +
 
 +
=== 0xF5 Get version ===
 +
{| class="wikitable"
 +
! colspan=2 | Input
 +
|-
 +
! colspan=2 | ''none''
 +
|-
 +
! colspan=2 | Output
 +
|-
 +
! flags
 +
| ?
 +
|-
 +
! arg0
 +
| Major version
 +
|-
 +
! arg1
 +
| Minor version
 +
|}
 +
 
 +
>0#1#F5####cc<
 +
>00#80#01#04,07#18<
  
 
== Firmware ==
 
== Firmware ==
Line 21: Line 493:
  
 
Disassembly at http://github.com/marksteward/Infotec/.
 
Disassembly at http://github.com/marksteward/Infotec/.
 +
 +
[[Category:Projects]]
 +
[[Category:Space_Infrastructure_Projects]]

Latest revision as of 23:37, 13 December 2015

Donated by Nottinghack, who have a project page with pictures. Further information posted by Leeds.

Status

The screen on one side has been damaged and a roughly 10x10 pixel area is dead.

Works fine apart from that.

Hardware

Photos by Akki

The serial port is exposed as a header on some master boards, in the comms ribbon cables, and as DE-9 connectors on the case board (where the power is split between the two units).

Infotec COM0 pinout.jpg Infotec COM0 IDC pinout.jpg

The header, with the register pin to the left, left-to-right, top-to-bottom is RX, TX, GND, GND.

Notes

Mark has done some work on the dumped rom, including extracting the fonts at Tom's suggestion:

A little more on possible protocols here: http://www.infotec.co.uk/index.php?page=communication

https://github.com/marksteward/Infotec/

The serial port is probably accessible using RS422 via the junction board that distributes power and signal to both clocks in the outer case. It is also available on the clock control board at RS232 levels (the signals are combined using combinational logic, rather than chosen with a switch). This is the small white 3-pin connector between the coin cell and the 2-pin connector for the front panel LED. Pins are ground, txd, rxd, counting from the edge of the motherboard towards the daughterboard. Protocol is 9600 8,n,1

Protocols

The command

>PR#0#00#00,07,08#25,05,2012,2#3D<

sets the time to 00:07:08 (and, presumably, the calendar to 25/5/12 though we don't know how to display that at the moment). The tailing 3D is a checksum - the 2-digit hex representation of the XOR of all the preceding characters, starting with the '>'.

The clock seems to initially set itself up for 19200 baud serial port but later in the initialisation changes it to 9600.

Turning on DIP switch 8 and cycling power puts the clock in a display test mode.

Typing <>< into the clock causes it to sleep for a couple of seconds.

Numbered commands

Command messages are in the format: >inflags#sendresponse#cmdnum#serialtask#inbuf#args,args,...#checksum<

<, > and # in inbuf are escaped using ^

All except inbuf are in hex. As a start, try 0 for inflags, 1 for sendresponse, 0 for serialtask, and cc to ignore the checksum

0x0 Display text

Input
serialtask
  • display 0, 1, etc.
  • flag 0x80 for all
buf message
arg0
  • 0 = left
  • 1 = centre
arg1 time to display for?
Output
?
>0#1#0#00#asd##cc<
>00#40#01##3B<


0x1 ?

Input
serialtask
  • display 0, 1, etc.
  • flag 0x80 for all
buf message
arg0 Bitfield of 4 flags.
Output
?

Seems to reboot for anything at the moment. There's probably something we need to prepare.

>0#1#1#00#blah#2#cc<
>00#40#01##3B<

0x2 Scroll text upwards

Input
serialtask
  • display 0, 1, etc.
  • flag 0x80 for all
buf message
arg0 delay in secs
arg1
  • 0 = don't repeat
  • 1 = repeat
Output
?

Text is centred, and wrapped!

>0#1#2#00#hello#2,0#cc<
>00#40#01##3B<

0x3 Display wrapped text

Input
serialtask
  • display 0, 1, etc.
  • flag 0x80 for all
buf message
arg0
  • 0 = don't centre
  • 1 = centre
arg1
  • ?
  • ?
arg2 delay between pages
Output
?
>0#1#3#00#hello world#1,0,2#cc<
>00#00#01##3F<


0x4 Clear screen?

Input
serialtask
  • display 0, 1, etc.
  • flag 0x80 for all
arg0
  • ?
Output
?
>0#1#4#00##ff#cc<
>00#00#01##3F<

0x5 Clear screen?

Input
serialtask
  • display 0, 1, etc.
  • flag 0x80 for all
arg0
  • ?
Output
?

Also set some serial flag

>0#1#5#00##1#cc<
>00#00#01##3F<

0x6 Stop animation

Input
serialtask
  • display 0, 1, etc.
  • flag 0x80 for all
arg0
  • ?
Output
?
>0#1#6#00##0#cc<
>00#00#01##3F<

0x7 Stop animation?

Input
serialtask
  • display 0, 1, etc.
  • flag 0x80 for all
arg0
  • 0 = ?
  • 1 = ?
Output
?
>0#1#7#00##0#cc<
>00#00#01##3F<

0x8 Display text ?

Input
serialtask
  • display 0, 1, etc.
  • flag 0x80 for all
buf message
arg0
  • 0 = ?
  • 1 = ?
Output
?
>0#1#8#00#hello world#0#cc<
>00#00#01##3F<

0x9 ?

Input
serialtask
  • display 0, 1, etc.
  • flag 0x80 for all
buf message
arg0
  • 0 = ?
  • 1 = ? (Seems to turn on the test pattern)
Output
?
>0#1#9#00##0#cc<
>00#00#01##3F<


0xa Display by half-screens

Input
serialtask
  • display 0, 1, etc.
  • flag 0x80 for all
buf message
arg0
  • 0 = ?
  • 1 = ? (might crash it)
arg1 0x10-0xbf = clear top half afterwards? wrapping height?
arg2 1 = do top half, then bottom half
Output
?
>0#1#a#00#hi there#0,0,0#cc<
>00#00#01##3F<

0x8b Set time

Input
serialtask
  • display 0, 1, etc.
  • flag 0x80 for all
arg0 hours
arg1 minutes
arg2 seconds
Output
?
>0#1#8b#00##14,3B,3B#cc<
?

0x8c Set date

Input
serialtask
  • display 0, 1, etc.
  • flag 0x80 for all
arg0 day
arg1 month
arg2 year
Output
?
>0#1#8c#00##1F,0C,0A#cc<
?

0xF0 Get serial task count

Input
none
Output
arg0 count
>0#1#F0####cc<
>00#80#01#03#34<


>0#1#F1####cc<
>00#03#00##3D<
>0#1#F2####cc<
>00#80#01#00#37<

0xF3 Get time

Input
none
Output
arg0 hours
arg1 minutes
arg2 seconds
>0#1#F3####cc<
>00#80#01#02,32,29#3F<

0xF4 Get date

Input
none
Output
arg0 date
arg1 month
arg2 year
>0#1#F4####cc<
>00#80#01#1E,05,0A#37<

0xF5 Get version

Input
none
Output
flags ?
arg0 Major version
arg1 Minor version
>0#1#F5####cc<
>00#80#01#04,07#18<

Firmware

NEC 27 (25), which is almost identical to a 186, with register bank switching, DMA and a simple buffering (macro) system for interrupts. User manual and with opcodes and with chart.

External bus 8-bit
Clock speed 8MHz?
DMA channels 2
Serial built-in
Timers 2
Internal data area 256 bytes based at xxe00
Special functions 256 bytes based at xxf00

Disassembly at http://github.com/marksteward/Infotec/.