Sunday, May 31, 2009

Reverse Engineering Accu-Scan AS560

I have made a device to control the address lines of the flash module, out of some TC4094BP chips that I salvaged from an old cash register. I then wrote a small program using the parapin library to control the pins that I connected to the shift registers, that then read the data on the data lines. So now I am ready to reverse engineer the program.

Sunday, May 17, 2009

Reverse Engineering Accu-Scan AS560

Accu-Scan AS560
meal tracker

version 3.15

  • PowerTip PC2004-A Back-lit LCD
  • 2 DE9 RS-232 ports
  • 1 unknown Male DE9 connector (possibly video connector)
  • 2 RJ45 connectors suspected EIA RS-485
  • 1 Parallel port connector
  • Onboard DC-DC voltage regulator
  • Piezoelectric speaker
  • 18.432 MHz Oscilator

  • [U1] ZILOG Z80180 MPU
  • [U8] TL16C452FN: Dual UART with Parallel Port and without FIFO
  • [U10] ADM483EAN: EIA RS-485 Transceiver
  • [U3] TC551001CP-70L: 131,072 WORD BY 8 BIT STATIC RAM
  • [U2] SUPERIOR 522U2V108 flashed onto a AT29C010A-12PC 5V FLASH memory
  • [U9] 74HC04N: Hex inverter
  • [U11][U7] ADM202JN: High Speed, +5 V, 0.1 uF CMOS RS-232 Driver/Receivers
  • [U6] DS1232 Power Monitor / pushbutton reset / watchdog timer
  • [U14] CD74ACT244E: Octal Non-Inverting Buffers/Line Drivers with 3-State Outputs
  • [U15] SN74HC245N: Octal Bus Transceivers With 3-State Outputs
  • [U4] -522U4V100 (GAL22V10D: 24 pin GAL)
  • [U5] 2-522U5V100 (GAL16V8D: 20 pin GAL)
  • [U12] LT1171CT 100kHz switching regulator
The Hex inverter looks like it is connected to at least one of the RS-485 ports.

The DS1232 is set up for 4.5V / 1.2 seconds, Push button reset left unconnected. !RST connected to CPU and possibly to control panel.

NJU3718L connected to control panel, and speaker.

CD74ACT244E connected to controlpanel and SN74HC245N

SN74HC245N connected to LCD.

Thursday, May 7, 2009

Multiple colliding roles

role tree{
method bark(){...}

role dog{
method bark(){...}

class dog_tree does tree does dog{
method dog::bark(){ say "woof" }
method tree::bark(){ say "rough" }

sub pet_dog( my dog $dog ){
# actually calls
# $dog.meta.does(dog).bark
# $
# or something similar