User Tag List

Страница 7 из 94 ПерваяПервая ... 34567891011 ... ПоследняяПоследняя
Показано с 61 по 70 из 1102

Тема: Emu80 v.4

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 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
    .
    Последний раз редактировалось barsik; 04.04.2017 в 16:04.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    290
    Поблагодарили
    216 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от barsik Посмотреть сообщение
    Понятно, что можно заставить каждую процедуру эмуляции конкретной команды увеличивать какой-то счётчик на число тактов реальной команды. Что это даст, кроме знания сколько тактов исполнилось.
    Без этого вообще невозможно сделать точную эмуляцию. И кстати, условные команды CALL и RET выполняются за разное количество тактов, в зависимости от условия, тоже надо учитывать.

    Цитата Сообщение от barsik Посмотреть сообщение
    Какой цикл эмуляции? Что за цикл?
    Например, мы запускаем эмуляцию 50 раз в секунду по таймеру (или сигналу КСИ). Эмуляция команд процессора происходит в цикле. В нём же мы учитываем, сколько тактов выполнил наш процессор. Как только это число перевалило за 40000, завершаем цикл и ждём следующего срабатывания таймера. Таким образом в секунду мы эмулируем 50*40000=2000000 тактов процессора, что соответствует тактовой частоте 2МГц. В том-же цикле эмуляции нужно эмулировать и другие устройства: экран, звук, в/в магнитофона, последовательный интерфейс и т.д. и т.п.
    Последний раз редактировалось b2m; 04.04.2017 в 14:42.

  4. #3

    Регистрация
    14.05.2013
    Адрес
    г. Москва
    Сообщений
    264
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    14
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У меня просто циклы записи и чтения различаются. Когда процессор выдаёт HLDA вроде бы нормально описано в его доке, важнее как ВТ57 и ВГ75 на это реагируют.

  5. #4

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от uart Посмотреть сообщение
    Когда процессор выдаёт HLDA вроде бы нормально описано в его доке,
    как описано
    но когда и сколько раз этот т2(когда детектится hold) появляется за время каждой команды...

    щас поищу таблицу

  6. #5

    Регистрация
    14.05.2013
    Адрес
    г. Москва
    Сообщений
    264
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    14
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    NEO SPECTRUMAN, каждая команда состоит из одного или нескольких циклов, каждый цикл это обращение к памяти для чтения или записи байта. Так что сколько команде требуется обращений к памяти, столько циклов у команды и есть, соответственно столько и тактов T2 выполняется.

  7. #6

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от uart Посмотреть сообщение
    NEO SPECTRUMAN, каждая команда состоит из одного или нескольких циклов, каждый цикл это обращение к памяти для чтения или записи байта. Так что сколько команде требуется обращений к памяти, столько циклов у команды и есть, соответственно столько и тактов T2 выполняется.
    каждый машинный цикл состоит из нескольких тактов
    при том количество тактов в них разное

    а т2 (второй такт по счету)))) в каждом только один
    и длиной он 1 такт))))

    + hlda на командах которые пишут результат идет с задержкой

    посмотрите 2 таблицы на страницах
    18 20 27 29
    в кнажачке на которую ссылается Pyk

    - - - Добавлено - - -

    Цитата Сообщение от uart Посмотреть сообщение
    столько циклов у команды и есть, соответственно столько и тактов T2 выполняется.
    ну это да.
    но размер циклов есть только в этой таблице
    я видел еще в одной но не читаемого качества...

    это я на отвечал толком не прочитав выше сказанное...
    Последний раз редактировалось NEO SPECTRUMAN; 04.04.2017 в 23:50.

  8. #7

    Регистрация
    05.04.2013
    Адрес
    Починки, Нижегородская обл.
    Сообщений
    1,371
    Спасибо Благодарностей отдано 
    401
    Спасибо Благодарностей получено 
    647
    Поблагодарили
    255 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    где мне взять список всех команд проца
    разбитых на машинные циклы и их растактовку?
    Вот, нашел ссылку на мануал:
    http://www.hartetechnologies.com/man...20Manual_a.PDF

    Цитата Сообщение от uart Посмотреть сообщение
    важнее как ВТ57 и ВГ75 на это реагируют
    ВременнЫе диаграммы вроде бы тоже в даташитах есть. Были какие-то недокументированные нюансы?

  9. #8

    Регистрация
    14.05.2013
    Адрес
    г. Москва
    Сообщений
    264
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    14
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Pyk Посмотреть сообщение
    ВременнЫе диаграммы вроде бы тоже в даташитах есть. Были какие-то недокументированные нюансы?
    Ну да. Частоты у ВМ80, ВТ57 и ВГ75 не совпадают, у меня вот не получилось такого-же совпадения на Партнере, как на Апогее...

  10. #9

    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,829
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    663
    Поблагодарили
    513 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от uart Посмотреть сообщение
    важнее как ВТ57 и ВГ75 на это реагируют.
    это уже видно на осцилограмме
    и вроде там все стабильно с этим

    - - - Добавлено - - -

    Ага тут табличка покрасивее

  11. #10

    Регистрация
    05.04.2013
    Адрес
    Починки, Нижегородская обл.
    Сообщений
    1,371
    Спасибо Благодарностей отдано 
    401
    Спасибо Благодарностей получено 
    647
    Поблагодарили
    255 сообщений
    Mentioned
    26 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    NEO SPECTRUMAN, можешь подсказать какой вариант написания шестнадцатеричных констант предпочтительнее для дизассеблера Z80?
    Мне встречались написания вида: 0F809h, #F809, $f809
    Под Z80 я сам особо не программировал, все больше ВМ80, поэтому немного озадачен наличием разных вариантов...

Страница 7 из 94 ПерваяПервая ... 34567891011 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)

Похожие темы

  1. Emu80, старые версии
    от Pyk в разделе Эмуляторы отечественных компьютеров
    Ответов: 68
    Последнее: 11.03.2017, 00:33

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •