mirror of
https://github.com/Pecusx/jataricart.git
synced 2026-05-20 22:33:22 +02:00
58 lines
1.1 KiB
NASM
58 lines
1.1 KiB
NASM
/*
|
|
org $2000
|
|
|
|
mwa #$ffff crc16.crc
|
|
|
|
lda #'B'
|
|
jsr crc16.updCRC
|
|
lda #'N'
|
|
jsr crc16.updCRC
|
|
lda #'E'
|
|
jsr crc16.updCRC
|
|
|
|
jmp *
|
|
*/
|
|
|
|
|
|
.proc crc16
|
|
|
|
crc equ $80
|
|
tmpx equ $82
|
|
tmpy equ $83
|
|
|
|
|
|
|
|
updCRC
|
|
stx tmpx
|
|
sty tmpy
|
|
EOR CRC+1 ; A contained the data
|
|
STA CRC+1 ; XOR it into high byte
|
|
LSR @ ; right shift A 4 bits
|
|
LSR @ ; to make top of x^12 term
|
|
LSR @ ; ($1...)
|
|
LSR @
|
|
TAX ; save it
|
|
ASL @ ; then make top of x^5 term
|
|
EOR CRC ; and XOR that with low byte
|
|
STA CRC ; and save
|
|
TXA ; restore partial term
|
|
EOR CRC+1 ; and update high byte
|
|
STA CRC+1 ; and save
|
|
ASL @ ; left shift three
|
|
ASL @ ; the rest of the terms
|
|
ASL @ ; have feedback from x^12
|
|
TAX ; save bottom of x^12
|
|
ASL @ ; left shift two more
|
|
ASL @ ; watch the carry flag
|
|
EOR CRC+1 ; bottom of x^5 ($..2.)
|
|
TAY ; save high byte
|
|
TXA ; fetch temp value
|
|
ROL @ ; bottom of x^12, middle of x^5!
|
|
EOR CRC ; finally update low byte
|
|
STA CRC+1 ; then swap high and low bytes
|
|
STY CRC
|
|
ldx tmpx
|
|
ldy tmpy
|
|
RTS
|
|
.endp
|