Код:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.06A/WIN #
# #
# Compile time = 23/Jan/2008 16:05:18 #
# Target option = Z80 #
# Memory model = large #
# Source file = d:\java\javaonzx\nextgen\crc.c #
# List file = d:\java\javaonzx\nextgen\debug\list\crc.lst #
# Object file = d:\java\javaonzx\nextgen\debug\obj\crc.r01 #
# ASM file = d:\java\javaonzx\nextgen\debug\list\crc.s01 #
# Command line = -v0 -ml -uua -OD:\java\javaonzx\NextGen\Debug\Obj\ #
# -e -K -w -g -s9 -RCODE -r0i #
# -LD:\java\javaonzx\NextGen\Debug\List\ -q -t8 -x #
# -AD:\java\javaonzx\NextGen\Debug\List\ -X #
# -IC:\zx\IAR\EW23\z80\inc\ #
# D:\java\javaonzx\NextGen\crc.c #
# #
# Copyright 2001 IAR Systems. All rights reserved. #
##############################################################################
\ 0000 NAME crc(16)
\ 0000 RSEG CODE(0)
\ 0000 PUBLIC CalcCRC32
\ 0000 EXTERN ?CLZ80L_4_06_L00
\ 0000 EXTERN ?L_AND_L03
\ 0000 EXTERN ?L_NOT_L03
\ 0000 EXTERN ?L_NEG_L03
\ 0000 EXTERN ?L_XORASG_L03
\ 0000 EXTERN ?SL_RSHASG_L03
\ 0000 RSEG CODE
\ 0000 CalcCRC32:
1 //crc.c
2 //Алгоритм вычисления CRC32 для файла UDI
3 //Начальное значение CRC = 0xFFFFFFFF (-1l).
4 //Функция обновления CRC32 для одного байта Symbol:
5
6 long CalcCRC32(long CRC, unsigned char Symbol)
7 {
\ 0000 DDE5 PUSH IX
\ 0002 C5 PUSH BC
\ 0003 D5 PUSH DE
\ 0004 F5 PUSH AF
\ 0005 F5 PUSH AF
8 long temp;
9 int k;
10 CRC ^= -1l ^ Symbol;
\ 0006 210400 LD HL,4
\ 0009 39 ADD HL,SP
\ 000A E5 PUSH HL
\ 000B 210E00 LD HL,14
\ 000E 39 ADD HL,SP
\ 000F 6E LD L,(HL)
\ 0010 010000 LD BC,0
\ 0013 61 LD H,C
\ 0014 CD0000 CALL ?L_NOT_L03
\ 0017 EB EX DE,HL
\ 0018 E1 POP HL
\ 0019 CD0000 CALL ?L_XORASG_L03
11 for(k = 8; k--;)
\ 001C DD210800 LD IX,8
\ 0020 ?0001:
\ 0020 DDE5 PUSH IX
\ 0022 E1 POP HL
\ 0023 7D LD A,L
\ 0024 B4 OR H
\ 0025 210400 LD HL,4
\ 0028 39 ADD HL,SP
\ 0029 DD2B DEC IX
\ 002B 283F JR Z,?0000
\ 002D ?0002:
12 { temp = -(CRC & 1), CRC >>= 1, CRC ^= 0xEDB88320ul & temp; }
\ 002D 5E LD E,(HL)
\ 002E EB EX DE,HL
\ 002F 7D LD A,L
\ 0030 E601 AND 1
\ 0032 6F LD L,A
\ 0033 2600 LD H,0
\ 0035 4C LD C,H
\ 0036 41 LD B,C
\ 0037 CD0000 CALL ?L_NEG_L03
\ 003A E5 PUSH HL
\ 003B 210200 LD HL,2
\ 003E 39 ADD HL,SP
\ 003F D1 POP DE
\ 0040 73 LD (HL),E
\ 0041 23 INC HL
\ 0042 72 LD (HL),D
\ 0043 23 INC HL
\ 0044 71 LD (HL),C
\ 0045 23 INC HL
\ 0046 70 LD (HL),B
\ 0047 23 INC HL
\ 0048 3E01 LD A,1
\ 004A CD0000 CALL ?SL_RSHASG_L03
\ 004D E5 PUSH HL
\ 004E 01B8ED LD BC,60856
\ 0051 C5 PUSH BC
\ 0052 012083 LD BC,33568
\ 0055 C5 PUSH BC
\ 0056 210600 LD HL,6
\ 0059 39 ADD HL,SP
\ 005A 5E LD E,(HL)
\ 005B 23 INC HL
\ 005C 56 LD D,(HL)
\ 005D 23 INC HL
\ 005E 4E LD C,(HL)
\ 005F 23 INC HL
\ 0060 46 LD B,(HL)
\ 0061 EB EX DE,HL
\ 0062 CD0000 CALL ?L_AND_L03
\ 0065 EB EX DE,HL
\ 0066 E1 POP HL
\ 0067 CD0000 CALL ?L_XORASG_L03
\ 006A 18B4 JR ?0001
\ 006C ?0000:
13 CRC ^= -1l;
\ 006C 01FFFF LD BC,65535
\ 006F 59 LD E,C
\ 0070 50 LD D,B
\ 0071 CD0000 CALL ?L_XORASG_L03
14 return CRC;
\ 0074 5E LD E,(HL)
\ 0075 23 INC HL
\ 0076 56 LD D,(HL)
\ 0077 23 INC HL
\ 0078 4E LD C,(HL)
\ 0079 23 INC HL
\ 007A 46 LD B,(HL)
\ 007B EB EX DE,HL
15 }
\ 007C F1 POP AF
\ 007D F1 POP AF
\ 007E F1 POP AF
\ 007F F1 POP AF
\ 0080 DDE1 POP IX
\ 0082 C9 RET
\ 0083 END
S Y M B O L - T A B L E
=======================
#include file(s):
[ 1] d:\java\javaonzx\nextgen\debug\obj\crc.r01
Symbol Type Class Defline Refline(s)
------ ---- ----- ------- ----------
CalcCRC32 function public 7 7
Errors: none
Warnings: none
Code size: 131
Constant size: 0
Static variable size: Data(0) Iram(0)