Professional Documents
Culture Documents
GDS Printer Communication Protocol v1.0
GDS Printer Communication Protocol v1.0
GDS Printer Communication Protocol v1.0
gsa-p0069.001.01
www.gamingstandards.com
GDS Printer: Communication Protocol v1.0,
gsa-p0069.001.01
Released on 2006/03/24, by Gaming Standards Association (GSA).
License
Licensor grants to Licensee a non-transferable, non-exclusive license to use the standard and/or
specification (hereinafter referred to as the "Standard"). Requests to reproduce, distribute or modify
the Standard should be directed to the Licensor: Gaming Standards Association, 39355 California
Street, Suite 307, Fremont, CA 94538 – Tel: (510) 744 4007 / Fax (510) 608 5917 / email:
sec@gamingstandards.com. Further licensee agrees that the licensed product will be treated as GSA
“confidential information” and proprietary.
Limited Warranty
THE FOREGOING WARRANTY IS THE SOLE AND EXCLUSIVE WARRANTY AND IS
GIVEN IN LIEU OF ALL OTHER WARRANTIES, EXPRESS OR IMPLIED, INCLUDING,
WITHOUT LIMITATION, THE WARRANTIES OF MERCHANTABILITY OR FITNESS FOR
A PARTICULAR PURPOSE, THE STANDARD IS BEING LICENSED TO YOU "AS IS," AND
LICENSOR DOES NOT WARRANT THAT THE STANDARD WILL MEET YOUR
REQUIREMENTS OR THAT THE OPERATION OF THE STANDARD WILL BE ERROR-
FREE.
Liability
In no event shall Licensor, its employees, agents, suppliers, or contractors be liable for any damages of
any kind or character, including without limitation any compensatory, incidental, direct, indirect,
special, punitive, liquidated or consequential damages, loss of use, loss of data, loss of income or
profit, loss of or damage to property, claims of third parties, or other losses of any kind or character or
attorneys' fees in connection with any claim relating to this Agreement or the performance of the
Standard. In the event that liability is nevertheless imposed on Licensor, its employees, agents,
suppliers or contractors, the liability shall not exceed the annual license fee paid for this Standard.
Termination
This License shall automatically terminate in the event of a breach of any of the terms of this
Agreement. Upon termination, you will be required to cease all use of the Standard and return to
Licensor all materials related to the Standard, all copies of any kind, and any and all accompanying
documentation.
General Terms
This Agreement is not assignable or transferable. The rights under this Agreement, or any License
granted hereunder, may not be assigned, sublicensed or otherwise transferred by Licensee without the
prior written consent of Licensor. This Agreement constitutes the entire Agreement between the
parties relating to the subject matter hereof and may only be modified in writing, signed by each party.
This Agreement supersedes any proposal or prior agreement(s), oral or written, and any other
communications between the parties relating to the subject matter of this Agreement. The laws of the
State of California shall govern this Agreement. Any questions or comments regarding this
Agreement or the Standard should be directed to the Gaming Standards Association, 39355 California
Street, Suite 307, Fremont, CA 94538 – Tel: (510) 744 4007 / Fax (510) 608 5917 / email:
sec@gamingstandards.com.
GDS Printer:
Communication Protocol v1.0 Table of Contents
Table of Contents
1 Introduction .......................................................................................................... 1
1.1 Printer Function Overview ................................................................................................ 1
1.2 USB Compliance and Benefits ......................................................................................... 1
1.3 Printers as HID Class Devices ......................................................................................... 2
1.4 Device Firmware Upgrade (DFU) ..................................................................................... 2
4 Event Support..................................................................................................... 18
4.1 Connection/Disconnection of Communications .............................................................. 18
4.2 Connection/Disconnection of Power............................................................................... 18
4.3 Report 0x06 Power Status.............................................................................................. 19
4.3.1 Rules for Power Status ......................................................................................... 19
4.4 Report 0x07 GAT Data ................................................................................................... 20
4.5 Report 0x09 CRC Data................................................................................................... 21
4.5.1 CRC Rules ............................................................................................................ 21
4.6 Report 0x0A Device State .............................................................................................. 22
4.7 Report 0xC4 Failure Status ............................................................................................ 23
4.7.1 Failure Status Rules............................................................................................. 23
4.8 Report 0xC5 Ticket Print Status ..................................................................................... 24
4.8.1 4.8.1 Ticket Print Status Rules ............................................................................. 24
4.9 Report 0xC6 Transfer Status.......................................................................................... 26
4.9.1 Status Codes ........................................................................................................ 27
4.10 Report 0xC8 Metrics ..................................................................................................... 28
4.11 Report 0xCB Printer Status .......................................................................................... 29
Glossary ................................................................................................................ 47
Index ...................................................................................................................... 59
About GDS
GSA Gaming Device Standards controls the flow of information between a slot machine and
the array of peripheral devices operating inside it, including bill validators, card readers and
ticket printers using Universal Serial Bus (USB) standards protocol. In essence, one command
set that each peripheral device would use to communicate with its host slot machine. That
information can then be relayed to the casino management system through the machine
message protocol, such as GSA’s BOB Message Protocol.
For more details about GSA, visit the Web site: http://www.gamingstandards.com.
Acknowledgements
The Gaming Standards Association would like to express its appreciation to all members of
the GDS committee, past and present, for their significant contribution and dedication to the
creation of this standard.
Related Documents
GSA
Gaming Standards Association documents referenced (http://www.gamingstandards.com):
USB
USB Implementers Forum, Inc., http://www.usb.org, documents referenced:
Others
Document Conventions
Plain text indicates specification text.
Courier New text indicates directory paths, code or pseudo-code.
Document Organization
Revision History
The following table lists the changes made this document.
Revisions
1 Introduction
This is the specification for a USB printer as defined by the GDS within the GSA. The aim of
the GDS is to develop true plug ‘n’ play peripherals for the gaming environment which are
already common place in the computer industry. Rather than use a derivative of RS232 it was
decided to move the technology forward and adopt the USB standard. This document
specifies the high level design of printers that will:
• be used to derive a specific USB based implementation of the Device Class
Functional Requirement Specification (see document reference DCFRS).
• satisfy the set of common functional requirements as specified in the DCFRS.
• satisfy the specific functional requirements for the printer class as specified in the
DCFRS.
This document specifies the complete set of functionality for the GDS printer.
2.4.2 Command
Commands specified in this document are sent from host to device. These commands are
implemented as USB FEATURE reports. See document reference USB1.1. The following
table identifies commands currently implemented as common reports (see sections 5.1 and
5.2). These commands are used by multiple device classes. At the time of this writing, the
commands are implemented by the coin acceptor, coin hopper, printer, and note acceptor
device classes.
2.4.3 Event
Events specified in this document are sent from device to host.
USB simulates the concept of an interrupt through regular polling intervals issued by the
host’s USB device driver. The interrupt service period is specified by the device via an
endpoint descriptor. The interrupt interval chosen is based on the function of a device.
Events can be sent at regular intervals, when the device has something to send or when the
host has requested that an event be sent.
An application level acknowledgment is required for some events. These events deal with
currency related activities or fault activities. The Host must make sure that it has acted on
them and not just received them before Acknowledging these events to the device.
The protection is needed such that on power loss, these events are not lost but resent when
power is restored and the host can decide if it had serviced the event prior to power loss or
must do so now.
Status events need to be reported when a fault occurs and when it is cleared.
The following table identifies events currently implemented as common reports (see sections
5.1 and 5.2). These events are used by multiple device classes. At the time of this writing, the
events are implemented by the coin acceptor, coin hopper, printer, and note acceptor device
classes.
If transaction numbers do not match, the host may send an ACK indicating the received TID
after handling this mismatching event; may resynchronize transaction IDs or may take any
other action.
If transaction ID events with TID x are received by the host while the host is busy processing
an event with transaction ID x, the host may choose to ignore these messages as they are
duplicates of the event being processed.
The device re-sends the event when it receives an ACK with a wrong transaction ID.
However, if the device has just recovered from power loss and has detected that an event was
waiting acknowledgement when power was lost, and has resent the event, the device discards
the resent event as soon as the ACK is received. The host either has indicated that it had
already serviced it or did just then. Regardless the transaction ID is incremented and
operation continues.
Transaction ID events can only be sent if there is no pending Transaction ID event. Devices
must queue any un-sent and pending Transaction ID events.
If an event is unrecognized by the host, the host may ignore the event or take some other
action.
If an ACK is not received within one (1) second then the event is resent to the host.
When the device acknowledges a command packet, the device accepts responsibility to
complete the command. Commands must be completed within the allocated time-out
periods. For the 0x08 Calculate CRC (see page 11) and 0x04 Self Test (see page 10)
commands the host allows a maximum time-out of 20 seconds between the receipt of the
ACK and the return of requested data on the Input End Point. This time-out is five (5)
seconds for all other commands that operate during the disabled state and have an associated
response to the host. The 0x03 Disable command (see page 10) is an exception and must
respond to the host within three bIntervals (see Printer Function Overview on page 1).
Care must be taken in the device firmware to ensure that a NAK_OUT is used without
STATUS_IN being included because the host might interpret the ACK of the status packet
as receipt of the command. The device firmware must also ensure that upon returning to an
ACK_OUT state that the device also includes the STATUS_IN instruction to allow the
command from the host to be recognized. To repeat: to stop receipt of commands from the
host, the device must perform a NAK_OUT instruction; and to accept commands from the
host, the device must perform an ACK_OUT_STATUS_IN instruction.
More information is available in section 5.3.2 and section 4.4 of the USB specification (see
document reference USB1.1).
3 Command Support
The following printer commands are supported and are to be implemented as HID Feature
reports.
Report ID Name Data Page
0x01 ACK No page 9
0x02 Enable No page 10
0x03 Disable No page 10
0x04 Self Test No page 10
0x05 Request GAT Report No page 11
0x08 Calculate CRC Yes page 11
0xC0 Define Region Yes page 12
0xC1 Define Template Yes page 13
0xC2 Print Ticket No page 14
0xC3 Form Feed No page 15
0xC7 Request Printer Metrics No page 15
0xC9 Graphic Transfer Setup Yes page 16
0xCA File Transfer Yes page 17
NOTE: The following reports are diagnostic commands: Report 0x04 Self Test, Report 0x05
Request GAT Report, Report 0x08 Calculate CRC.
Byte 0 0x01
Byte 1 - - - - - - - Resync
Byte 2 Transaction ID
Resync 0 The device must not re-sync its Transaction ID. This
is an acknowledgement.
1 The device MUST re-sync its Transaction ID and re-
send the report.
Transaction ID 0 to 0xFF The confirmed or new Transaction ID. See rules in
section 3.2.1.
Bit 7 6 5 4 3 2 1 0
Byte 0 0x02
Bit 7 6 5 4 3 2 1 0
Byte 0 0x03
Bit 7 6 5 4 3 2 1 0
Byte 0 0x04
Byte 1 - - - - - - - NVM
Bit 7 6 5 4 3 2 1 0
Byte 0 0x05
Bit 7 6 5 4 3 2 1 0
Byte 0 0x08
Byte 1 Seed 0
Byte 2 Seed 1
Byte 3 Seed 2
Byte 4 Seed 3
Seed 0 to 255 The starting seed for the CRC-32 calculation. Seed 0
is the LSB.
Byte 0 0xC0
Byte 1 Index
Byte 2 Size
Byte 3 Data 1
…
Byte 63 Data 61
Bit 7 6 5 4 3 2 1 0
Byte 0 0xC1
Byte 1 Index
Byte 2 Size
Byte 3 Data 1
…
Byte 63 Data 61
Bit 7 6 5 4 3 2 1 0
Byte 0 0xC2
Byte 1 Index
Byte 2 Size
Byte 3 Data 1
…
Byte 63 Data 61
Bit 7 6 5 4 3 2 1 0
Byte 0 0xC3
Bit 7 6 5 4 3 2 1 0
Byte 0 0xC7
Bit 7 6 5 4 3 2 1 0
Byte 0 0xC9
Byte 1 Type
Byte 2 Index
Byte 3 File Size (LSB)
Byte 4 File Size (MSB)
Bit 7 6 5 4 3 2 1 0
Byte 0 0xCA
Byte 1 Index (LSB)
Byte 2 Index (MSB)
Byte 3 Size
Byte 4 Data 1
...
Byte 63 Data 60
4 Event Support
The following printer events are supported. See section 2.4.1 for message priority.
Report ID Event Data Page
GDS devices are event driven and therefore detection of an error as well as clearance of it
must be reported. This guarantees that the host is informed of the state of a given device.
If the device does not require external power, the power status event need not be sent.
If the device requires external power, and if external power is disconnected, the device must
disable itself. The device remains disabled until enabled by the host.
Bit 7 6 5 4 3 2 1 0
Byte 0 0x06
Need Ext.
Byte 1
Reset Power
Bit 7 6 5 4 3 2 1 0
Byte 0 0x07
Byte 1 Index
Byte 2 Size
Byte 3 Data 1
...
Byte 63 Data 61
Bit 7 6 5 4 3 2 1 0
Byte 0 0x09
Byte 1 Result 0
Byte 2 Result 1
Byte 3 Result 2
Byte 4 Result 3
Bit 7 6 5 4 3 2 1 0
Byte 0 0x0A
Byte 1 - - - - - - Disable Enable
Disable 0 --
1 Device disabled.
Enable 0 --
1 Device enabled.
Bit 7 6 5 4 3 2 1 0
Byte 0 0xC4
Byte 1 Print
Temperature
Other - - - Head NVM Firmware
Error
Damaged
Byte 2 Diagnostic
Bit 7 6 5 4 3 2 1 0
Byte 0 0xC5
Byte 1 Transaction ID
Byte 2 Print Print in
- - - F3 F2 F1
Complete Progress
Bit 7 6 5 4 3 2 1 0
Byte 0 0xC6
Byte 1
0 0 0 0 Graphic Region Template Print
Print 0 -
Region 0x01 OK
0x02 Syntax Error
0x03 Wrong ID Range
0x04 Region Overflow
0x05 Data type Mismatch
0x06 Region Truncation error
0x07 Undefined Font
0x08 Undefined Graphic
0x09 Undefined Bar Code
0x0A Undefined Justification
0x0B Incorrect Multiplier Value
Template 0x01 OK
0x02 Syntax Error
0x03 Wrong ID Range
0x04 Undefined Region ID
PrintData 0x01 OK
0x02 Syntax Error
0x03 Region Overflow
0x04 Data type Mismatch
0x05 Too many fields of Interest
0x06 Already defined field of Interest
0x07 Number of regions does not match template definition
0x08 Undefined Template
Graphic 0x01 OK
0x02 File Size too large
(This condition is sent in response to Graphic
Transfer Setup Report.)
0x03 Corrupted file
(Printer will clear transferred data.)
Bit 7 6 5 4 3 2 1 0
Byte 0 0xC8
Byte 1 Index
Byte 2 Size
Byte 3 Data 1
…
Byte 63 Data 61
Bit 7 6 5 4 3 2 1 0
Byte 0 0xCB
Byte 1 Transaction ID
Byte 2 Paper Paper Paper Top of Print
- - Chassis
Empty Low Jam Form Head
Allocated Devices
00 – 0F Unused
11 Coin Acceptor
12 Bill Acceptor
13 Hopper
14 Printer
15 Touch Screen
16 Card Reader
17 – 3F Reserved
- - - - 11 - Coin Acceptor
- - - - 12 - Bill Validator
- - - - 13 - Hopper
- - - - 14 - Printer
- - - - 15 - Touch Screen
- - - - 16 - Card Reader
ACK - 01 - 40 - -
- - - Resync 90 1 bit -
- - - Trans ID 60 1 -
Enable - 02 - 41 - -
Disable - 03 - 42 - -
Self Test - 04 - 43 - -
- - - NVM 93 1 bit -
Request GAT
- 05 44 -
Report
Power
- 06 - 45 - -
Status
- - - Ext. Power 91 1 bit -
- - - Need Reset 92 1 bit -
- GAT Data 07 46 -
- - - Index 61 1 -
Unicode UTF-16LE is used for all strings, limiting strings to 126 characters:
int((255-2)/2) = 126
6.1 idVendor
Unique code supplied to USB member companies. If you do not yet have a code then you
need to subscribe to the USB Implementers Forum.
Visit http://www.usb.org.
6.2 idProduct
Each type of product supplied by a manufacturer must have a unique ID code (126 character
limit).
Windows drivers are loaded on the basis of a unique idVendor (see section 6.1), idProduct
and iSerialNumber (see section 6.5).
6.3 iManufacturer
May be used to give an ASCII representation of the idVendor (126 character limit). This is
assigned by each manufacturer and kept consistent with regards to case and spelling.
For example:
GSA Member Company Name
6.4 iProduct
A string must be returned in this format:
<Protocol Level>,<Product Name>,<Firmware Issue>,<Build
Version>,<Manufacturing Date>
Each item above is described in further detail on the following page.
ASCII string, comma delimited.
Redundant trailing commas may be omitted.
For example:
1.1,ProductName,A,1.01,01/01/2004
Only the first three items are compulsory. At a minimum we could have...
1.1,ProductName, 1A2B3C
6.5 iSerialNumber
Compulsory field.
Serial numbers must be returned as an ASCII string (126 character limit), such as 12345678.
Leading zeros are acceptable, for example 00000123.
For every manufacturer, this value must be unique for each of the manufacturer’s products.
This means that two products, each from a different manufacturer, may have the same serial
number, but no two products from the same manufacturer may have the same serial number.
11 Coin Acceptor
12 Bill Validator
13 Hopper
14 Printer
15 Touch Screen
16 Printer
The host machine therefore knows what type of equipment it is dealing with and can
interrogate the corresponding usage numbers.
7.2.1 Structure
<PR r="value"/>
7.2.2 PR Attribute
r 0 200dpi
1 300dpi
2 600dpi
3 1200dpi
4 2400dpi
7.2.3 Example
<PR r="0"/>
7.3.1 Structure
The following is the structure of the PS element:
7.3.2 PS Attributes
The figure below this table shows the paper’s (0,0) coordinates, as a ticket is being printed.
Attribute Value Description
xPaSz 0000 – 65536 Dot axis (X-axis) paper size in dots. See figure
yPaSz 0000 – 65536 Paper axis (Y-axis) paper size in dots.
xPrSz 0000 – 65536 Dot axis (X-axis) printable paper size in dots.
yPrSz 0000 – 65536 Paper axis (Y-axis) printable paper size in dots.
xOff 0000 – 65536 Distance in dots between xPaSz and xPrSz.
yOff 0000 – 65536 Distance in dots between yPaSz and yPrSz.
Printer device
Ticket in progress
7.3.3 Example
7.4.1 Structure
The following is the structure of the GM element:
<GM s="size"/>
7.4.2 GM Attributes
7.4.3 Example
7.5.1 Structure
The following is the structure of the RCS element, where each idvalue is a three-character
language code in ISO 639:
7.5.2 Example
7.6.1 Structure
The following is the structure of the RPT element, where each idvalue is a three-digit ASCII
identifier for one predefined template:
<RPT>idvalue1 idvalue2 … idvaluen </RPT>
7.6.2 Example
7.7.1 Structure
The following is the structure of the RBS element, where each idvalue is a two-digit ASCII
identifier for one barcode symbology (see section 7.7.2):
7.7.3 Example
<RBS> 00 01 </RBS>
7.8.1 Structure
The following is the structure of the FS element, which includes an F child element for each
font supported. In place of each value would be values for the index, font size, and pitch
respectively, as described in section 7.8.3.
<FS>
<F i="value" s="value" p="value" />
</FS>
7.8.2 FS Element
7.8.3 FS Attributes
i
(integer value) Index of font. Required font support is listed in
section 7.8.4.
s Size of font in points. One point is approximately
(decimal value) 1/72 inch.
p (decimal value) Pitch, or characters per inch, of font.
7.8.5 Example
<FS>
<F i="0" s="29.5" p="2.5" />
<F i="1" s="25.8" p="3.3" />
<F i="2" s="13.8" p="5.5" />
<F i="3" s="21.3" p="4.0" />
<F i="4" s="10.6" p="7.3" />
<F i="5" s="8.5" p="20.3" />
<F i="6" s="9.2" p="10.1" />
<F i="7" s="8.5" p="20.5" />
</FS>
7.9.1 Structure
The following is the structure of the CS element, which includes a CLR child element for each
color supported. In the structure shown below, name would be replaced by the text name of
a color, such as "black" or "red".
<CS>
<CLR n="name"/>
</CS>
7.9.2 CS Element
For each color the printer supports, it includes one CLR child element inside the CS element.
Element Value Description
CLR
See section 7.9.3 One color the printer supports, included in the n
attribute (see 7.9.3)
7.9.3 CS Attribute
7.9.4 Example
<CS>
<CLR n="black" />
<CLR n="red" />
</CS>
// Printer resolution
<PR r="0"/>
// Barcode support. ITF and Code 128 are minimum required support.
<RBS> 00 01 </RBS>
// Fonts supported
<FS>
<F i="0" s="29.5" p="2.5" />
<F i="1" s="25.8" p="3.3" />
<F i="2" s="13.8" p="5.5" />
<F i="3" s="21.3" p="4.0" />
<F i="4" s="10.6" p="7.3" />
<F i="5" s="8.5" p="20.3" />
<F i="6" s="9.2" p="10.1" />
<F i="7" s="8.5" p="20.5" />
</FS>
//Colors supported.
<CS>
<CLR n="black" />
<CLR n="red" />
</CS>
</Metrics>
Glossary
Diagnostic Commands The following reports are diagnostic commands:
Report 0x04 Self Test
Report 0x05 Request GAT Report
Report 0x08 Calculate CRC
Disabled Condition of a peripheral device imposed by its host in which the
device does not perform operations other than diagnostic functions
and communications in response to host requests. A device that is
disabled by the host must be re-enabled by the host. See also Self-
disabled.
Dot Axis Axis on which the dots are printed. See also Paper Axis.
GAT Game Authentication Terminal. An application, installed on a personal
computer or laptop, which uses serial communication to authenticate
game program components on a gaming machine.
Host A machine that gathers data from, and sends directives to, its
peripheral devices.
NVM Non-volatile memory.
Report ID A unique identifier assigned by GSA to GDS device commands and
events.
Page Description A method to describe the output of a page, such as a gaming voucher,
Language (PDL) to a printer. In this document, the PDL referred to is defined by GDS.
Paper Axis Axis on which the paper moves. See also Dot Axis.
Print Job The instruction to print given data with a specified printable template.
Printable Region An area (content block) on the printed output that is self described by
the syntax of the PDL and takes on the printed form of text, barcodes
or graphics.
Printable Template A defined page format for printer output, consisting of associations of
(template) one or more defined printable regions.
; ============================================================= ;
; Algorithms for 8051 family CPUs ;
; ============================================================= ;
; ;
; Routines are written in standard 8051 Assembly Language ;
; without any special function optimization (dual DPTR, etc) ;
; ;
; ============================================================= ;
; ============================================================= ;
; 8751 TABLE LOOKUP ROUTINE ;
; ============================================================= ;
; ;
; This is the fastest way to calculate the CRC by a huge ;
; margin, but it consumes more than 1k of code memory ;
; ;
; ============================================================= ;
; Enter with R7:R6:R5:R4 initial CRC or seed (R7.7 MSB), DPTR pointer to data
; Exit with R7:R6:R5:R4 new CRC, DPTR advanced by 1, A trashed
; Stack: 2
; 34 instruction cycles per byte
.....
CLR A
MOVC A,@A+DPTR ; get next data byte
INC DPTR
PUSH DPL ; save source data pointer
PUSH DPH
XRL A,R4 ; XOR data with low CRC
MOV R4,A ; save pointer
MOV DPTR,#crc_tab_lo ; point to low byte table
MOVC A,@A+DPTR ; get low byte from table
XRL A,R5 ; XOR with next byte from CRC
XCH A,R4 ; becomes new low CRC, get pointer back
; Optimization note:
; Since “INC DPH” takes one instruction cycle whereas “INC DPTR” takes three,
; the 32-bit table is presented in four blocks, one for each significant byte.
; One byte from each block (at the same index) makes up the 32 bit DWORD
db 0a3h,093h,0c2h,0f2h,067h,057h,006h,036h
db 02bh,01bh,04ah,07ah,0efh,0dfh,08eh,0beh
db 0b3h,083h,0d2h,0e2h,077h,047h,016h,026h
db 03bh,00bh,05ah,06ah,0ffh,0cfh,09eh,0aeh
db 0c2h,0f2h,0a3h,093h,006h,036h,067h,057h
db 04ah,07ah,02bh,01bh,08eh,0beh,0efh,0dfh
db 0d2h,0e2h,0b3h,083h,016h,026h,077h,047h
db 05ah,06ah,03bh,00bh,09eh,0aeh,0ffh,0cfh
db 0e2h,0d2h,083h,0b3h,026h,016h,047h,077h
db 06ah,05ah,00bh,03bh,0aeh,09eh,0cfh,0ffh
db 0f2h,0c2h,093h,0a3h,036h,006h,057h,067h
db 07ah,04ah,01bh,02bh,0beh,08eh,0dfh,0efh
; third byte (bits 16..23)
db 000h,007h,00eh,009h,06dh,06ah,063h,064h
db 0dbh,0dch,0d5h,0d2h,0b6h,0b1h,0b8h,0bfh
db 0b7h,0b0h,0b9h,0beh,0dah,0ddh,0d4h,0d3h
db 06ch,06bh,062h,065h,001h,006h,00fh,008h
db 06eh,069h,060h,067h,003h,004h,00dh,00ah
db 0b5h,0b2h,0bbh,0bch,0d8h,0dfh,0d6h,0d1h
db 0d9h,0deh,0d7h,0d0h,0b4h,0b3h,0bah,0bdh
db 002h,005h,00ch,00bh,06fh,068h,061h,066h
db 0dch,0dbh,0d2h,0d5h,0b1h,0b6h,0bfh,0b8h
db 007h,000h,009h,00eh,06ah,06dh,064h,063h
db 06bh,06ch,065h,062h,006h,001h,008h,00fh
db 0b0h,0b7h,0beh,0b9h,0ddh,0dah,0d3h,0d4h
db 0b2h,0b5h,0bch,0bbh,0dfh,0d8h,0d1h,0d6h
db 069h,06eh,067h,060h,004h,003h,00ah,00dh
db 005h,002h,00bh,00ch,068h,06fh,066h,061h
db 0deh,0d9h,0d0h,0d7h,0b3h,0b4h,0bdh,0bah
db 0b8h,0bfh,0b6h,0b1h,0d5h,0d2h,0dbh,0dch
db 063h,064h,06dh,06ah,00eh,009h,000h,007h
db 00fh,008h,001h,006h,062h,065h,06ch,06bh
db 0d4h,0d3h,0dah,0ddh,0b9h,0beh,0b7h,0b0h
db 0d6h,0d1h,0d8h,0dfh,0bbh,0bch,0b5h,0b2h
db 00dh,00ah,003h,004h,060h,067h,06eh,069h
db 061h,066h,06fh,068h,00ch,00bh,002h,005h
db 0bah,0bdh,0b4h,0b3h,0d7h,0d0h,0d9h,0deh
db 064h,063h,06ah,06dh,009h,00eh,007h,000h
db 0bfh,0b8h,0b1h,0b6h,0d2h,0d5h,0dch,0dbh
db 0d3h,0d4h,0ddh,0dah,0beh,0b9h,0b0h,0b7h
db 008h,00fh,006h,001h,065h,062h,06bh,06ch
db 00ah,00dh,004h,003h,067h,060h,069h,06eh
db 0d1h,0d6h,0dfh,0d8h,0bch,0bbh,0b2h,0b5h
db 0bdh,0bah,0b3h,0b4h,0d0h,0d7h,0deh,0d9h
db 066h,061h,068h,06fh,00bh,00ch,005h,002h
; most significant byte (bits 24..31)
db 000h,077h,0eeh,099h,007h,070h,0e9h,09eh
db 00eh,079h,0e0h,097h,009h,07eh,0e7h,090h
db 01dh,06ah,0f3h,084h,01ah,06dh,0f4h,083h
db 013h,064h,0fdh,08ah,014h,063h,0fah,08dh
db 03bh,04ch,0d5h,0a2h,03ch,04bh,0d2h,0a5h
db 035h,042h,0dbh,0ach,032h,045h,0dch,0abh
db 026h,051h,0c8h,0bfh,021h,056h,0cfh,0b8h
db 028h,05fh,0c6h,0b1h,02fh,058h,0c1h,0b6h
db 076h,001h,098h,0efh,071h,006h,09fh,0e8h
db 078h,00fh,096h,0e1h,07fh,008h,091h,0e6h
db 06bh,01ch,085h,0f2h,06ch,01bh,082h,0f5h
db 065h,012h,08bh,0fch,062h,015h,08ch,0fbh
db 04dh,03ah,0a3h,0d4h,04ah,03dh,0a4h,0d3h
db 043h,034h,0adh,0dah,044h,033h,0aah,0ddh
db 050h,027h,0beh,0c9h,057h,020h,0b9h,0ceh
db 05eh,029h,0b0h,0c7h,059h,02eh,0b7h,0c0h
db 0edh,09ah,003h,074h,0eah,09dh,004h,073h
db 0e3h,094h,00dh,07ah,0e4h,093h,00ah,07dh
db 0f0h,087h,01eh,069h,0f7h,080h,019h,06eh
db 0feh,089h,010h,067h,0f9h,08eh,017h,060h
db 0d6h,0a1h,038h,04fh,0d1h,0a6h,03fh,048h
db 0d8h,0afh,036h,041h,0dfh,0a8h,031h,046h
db 0cbh,0bch,025h,052h,0cch,0bbh,022h,055h
db 0c5h,0b2h,02bh,05ch,0c2h,0b5h,02ch,05bh
db 09bh,0ech,075h,002h,09ch,0ebh,072h,005h
db 095h,0e2h,07bh,00ch,092h,0e5h,07ch,00bh
db 086h,0f1h,068h,01fh,081h,0f6h,06fh,018h
db 088h,0ffh,066h,011h,08fh,0f8h,061h,016h
db 0a0h,0d7h,04eh,039h,0a7h,0d0h,049h,03eh
db 0aeh,0d9h,040h,037h,0a9h,0deh,047h,030h
db 0bdh,0cah,053h,024h,0bah,0cdh,054h,023h
db 0b3h,0c4h,05dh,02ah,0b4h,0c3h,05ah,02dh
; End of lookup version
; ============================================================= ;
; 8751 HARD-WAY SHIFT REGISTER ROUTINE ;
; ============================================================= ;
; ;
; This is 5.5 times slower than the lookup table routine, but ;
; it takes up less than 4% of the code space. ;
; ;
; You can use this routine to generate the lookup table, by ;
; feeding it with successive byte values 00..FF with a seed ;
; of 0 each time. ;
; ;
; ============================================================= ;
; Enter with R7:R6:R5:R4 initial CRC or seed (R7.7 MSB), DPTR pointer to data
; Exit with R7:R6:R5:R4 new CRC, DPTR advanced by 1, A trashed, R2 zero
; Stack: none
; Average 187 instruction cycles per byte
.....
CLR A
MOVC A,@A+DPTR ; get next data byte
INC DPTR
XRL A,R4 ; XOR data with low byte CRC
MOV R4,A ; save result
next_bit:
; Test the (next) LSB of the combined CRC/DATA
; (however we get here, A and R4 are the same)
CLR C ; clear C before shift
JNB ACC.0,shift_no_xor ; bit is 0
shift_no_xor:
MOV A,R7 ; shift CRC one place right
RRC A ; without XORing
MOV R7,A
MOV A,R6 ; next 8
RRC A
MOV R6,A
MOV A,R5 ; next 8
RRC A
MOV R5,A
MOV A,R4 ; LS 8
RRC A
shift_done:
MOV R4,A ; replace final CRC byte
DJNZ R2,next_bit
.....
; ============================================================= ;
; Algorithms for other family CPUs ;
; ============================================================= ;
; ;
; Routines for 80x86 and MIPS are included below. It is fairly ;
; simple to translate these for other CPUs (Z80, etc). ;
; ;
; ============================================================= ;
; ============================================================= ;
; 32-bit x86 LOOKUP TABLE ROUTINE ;
; ============================================================= ;
; ;
; For 80386 or better - uses 32 bit registers ;
; ;
; ============================================================= ;
calc_CRC proc
xor eax,eax ; start with EAX=0
lodsb ; AL=[SI]; SI=SI+1
; Though we would like to take the data in larger chunks, the combining table
; becomes unfeasibly large for anything more than 8 bits.
xor al,dl ; XOR low CRC byte with data
shl ax,2 ; shift to make dword pointer
mov bx,ax ; use to make pointer into
mov eax,cs:dword ptr combine_table[bx] ; combining table and get value
; If (as is probably the case) DS is pointing to the code segment, you can omit
; the CS override to save a few cycles. But in this case put an “assume ds:CODE”
; directive ahead of the routine, or the assembler will use the wrong offset.
shr edx,8 ; shift CRC 8 bits right
xor edx,eax ; XOR result with table value
dec ecx ; count this byte
jnz calc_CRC ; do until done
ret ; final CRC in EDX
calc_CRC endp
align 4
combine_table label dword
dd 000000000h,077073096h,0ee0e612ch,0990951bah,0076dc419h,0706af48fh,0e963a535h,09e6495a3h
dd 00edb8832h,079dcb8a4h,0e0d5e91eh,097d2d988h,009b64c2bh,07eb17cbdh,0e7b82d07h,090bf1d91h
dd 01db71064h,06ab020f2h,0f3b97148h,084be41deh,01adad47dh,06ddde4ebh,0f4d4b551h,083d385c7h
dd 0136c9856h,0646ba8c0h,0fd62f97ah,08a65c9ech,014015c4fh,063066cd9h,0fa0f3d63h,08d080df5h
dd 03b6e20c8h,04c69105eh,0d56041e4h,0a2677172h,03c03e4d1h,04b04d447h,0d20d85fdh,0a50ab56bh
dd 035b5a8fah,042b2986ch,0dbbbc9d6h,0acbcf940h,032d86ce3h,045df5c75h,0dcd60dcfh,0abd13d59h
dd 026d930ach,051de003ah,0c8d75180h,0bfd06116h,021b4f4b5h,056b3c423h,0cfba9599h,0b8bda50fh
dd 02802b89eh,05f058808h,0c60cd9b2h,0b10be924h,02f6f7c87h,058684c11h,0c1611dabh,0b6662d3dh
dd 076dc4190h,001db7106h,098d220bch,0efd5102ah,071b18589h,006b6b51fh,09fbfe4a5h,0e8b8d433h
dd 07807c9a2h,00f00f934h,09609a88eh,0e10e9818h,07f6a0dbbh,0086d3d2dh,091646c97h,0e6635c01h
dd 06b6b51f4h,01c6c6162h,0856530d8h,0f262004eh,06c0695edh,01b01a57bh,08208f4c1h,0f50fc457h
dd 065b0d9c6h,012b7e950h,08bbeb8eah,0fcb9887ch,062dd1ddfh,015da2d49h,08cd37cf3h,0fbd44c65h
dd 04db26158h,03ab551ceh,0a3bc0074h,0d4bb30e2h,04adfa541h,03dd895d7h,0a4d1c46dh,0d3d6f4fbh
dd 04369e96ah,0346ed9fch,0ad678846h,0da60b8d0h,044042d73h,033031de5h,0aa0a4c5fh,0dd0d7cc9h
dd 05005713ch,0270241aah,0be0b1010h,0c90c2086h,05768b525h,0206f85b3h,0b966d409h,0ce61e49fh
dd 05edef90eh,029d9c998h,0b0d09822h,0c7d7a8b4h,059b33d17h,02eb40d81h,0b7bd5c3bh,0c0ba6cadh
dd 0edb88320h,09abfb3b6h,003b6e20ch,074b1d29ah,0ead54739h,09dd277afh,004db2615h,073dc1683h
dd 0e3630b12h,094643b84h,00d6d6a3eh,07a6a5aa8h,0e40ecf0bh,09309ff9dh,00a00ae27h,07d079eb1h
dd 0f00f9344h,08708a3d2h,01e01f268h,06906c2feh,0f762575dh,0806567cbh,0196c3671h,06e6b06e7h
dd 0fed41b76h,089d32be0h,010da7a5ah,067dd4acch,0f9b9df6fh,08ebeeff9h,017b7be43h,060b08ed5h
dd 0d6d6a3e8h,0a1d1937eh,038d8c2c4h,04fdff252h,0d1bb67f1h,0a6bc5767h,03fb506ddh,048b2364bh
dd 0d80d2bdah,0af0a1b4ch,036034af6h,041047a60h,0df60efc3h,0a867df55h,0316e8eefh,04669be79h
dd 0cb61b38ch,0bc66831ah,0256fd2a0h,05268e236h,0cc0c7795h,0bb0b4703h,0220216b9h,05505262fh
dd 0c5ba3bbeh,0b2bd0b28h,02bb45a92h,05cb36a04h,0c2d7ffa7h,0b5d0cf31h,02cd99e8bh,05bdeae1dh
dd 09b64c2b0h,0ec63f226h,0756aa39ch,0026d930ah,09c0906a9h,0eb0e363fh,072076785h,005005713h
dd 095bf4a82h,0e2b87a14h,07bb12baeh,00cb61b38h,092d28e9bh,0e5d5be0dh,07cdcefb7h,00bdbdf21h
dd 086d3d2d4h,0f1d4e242h,068ddb3f8h,01fda836eh,081be16cdh,0f6b9265bh,06fb077e1h,018b74777h
dd 088085ae6h,0ff0f6a70h,066063bcah,011010b5ch,08f659effh,0f862ae69h,0616bffd3h,0166ccf45h
dd 0a00ae278h,0d70dd2eeh,04e048354h,03903b3c2h,0a7672661h,0d06016f7h,04969474dh,03e6e77dbh
dd 0aed16a4ah,0d9d65adch,040df0b66h,037d83bf0h,0a9bcae53h,0debb9ec5h,047b2cf7fh,030b5ffe9h
dd 0bdbdf21ch,0cabac28ah,053b39330h,024b4a3a6h,0bad03605h,0cdd70693h,054de5729h,023d967bfh
dd 0b3667a2eh,0c4614ab8h,05d681b02h,02a6f2b94h,0b40bbe37h,0c30c8ea1h,05a05df1bh,02d02ef8dh
; ============================================================= ;
; 16-bit x86 LOOKUP TABLE ROUTINE ;
; ============================================================= ;
; ;
; For 8088, 8086, 80186, 80286 - uses 16 bit registers ;
; Note: not optimal code for 386 and better CPUs ;
; ;
; ============================================================= ;
calc_CRC proc
push cx
xor ax,ax ; start with EAX=0
lodsb ; AL=[SI]; SI=SI+1
align 4
combine_table label dword
dd 000000000h,077073096h,0ee0e612ch,0990951bah,0076dc419h,0706af48fh,0e963a535h,09e6495a3h
dd 00edb8832h,079dcb8a4h,0e0d5e91eh,097d2d988h,009b64c2bh,07eb17cbdh,0e7b82d07h,090bf1d91h
dd 01db71064h,06ab020f2h,0f3b97148h,084be41deh,01adad47dh,06ddde4ebh,0f4d4b551h,083d385c7h
dd 0136c9856h,0646ba8c0h,0fd62f97ah,08a65c9ech,014015c4fh,063066cd9h,0fa0f3d63h,08d080df5h
dd 03b6e20c8h,04c69105eh,0d56041e4h,0a2677172h,03c03e4d1h,04b04d447h,0d20d85fdh,0a50ab56bh
dd 035b5a8fah,042b2986ch,0dbbbc9d6h,0acbcf940h,032d86ce3h,045df5c75h,0dcd60dcfh,0abd13d59h
dd 026d930ach,051de003ah,0c8d75180h,0bfd06116h,021b4f4b5h,056b3c423h,0cfba9599h,0b8bda50fh
dd 02802b89eh,05f058808h,0c60cd9b2h,0b10be924h,02f6f7c87h,058684c11h,0c1611dabh,0b6662d3dh
dd 076dc4190h,001db7106h,098d220bch,0efd5102ah,071b18589h,006b6b51fh,09fbfe4a5h,0e8b8d433h
dd 07807c9a2h,00f00f934h,09609a88eh,0e10e9818h,07f6a0dbbh,0086d3d2dh,091646c97h,0e6635c01h
dd 06b6b51f4h,01c6c6162h,0856530d8h,0f262004eh,06c0695edh,01b01a57bh,08208f4c1h,0f50fc457h
dd 065b0d9c6h,012b7e950h,08bbeb8eah,0fcb9887ch,062dd1ddfh,015da2d49h,08cd37cf3h,0fbd44c65h
dd 04db26158h,03ab551ceh,0a3bc0074h,0d4bb30e2h,04adfa541h,03dd895d7h,0a4d1c46dh,0d3d6f4fbh
dd 04369e96ah,0346ed9fch,0ad678846h,0da60b8d0h,044042d73h,033031de5h,0aa0a4c5fh,0dd0d7cc9h
dd 05005713ch,0270241aah,0be0b1010h,0c90c2086h,05768b525h,0206f85b3h,0b966d409h,0ce61e49fh
dd 05edef90eh,029d9c998h,0b0d09822h,0c7d7a8b4h,059b33d17h,02eb40d81h,0b7bd5c3bh,0c0ba6cadh
dd 0edb88320h,09abfb3b6h,003b6e20ch,074b1d29ah,0ead54739h,09dd277afh,004db2615h,073dc1683h
dd 0e3630b12h,094643b84h,00d6d6a3eh,07a6a5aa8h,0e40ecf0bh,09309ff9dh,00a00ae27h,07d079eb1h
dd 0f00f9344h,08708a3d2h,01e01f268h,06906c2feh,0f762575dh,0806567cbh,0196c3671h,06e6b06e7h
dd 0fed41b76h,089d32be0h,010da7a5ah,067dd4acch,0f9b9df6fh,08ebeeff9h,017b7be43h,060b08ed5h
dd 0d6d6a3e8h,0a1d1937eh,038d8c2c4h,04fdff252h,0d1bb67f1h,0a6bc5767h,03fb506ddh,048b2364bh
dd 0d80d2bdah,0af0a1b4ch,036034af6h,041047a60h,0df60efc3h,0a867df55h,0316e8eefh,04669be79h
dd 0cb61b38ch,0bc66831ah,0256fd2a0h,05268e236h,0cc0c7795h,0bb0b4703h,0220216b9h,05505262fh
dd 0c5ba3bbeh,0b2bd0b28h,02bb45a92h,05cb36a04h,0c2d7ffa7h,0b5d0cf31h,02cd99e8bh,05bdeae1dh
dd 09b64c2b0h,0ec63f226h,0756aa39ch,0026d930ah,09c0906a9h,0eb0e363fh,072076785h,005005713h
dd 095bf4a82h,0e2b87a14h,07bb12baeh,00cb61b38h,092d28e9bh,0e5d5be0dh,07cdcefb7h,00bdbdf21h
dd 086d3d2d4h,0f1d4e242h,068ddb3f8h,01fda836eh,081be16cdh,0f6b9265bh,06fb077e1h,018b74777h
dd 088085ae6h,0ff0f6a70h,066063bcah,011010b5ch,08f659effh,0f862ae69h,0616bffd3h,0166ccf45h
dd 0a00ae278h,0d70dd2eeh,04e048354h,03903b3c2h,0a7672661h,0d06016f7h,04969474dh,03e6e77dbh
dd 0aed16a4ah,0d9d65adch,040df0b66h,037d83bf0h,0a9bcae53h,0debb9ec5h,047b2cf7fh,030b5ffe9h
dd 0bdbdf21ch,0cabac28ah,053b39330h,024b4a3a6h,0bad03605h,0cdd70693h,054de5729h,023d967bfh
dd 0b3667a2eh,0c4614ab8h,05d681b02h,02a6f2b94h,0b40bbe37h,0c30c8ea1h,05a05df1bh,02d02ef8dh
; ============================================================= ;
; 16 BIT x86 SHIFT REGISTER ROUTINE ;
; ============================================================= ;
; ;
; If you don’t have space for the lookup table, you’re ;
; probably not running a 32 bit CPU. Here’s a 16 bit shift ;
; register routine suitable for 88, 86, 186 and 286. ;
; ;
; ============================================================= ;
calc_CRC proc
push bx
next_word:
lodsw ; get next byte, inc SI
xor dx,ax ; XOR data into CRC
mov bl,16 ; bit counter
next_bit:
shr di,1 ; next LS bit to carry
rcr dx,1
jnb no_xor
no_xor:
dec bl
jne next_bit
pop bx
ret
calc_CRC endp
; ============================================================= ;
; 32 BIT x86 SHIFT REGISTER ROUTINE ;
; ============================================================= ;
; ;
; The shift loop is so compact that fetching the data becomes ;
; a significant overhead. Make sure the data is dword aligned, ;
; if necessary by running the CRC on bytes until it is. ;
; ;
; ============================================================= ;
; Enter with CRC or seed in EDX, EDS:ESI pointer to data, ECX count
; Return CRC in EDX, EAX trashed, ECX zero
calc_CRC proc
push ebx
next_dword:
lodsd ; get next data, inc SI
xor edx,eax ; XOR data into CRC
mov bl,32 ; bit counter
next_bit:
shr edx,1 ; next LS bit to carry
jnb no_xor
no_xor:
dec bl
jne next_bit
sub ecx,4
jne next_dword
pop ebx
ret
calc_CRC endp
# ============================================================= #
# MIPS ASSEMBLER SHIFT REGISTER ROUTINE #
# ============================================================= #
# #
# A similar program flow should work for MIPS. I am #
# inexperienced with MIPS, so the following should be #
# regarded as a guideline only. #
# #
# ============================================================= #
# registers used:
# R8, CRC magic number (constant)
# R9, pointer to data
# R10, counter for data
# R11, enter with CRC or seed, exit with new CRC
# R12, temporary scratch data
# R13, temporary scratch data
# Assume data is DWORD aligned
...
LUI $8,0xEDB8 # get the magic number
ORI $8,$8,0x8320 # assembled in R8
next_dword:
LW $12,0x0($9) # get next data dword
ADDIU $9,$0,4 # bump pointer
XOR $11,$11,$12 # XOR data into CRC
/*******************************************/
/* */
/* Example CRC algorithm with lookup table */
/* */
/*******************************************/
unsigned long CalcCRC (unsigned long crc, char *buffer, int length)
{
int I;
for (I=0; I<length; I++)
{
crc = (crc >> 8) ^ crc_table[*buffer++ ^ (crc & 0xFF)];
}
return crc;
}
/*************************************************/
/* */
/* A compact but slower version using shifts ... */
/* */
/*************************************************/
unsigned long CalcCRC (unsigned long crc, char *buffer, int length)
{
int i,j ;
for (i=0; i<length; i++)
{
crc = crc ^ *buffer++ ;
for (j=0; j<8; j++)
{
if (crc & 1)
crc = (crc>>1) ^ 0xEDB88320 ;
else
crc = crc >>1 ;
}
}
return crc ;
}
; End Of File
[TBD]
Index
Index
Numerics connect
0x01 ACK .......................................................5, 9 communication .......................................... 18
0x02 Enable ...................................................... 10 power ......................................................... 18
and 0x0A Device State .............................. 22
0x03 Disable ..................................................... 10 D
and 0x0A Device State .............................. 22 Data
0x04 Self Test ................................................... 10 0xC0 Define Region .................................. 12
0x05 Request GAT Report ............................... 11 0xC1 Define Template .............................. 13
0x06 Power Status ......................................18, 19 0xC2 Print Ticket ...................................... 14
priority ......................................................... 4 0xC8 Metrics ............................................. 28
0x07 GAT Data ................................................. 20 0xCA File Transfer .................................... 17
0x08 Calculate CRC ......................................... 11 Data, 0x07 GAT Data ....................................... 21
and 0x09 CRC Data ................................... 21 DFU standard ...................................................... 2
0x09 CRC Data Diagnostic
and 0x08 Calculate CRC ........................... 11 0xC4 Failure Status ................................... 24
0x09 CRC Data ................................................. 21 diagnostics
0x0A Device State ............................................ 22 data, GAT .................................................. 20
device disabled .......................................... 10 diagnostic commands ..........................10, 47
0x85 Failure Status Disable
and 0x04 Self Test ..................................... 10 0x0A Device State ..................................... 22
priority ......................................................... 4 disable device ................................................... 10
0xA0 Pay Coin(s) .......................... 12, 13, 14, 15 disconnect
0xA1 Failure Status .......................................... 23 communication .......................................... 18
0xC0 Define Region ......................................... 12 power ......................................................... 18
0xC1 Define Template ...................................... 13
E
0xC3 Form Feed ............................................... 15
enable device .................................................... 10
0xC4 Failure Status
events
and NVM ..................................................... 3
0xC5 Ticket Print Status ................................... 24 common ....................................................... 5
definition ..................................................... 5
0xC7 Request Printer Metrics ........................... 15
list .............................................................. 18
0xC8 Metrics .................................................... 28
Ext. Power, 0x06 Power Status ........................ 19
0xC9 Graphic Transfer Setup ........................... 16
external power ............................................18, 19
0xCA File Transfer ........................................... 17
0xCB Printer Status .......................................... 29 F
F1, 0xC5 Ticket Print Status ............................. 25
A
F2, 0xC5 Ticket Print Status ............................. 25
ACK, see 0x01 ACK or acknowledgement
F3, 0xC5 Ticket Print Status ............................. 25
auditing data ...................................................... 20
File Size, 0xC9 Graphic Transfer Setup ........... 16
B Firmware, 0xC4 Failure Status ......................... 23
battery-backup .................................................... 3 form feed ........................................................... 15
C G
Chassis, 0xCB Printer Status ............................ 29 GAT .................................................................. 11
commands GET/SET features ............................................... 3
common ....................................................... 4 Graphic, 0xC6 Transfer Status ......................... 26
definition ...................................................... 4 graphics
execution ...................................................... 8 file transfer ................................................ 17
listing ........................................................... 8 transfer setup ............................................. 16
gsa-p0069.001.01
Released: 2006/03/24
Page 61
© 2005 - 2006 Gaming Standards Association (GSA)