Извиняюсь, но я такой тупой, что ничего не понял... Какой цикл эмуляции? Что за цикл?Цитата:
Сообщение от b2m
Эмуляция делается так. Эмулятор считывает байт - код команды. Затем табличным методом уходит на подпрограмму её эмуляции. В этой п/п-мме (их 256, а для префиксных Z80 делается 2-рой переход) соответственно меняются регистры и эмулируемое ОЗУ ЭВМ. В конце этой маленькой процедуры эмуляции стоит макрокоманда NEXTK?? после исполнения которой выполняется команда JMP перехода по адресу из ячейки где лежит адрес главной петли прогона (т.к переходы разные при STEP,RUN и TURBO). И всё повторяется уже для следующей команды. Какие тут циклы и какие такты Z80 команд? Понятно, что можно заставить каждую процедуру эмуляции конкретной команды увеличивать какой-то счётчик на число тактов реальной команды. Что это даст, кроме знания сколько тактов исполнилось.
Т.к время эмуляции команды намного меньше, чем время паузы добавляемое после каждой команды, то после каждой команды я загружаю в BL число её тактов. А на входе главной петли стоит тормозилка, которая прогоняет столько циклов декремента до 0 константы тормозилки, сколько тактов было в предыдущей команде. Константа тормозилки от 1 до 65536. В версиях выпущенных до 1998 было ограничение тормозилки до 4000. После ограничение снял, т.к для ПЕНТИУМ уже не хватало диапазона торможения.
Привожу исходник петли эмуляции и примеры эмуляции 3-х команд в эмуляторе ОРИОНА. Как видите регистровые команды эмулируются 4-мя командами 80x86. Команды КР580 для ОЗУ - ~10-ю командами, а сложные команды Z80 - до 30 команд 80x86-го. Главная петля такая простая только при тормозилке 0, когда выжимается 150 МГЦ процессора Z80. Реальная петля сложнее, там считаются команды, чтобы эмулировать INT 50 ГЦ, оценивается флаг DI и делается пауза на время пропорциональное числу тактов предудущей команды.
Как мне использовать Вашу идеологию торможения или идеологию Pyk?
Код:; ──────────────────────────────────────────────
; петля прогона при TORMOZ =0
TGO_BAN: GET_ES SI ; сюда вылет после команд меняющ.банку
TGO_NOB: ; сюда вылет после команд не мен.банку
MOV BL,ES:[SI]
MOV BP,SI
INC SI
XOR BH,BH
SHL BX,1 ; умножить на 2
JMP [BX+word ptr VECT_580]
; ──────────────────────────────────────────────
@47: MOV BX,DI ; LD B,A
MOV BH,AL
MOV DI,BX
NEXTK4P ; Пауза для 4-тактовых команд
; ──────────────────────────────────────────────
@70: MOV BX,DI ; LD (HL),B
MOV BYTE_TO,BH
MOV BX,DX
if_wr_hi ; BP= адрес начала кода команды
@70_2: MOV BX,DI
XCHG SI,DX
GET_ES SI
MOV ES:[SI],BH
XCHG SI,DX
CMP DX,scr_low
JC @70_1
CMP DX,scr_ovr
JNC @70_1
MOV BX,DX
JMP SCREEN ; запись 1-го байта в экран (BYTE_TO, в BX=адрес)
@70_1: NXTK_B7 ; Пауза для 7-тактовых команд
; ──────────────────────────────────────────────
@FD_36: MOV BP,AX ; LD (IY+disp),nn
MOV BX,ES:[SI] ; диспласемент 'disp'
INC SI
INC SI
MOV AL,BH ; nn
MOV ES,AX
XOR BH,BH
OR BL,BL
JS @FD36_2
ADD BX,_REG_IY
@FD36_0: MOV AX,ES
GET_ES BX
MOV ES:[BX],AL
MOV BYTE_TO,AL
MOV AX,BP
if_noscr @DD70_3
JMP SCREEN ; запись одного байта в экран байт в BYTE_TO, адрес в BX
@FD36_2: NEG BL
MOV AX,_REG_IY
SUB AX,BX
MOV BX,AX
JMP @FD36_0
@DD70_0: GET_ES BX
MOV BP,AX
MOV AX,DI
MOV ES:[BX],AH
MOV BYTE_TO,AH
MOV AX,BP
if_noscr @DD70_3
JMP SCREEN
@DD70_2: NEG BL
MOV BP,_REG_IX
SUB BP,BX
MOV BX,BP
JMP @DD70_0
@DD70_3: NXTK_B
; ──────────────────────────────────────────────
NXTK_B4 MACRO
MOV BL,4 ; загрузка BL числом для балансировки
JMP [word ptr ADR_LOB]
ENDM
ADR_LOB label WORD ; адрес перехода для команд меняющих тек.банку
DW 0
ADR_LON label WORD ; адрес перехода для команд не меняющих банку
DW 0
; ──────────────────────────────────────────────
if_noscr MACRO ADDR
CMP BX,scr_low
JC ADDR
CMP BX,scr_ovr
JNC ADDR
ENDM
; ──────────────────────────────────────────────
if_wr_hi MACRO
CMP BH,0F4H
jmpnc WRIT_HI
ENDM
; ──────────────────────────────────────────────
; на входе BP должен содержать адрес начала кода команды
WRIT_HI: ; Запись одного байта по адресу выше F400
TEST _PFB,00100000B
JNZ WR_MEM ; если FULL RAM
WR_HI_2:
MOV ES,bank0 ; на входе: BX- адрес, BYTE_TO - байт
AND BL,3
CMP BX,0F800H
jmpnc WR_REG ; BP= адрес начала кода команды
CMP BX,0F500H
JNC H_F500 ; если выше F4FF
CMP BX,0F403H
JNZ F400_1
MOV BL,BYTE_TO ; write F403
MOV L_F403,BL
JMP short NO_REGS
; ──────────────────────────────────────────────
comment \
РАСПРЕДЕЛЕНИЕ РЕГИСТРОВ
DS - seg _TEXT AL - A
ES - seg ORION_MEM SI - PC
SS - seg STACK CX - BC
SI - PC DX - DE
_REG_S - SP ; ячейка ОЗУ BX - HL
AL - A BP - рабочий
AH - флаги КР580
DI - BC
CX - DE
DX - HL
BP - рабочий (при прогоне копия SI, текущий адрес PC)
BX - рабочий
SP - стек 8086
\
; ──────────────────────────────────────────────
VECT_580 LABEL BYTE
DW @00,@01,@02,@03,@04,@05,@06,@07
DW @08,@09,@0A,@0B,@0C,@0D,@0E,@0F
DW @10,@11,@12,@13,@14,@15,@16,@17
DW @18,@19,@1A,@1B,@1C,@1D,@1E,@1F
DW @20,@21,@22,@23,@24,@25,@26,@27
DW @28,@29,@2A,@2B,@2C,@2D,@2E,@2F
DW @30,@31,@32,@33,@34,@35,@36,@37
DW @38,@39,@3A,@3B,@3C,@3D,@3E,@3F
DW @40,@41,@42,@43,@44,@45,@46,@47
DW @48,@49,@4A,@4B,@4C,@4D,@4E,@4F
DW @50,@51,@52,@53,@54,@55,@56,@57
DW @58,@59,@5A,@5B,@5C,@5D,@5E,@5F
DW @60,@61,@62,@63,@64,@65,@66,@67
DW @68,@69,@6A,@6B,@6C,@6D,@6E,@6F
DW @70,@71,@72,@73,@74,@75,@76,@77
DW @78,@79,@7A,@7B,@7C,@7D,@7E,@7F
DW @80,@81,@82,@83,@84,@85,@86,@87
DW @88,@89,@8A,@8B,@8C,@8D,@8E,@8F
DW @90,@91,@92,@93,@94,@95,@96,@97
DW @98,@99,@9A,@9B,@9C,@9D,@9E,@9F
DW @A0,@A1,@A2,@A3,@A4,@A5,@A6,@A7
DW @A8,@A9,@AA,@AB,@AC,@AD,@AE,@AF
DW @B0,@B1,@B2,@B3,@B4,@B5,@B6,@B7
DW @B8,@B9,@BA,@BB,@BC,@BD,@BE,@BF
DW @C0,@C1,@C2,@C3,@C4,@C5,@C6,@C7
DW @C8,@C9,@CA,@CB,@CC,@CD,@CE,@CF
DW @D0,@D1,@D2,@D3,@D4,@D5,@D6,@D7
DW @D8,@D9,@DA,@DB,@DC,@DD,@DE,@DF
DW @E0,@E1,@E2,@E3,@E4,@E5,@E6,@E7
DW @E8,@E9,@EA,@EB,@EC,@ED,@EE,@EF
DW @F0,@F1,@F2,@F3,@F4,@F5,@F6,@F7
DW @F8,@F9,@FA,@FB,@FC,@FD,@FE,@FF
VECT_CB LABEL BYTE
DW @CB_00,@CB_01,@CB_02,@CB_03,@CB_04,@CB_05,@CB_06,@CB_07
DW @CB_08,@CB_09,@CB_0A,@CB_0B,@CB_0C,@CB_0D,@CB_0E,@CB_0F
DW @CB_10,@CB_11,@CB_12,@CB_13,@CB_14,@CB_15,@CB_16,@CB_17
DW @CB_18,@CB_19,@CB_1A,@CB_1B,@CB_1C,@CB_1D,@CB_1E,@CB_1F
DW @CB_20,@CB_21,@CB_22,@CB_23,@CB_24,@CB_25,@CB_26,@CB_27
DW @CB_28,@CB_29,@CB_2A,@CB_2B,@CB_2C,@CB_2D,@CB_2E,@CB_2F
DW @CB_30,@CB_31,@CB_32,@CB_33,@CB_34,@CB_35,@CB_36,@CB_37
DW @CB_38,@CB_39,@CB_3A,@CB_3B,@CB_3C,@CB_3D,@CB_3E,@CB_3F
DW @CB_40,@CB_41,@CB_42,@CB_43,@CB_44,@CB_45,@CB_46,@CB_47
DW @CB_48,@CB_49,@CB_4A,@CB_4B,@CB_4C,@CB_4D,@CB_4E,@CB_4F
DW @CB_50,@CB_51,@CB_52,@CB_53,@CB_54,@CB_55,@CB_56,@CB_57
DW @CB_58,@CB_59,@CB_5A,@CB_5B,@CB_5C,@CB_5D,@CB_5E,@CB_5F
DW @CB_60,@CB_61,@CB_62,@CB_63,@CB_64,@CB_65,@CB_66,@CB_67
DW @CB_68,@CB_69,@CB_6A,@CB_6B,@CB_6C,@CB_6D,@CB_6E,@CB_6F
DW @CB_70,@CB_71,@CB_72,@CB_73,@CB_74,@CB_75,@CB_76,@CB_77
DW @CB_78,@CB_79,@CB_7A,@CB_7B,@CB_7C,@CB_7D,@CB_7E,@CB_7F
DW @CB_80,@CB_81,@CB_82,@CB_83,@CB_84,@CB_85,@CB_86,@CB_87
DW @CB_88,@CB_89,@CB_8A,@CB_8B,@CB_8C,@CB_8D,@CB_8E,@CB_8F
DW @CB_90,@CB_91,@CB_92,@CB_93,@CB_94,@CB_95,@CB_96,@CB_97
DW @CB_98,@CB_99,@CB_9A,@CB_9B,@CB_9C,@CB_9D,@CB_9E,@CB_9F
DW @CB_A0,@CB_A1,@CB_A2,@CB_A3,@CB_A4,@CB_A5,@CB_A6,@CB_A7
DW @CB_A8,@CB_A9,@CB_AA,@CB_AB,@CB_AC,@CB_AD,@CB_AE,@CB_AF
DW @CB_B0,@CB_B1,@CB_B2,@CB_B3,@CB_B4,@CB_B5,@CB_B6,@CB_B7
DW @CB_B8,@CB_B9,@CB_BA,@CB_BB,@CB_BC,@CB_BD,@CB_BE,@CB_BF
DW @CB_C0,@CB_C1,@CB_C2,@CB_C3,@CB_C4,@CB_C5,@CB_C6,@CB_C7
DW @CB_C8,@CB_C9,@CB_CA,@CB_CB,@CB_CC,@CB_CD,@CB_CE,@CB_CF
DW @CB_D0,@CB_D1,@CB_D2,@CB_D3,@CB_D4,@CB_D5,@CB_D6,@CB_D7
DW @CB_D8,@CB_D9,@CB_DA,@CB_DB,@CB_DC,@CB_DD,@CB_DE,@CB_DF
DW @CB_E0,@CB_E1,@CB_E2,@CB_E3,@CB_E4,@CB_E5,@CB_E6,@CB_E7
DW @CB_E8,@CB_E9,@CB_EA,@CB_EB,@CB_EC,@CB_ED,@CB_EE,@CB_EF
DW @CB_F0,@CB_F1,@CB_F2,@CB_F3,@CB_F4,@CB_F5,@CB_F6,@CB_F7
DW @CB_F8,@CB_F9,@CB_FA,@CB_FB,@CB_FC,@CB_FD,@CB_FE,@CB_FF
if Z80
VECT_DD LABEL BYTE
DW @DD_00,@DD_01,@DD_02,@DD_03,@DD_04,@DD_05,@DD_06,@DD_07
DW @DD_08,@DD_09,@DD_0A,@DD_0B,@DD_0C,@DD_0D,@DD_0E,@DD_0F
DW @DD_10,@DD_11,@DD_12,@DD_13,@DD_14,@DD_15,@DD_16,@DD_17
DW @DD_18,@DD_19,@DD_1A,@DD_1B,@DD_1C,@DD_1D,@DD_1E,@DD_1F
DW @DD_20,@DD_21,@DD_22,@DD_23,@DD_24,@DD_25,@DD_26,@DD_27
DW @DD_28,@DD_29,@DD_2A,@DD_2B,@DD_2C,@DD_2D,@DD_2E,@DD_2F
DW @DD_30,@DD_31,@DD_32,@DD_33,@DD_34,@DD_35,@DD_36,@DD_37
DW @DD_38,@DD_39,@DD_3A,@DD_3B,@DD_3C,@DD_3D,@DD_3E,@DD_3F
DW @DD_40,@DD_41,@DD_42,@DD_43,@DD_44,@DD_45,@DD_46,@DD_47
DW @DD_48,@DD_49,@DD_4A,@DD_4B,@DD_4C,@DD_4D,@DD_4E,@DD_4F
DW @DD_50,@DD_51,@DD_52,@DD_53,@DD_54,@DD_55,@DD_56,@DD_57
DW @DD_58,@DD_59,@DD_5A,@DD_5B,@DD_5C,@DD_5D,@DD_5E,@DD_5F
DW @DD_60,@DD_61,@DD_62,@DD_63,@DD_64,@DD_65,@DD_66,@DD_67
DW @DD_68,@DD_69,@DD_6A,@DD_6B,@DD_6C,@DD_6D,@DD_6E,@DD_6F
DW @DD_70,@DD_71,@DD_72,@DD_73,@DD_74,@DD_75,@DD_76,@DD_77
DW @DD_78,@DD_79,@DD_7A,@DD_7B,@DD_7C,@DD_7D,@DD_7E,@DD_7F
DW @DD_80,@DD_81,@DD_82,@DD_83,@DD_84,@DD_85,@DD_86,@DD_87
DW @DD_88,@DD_89,@DD_8A,@DD_8B,@DD_8C,@DD_8D,@DD_8E,@DD_8F
DW @DD_90,@DD_91,@DD_92,@DD_93,@DD_94,@DD_95,@DD_96,@DD_97
DW @DD_98,@DD_99,@DD_9A,@DD_9B,@DD_9C,@DD_9D,@DD_9E,@DD_9F
DW @DD_A0,@DD_A1,@DD_A2,@DD_A3,@DD_A4,@DD_A5,@DD_A6,@DD_A7
DW @DD_A8,@DD_A9,@DD_AA,@DD_AB,@DD_AC,@DD_AD,@DD_AE,@DD_AF
DW @DD_B0,@DD_B1,@DD_B2,@DD_B3,@DD_B4,@DD_B5,@DD_B6,@DD_B7
DW @DD_B8,@DD_B9,@DD_BA,@DD_BB,@DD_BC,@DD_BD,@DD_BE,@DD_BF
DW @DD_C0,@DD_C1,@DD_C2,@DD_C3,@DD_C4,@DD_C5,@DD_C6,@DD_C7
DW @DD_C8,@DD_C9,@DD_CA,@DD_CB,@DD_CC,@DD_CD,@DD_CE,@DD_CF
DW @DD_D0,@DD_D1,@DD_D2,@DD_D3,@DD_D4,@DD_D5,@DD_D6,@DD_D7
DW @DD_D8,@DD_D9,@DD_DA,@DD_DB,@DD_DC,@DD_DD,@DD_DE,@DD_DF
DW @DD_E0,@DD_E1,@DD_E2,@DD_E3,@DD_E4,@DD_E5,@DD_E6,@DD_E7
DW @DD_E8,@DD_E9,@DD_EA,@DD_EB,@DD_EC,@DD_ED,@DD_EE,@DD_EF
DW @DD_F0,@DD_F1,@DD_F2,@DD_F3,@DD_F4,@DD_F5,@DD_F6,@DD_F7
DW @DD_F8,@DD_F9,@DD_FA,@DD_FB,@DD_FC,@DD_FD,@DD_FE,@DD_FF
VECT_FD LABEL BYTE
DW @FD_00,@FD_01,@FD_02,@FD_03,@FD_04,@FD_05,@FD_06,@FD_07
DW @FD_08,@FD_09,@FD_0A,@FD_0B,@FD_0C,@FD_0D,@FD_0E,@FD_0F
DW @FD_10,@FD_11,@FD_12,@FD_13,@FD_14,@FD_15,@FD_16,@FD_17
DW @FD_18,@FD_19,@FD_1A,@FD_1B,@FD_1C,@FD_1D,@FD_1E,@FD_1F
DW @FD_20,@FD_21,@FD_22,@FD_23,@FD_24,@FD_25,@FD_26,@FD_27
DW @FD_28,@FD_29,@FD_2A,@FD_2B,@FD_2C,@FD_2D,@FD_2E,@FD_2F
DW @FD_30,@FD_31,@FD_32,@FD_33,@FD_34,@FD_35,@FD_36,@FD_37
DW @FD_38,@FD_39,@FD_3A,@FD_3B,@FD_3C,@FD_3D,@FD_3E,@FD_3F
DW @FD_40,@FD_41,@FD_42,@FD_43,@FD_44,@FD_45,@FD_46,@FD_47
DW @FD_48,@FD_49,@FD_4A,@FD_4B,@FD_4C,@FD_4D,@FD_4E,@FD_4F
DW @FD_50,@FD_51,@FD_52,@FD_53,@FD_54,@FD_55,@FD_56,@FD_57
DW @FD_58,@FD_59,@FD_5A,@FD_5B,@FD_5C,@FD_5D,@FD_5E,@FD_5F
DW @FD_60,@FD_61,@FD_62,@FD_63,@FD_64,@FD_65,@FD_66,@FD_67
DW @FD_68,@FD_69,@FD_6A,@FD_6B,@FD_6C,@FD_6D,@FD_6E,@FD_6F
DW @FD_70,@FD_71,@FD_72,@FD_73,@FD_74,@FD_75,@FD_76,@FD_77
DW @FD_78,@FD_79,@FD_7A,@FD_7B,@FD_7C,@FD_7D,@FD_7E,@FD_7F
DW @FD_80,@FD_81,@FD_82,@FD_83,@FD_84,@FD_85,@FD_86,@FD_87
DW @FD_88,@FD_89,@FD_8A,@FD_8B,@FD_8C,@FD_8D,@FD_8E,@FD_8F
DW @FD_90,@FD_91,@FD_92,@FD_93,@FD_94,@FD_95,@FD_96,@FD_97
DW @FD_98,@FD_99,@FD_9A,@FD_9B,@FD_9C,@FD_9D,@FD_9E,@FD_9F
DW @FD_A0,@FD_A1,@FD_A2,@FD_A3,@FD_A4,@FD_A5,@FD_A6,@FD_A7
DW @FD_A8,@FD_A9,@FD_AA,@FD_AB,@FD_AC,@FD_AD,@FD_AE,@FD_AF
DW @FD_B0,@FD_B1,@FD_B2,@FD_B3,@FD_B4,@FD_B5,@FD_B6,@FD_B7
DW @FD_B8,@FD_B9,@FD_BA,@FD_BB,@FD_BC,@FD_BD,@FD_BE,@FD_BF
DW @FD_C0,@FD_C1,@FD_C2,@FD_C3,@FD_C4,@FD_C5,@FD_C6,@FD_C7
DW @FD_C8,@FD_C9,@FD_CA,@FD_CB,@FD_CC,@FD_CD,@FD_CE,@FD_CF
DW @FD_D0,@FD_D1,@FD_D2,@FD_D3,@FD_D4,@FD_D5,@FD_D6,@FD_D7
DW @FD_D8,@FD_D9,@FD_DA,@FD_DB,@FD_DC,@FD_DD,@FD_DE,@FD_DF
DW @FD_E0,@FD_E1,@FD_E2,@FD_E3,@FD_E4,@FD_E5,@FD_E6,@FD_E7
DW @FD_E8,@FD_E9,@FD_EA,@FD_EB,@FD_EC,@FD_ED,@FD_EE,@FD_EF
DW @FD_F0,@FD_F1,@FD_F2,@FD_F3,@FD_F4,@FD_F5,@FD_F6,@FD_F7
DW @FD_F8,@FD_F9,@FD_FA,@FD_FB,@FD_FC,@FD_FD,@FD_FE,@FD_FF
VECT_ED LABEL BYTE
DW @ED_00,@ED_01,@ED_02,@ED_03,@ED_04,@ED_05,@ED_06,@ED_07
DW @ED_08,@ED_09,@ED_0A,@ED_0B,@ED_0C,@ED_0D,@ED_0E,@ED_0F
DW @ED_10,@ED_11,@ED_12,@ED_13,@ED_14,@ED_15,@ED_16,@ED_17
DW @ED_18,@ED_19,@ED_1A,@ED_1B,@ED_1C,@ED_1D,@ED_1E,@ED_1F
DW @ED_20,@ED_21,@ED_22,@ED_23,@ED_24,@ED_25,@ED_26,@ED_27
DW @ED_28,@ED_29,@ED_2A,@ED_2B,@ED_2C,@ED_2D,@ED_2E,@ED_2F
DW @ED_30,@ED_31,@ED_32,@ED_33,@ED_34,@ED_35,@ED_36,@ED_37
DW @ED_38,@ED_39,@ED_3A,@ED_3B,@ED_3C,@ED_3D,@ED_3E,@ED_3F
DW @ED_40,@ED_41,@ED_42,@ED_43,@ED_44,@ED_45,@ED_46,@ED_47
DW @ED_48,@ED_49,@ED_4A,@ED_4B,@ED_4C,@ED_4D,@ED_4E,@ED_4F
DW @ED_50,@ED_51,@ED_52,@ED_53,@ED_54,@ED_55,@ED_56,@ED_57
DW @ED_58,@ED_59,@ED_5A,@ED_5B,@ED_5C,@ED_5D,@ED_5E,@ED_5F
DW @ED_60,@ED_61,@ED_62,@ED_63,@ED_64,@ED_65,@ED_66,@ED_67
DW @ED_68,@ED_69,@ED_6A,@ED_6B,@ED_6C,@ED_6D,@ED_6E,@ED_6F
DW @ED_70,@ED_71,@ED_72,@ED_73,@ED_74,@ED_75,@ED_76,@ED_77
DW @ED_78,@ED_79,@ED_7A,@ED_7B,@ED_7C,@ED_7D,@ED_7E,@ED_7F
DW @ED_80,@ED_81,@ED_82,@ED_83,@ED_84,@ED_85,@ED_86,@ED_87
DW @ED_88,@ED_89,@ED_8A,@ED_8B,@ED_8C,@ED_8D,@ED_8E,@ED_8F
DW @ED_90,@ED_91,@ED_92,@ED_93,@ED_94,@ED_95,@ED_96,@ED_97
DW @ED_98,@ED_99,@ED_9A,@ED_9B,@ED_9C,@ED_9D,@ED_9E,@ED_9F
DW @ED_A0,@ED_A1,@ED_A2,@ED_A3,@ED_A4,@ED_A5,@ED_A6,@ED_A7
DW @ED_A8,@ED_A9,@ED_AA,@ED_AB,@ED_AC,@ED_AD,@ED_AE,@ED_AF
DW @ED_B0,@ED_B1,@ED_B2,@ED_B3,@ED_B4,@ED_B5,@ED_B6,@ED_B7
DW @ED_B8,@ED_B9,@ED_BA,@ED_BB,@ED_BC,@ED_BD,@ED_BE,@ED_BF
DW @ED_C0,@ED_C1,@ED_C2,@ED_C3,@ED_C4,@ED_C5,@ED_C6,@ED_C7
DW @ED_C8,@ED_C9,@ED_CA,@ED_CB,@ED_CC,@ED_CD,@ED_CE,@ED_CF
DW @ED_D0,@ED_D1,@ED_D2,@ED_D3,@ED_D4,@ED_D5,@ED_D6,@ED_D7
DW @ED_D8,@ED_D9,@ED_DA,@ED_DB,@ED_DC,@ED_DD,@ED_DE,@ED_DF
DW @ED_E0,@ED_E1,@ED_E2,@ED_E3,@ED_E4,@ED_E5,@ED_E6,@ED_E7
DW @ED_E8,@ED_E9,@ED_EA,@ED_EB,@ED_EC,@ED_ED,@ED_EE,@ED_EF
DW @ED_F0,@ED_F1,@ED_F2,@ED_F3,@ED_F4,@ED_F5,@ED_F6,@ED_F7
DW @ED_F8,@ED_F9,@ED_FA,@ED_FB,@ED_FC,@ED_FD,@ED_FE,@ED_FF
endif
.

