ZXNet эхоконференция «code.zx»


тема: PC <-> ZX link sourse (ZX)



от: Aleksandr Majorov
кому: Dmitriy Dobretsov
дата: 07 Jan 1999

Пpиветствую тебя, о дpажайший(ая/ое) Dmitriy!

Once in morning 07-01-98 04:18:53 somebody Dmitriy Dobretsov has
written to Aleksandr Majorov about 'Гальваническая развязка'.

[ ]
AM>> если интересно могу сорцы кинуть в .code, покажешь
AM>> где можно оптимизнуть..

DD> кинь,если не влом...

Вот кидаю...
Сразу говорю - для ZX я более-менее все оптимизнул,
а для ПЦ - нет...
Тама я вообще все задержки ожидания подбирал
эксперементально, чтоб оно нормально принимало...
Ессно все константы выставились под мой ПЦ (166)

2_FK0: сразу говорю - если сможешь что сказать
по существу, омпимизнуть код и т.п. то нет проблем.
Если-же будешь только кричать что все глюки и МД,
то лучше и не пиши...
Если не можешь предложить альтернативу так хоть
не мешай!


=================================================

;СКАHИРОВАHИЕ PC-ЛИHИИ
;эта п/п вызывается ММД-хой весьма часто...
;если CY=1 нет данных,
;CY=0 - данные приняты, BC - длина

SCAN_PC IN A,(#1F): AND 3: JR Z,PCL_PAS
CP 2: SCF: RET NZ
PCL_ACT LD A,2: LD (PCLINK),A
OUT (#DD),A: SCF: RET

PCL_PAS LD A,(PCLINK): OR A: SCF: RET Z
XOR A: LD (PCLINK),A: OUT (#DD),A
;ПОЙМАЛИ СИHХРОИМПУЛЬС

LD A,3: LD (BAUD),A ;запомнили скорость
;вначале блока идут байты #AA и #55 для контроля
CALL PC_IN: CP #AA: SCF: RET NZ
CALL PC_IN: CP #55: SCF: RET NZ
;затем идет длина блока
CALL PC_IN: LD E,A
CALL PC_IN: LD D,A
LD (BLEN),DE ;длина блока
LD HL,(ABUF) ;адрес буфера
;а теперь пошли данные
PC_IND CALL PC_IN: LD (HL),A
INC HL: DEC DE
LD A,D: OR E: JP NZ,PC_IND
;выставляем регистры и флаги - приняли блок
LD BC,(BLEN) ;длина
LD D,3 ;это номер скорости
LD A,1 ;CY=1, A=1 приняли блок
RET
;************************************

;передача блока длиной BC

;ждем готовности ПЦ
PC_TRANS CALL PCWAIT_0
RET C ;не отвечает
LD A,2: OUT (#DD),A
CALL PCWAIT_1
LD A,0: OUT (#DD),A
RET C ;не отвечает

;передаем синхро
LD A,#AA: CALL PC_OUT
LD A,#55: CALL PC_OUT

;передаем длину блока
LD A,C: CALL PC_OUT
LD A,B: CALL PC_OUT
LD HL,(ABUF)
LD E,C: LD D,B

;полетели данные
PC_OUTD LD A,(HL): CALL PC_OUT
INC HL: DEC DE
LD A,D: OR E: JR NZ,PC_OUTD
OR A: RET
;----------------------------------

;передать байт
PC_OUT EXX: LD B,8: LD C,A
PC_OUT1 LD DE,1000 ;ожидание ответа
PCW0OUT IN A,(#1F): AND 2: JP Z,PCW0OUT1
DEC DE:LD A,D:OR E:JP NZ,PCW0OUT
JR PC_ERR ;ПЦ повис....
PCW0OUT1 LD A,1: RL C: RLA: OUT (#DD),A

LD DE,1000 ;ожидание ответа
PCW1OUT IN A,(#1F):AND 2: JP NZ,PCW1OUT1
DEC DE:LD A,D:OR E:JP NZ,PCW1OUT

;ошибка... снимаем адрес возврата и сразу
;прыгаем наверх с флагом "нет данных"
PC_ERR OUT (#DD),A: POP HL: SCF: RET

PCW1OUT1 XOR A: OUT (#DD),A
DJNZ PC_OUT1
EXX: OR A: RET
;-------------------------------

;прием байта
PC_IN EXX: LD B,8
PC_IN1 LD DE,1000 ;ожидание ответа
PCW1IN IN A,(#1F): AND 2: JP NZ,PCW1IN1
DEC DE:LD A,D:OR E:JP NZ,PCW1IN
JR PC_ERR ;ПЦ повис....

PCW1IN1 IN A,(#1F): RRA: RL C
LD A,2: OUT (#DD),A

LD DE,1000 ;ожидание ответа
PCW0IN IN A,(#1F): AND 2: JP Z,PCW0IN1
DEC DE:LD A,D:OR E:JP NZ,PCW0IN
JR PC_ERR

PCW0IN1 XOR A: OUT (#DD),A
DJNZ PC_IN1
LD A,C: EXX: OR A: RET

;-----------------------

;долгие ожидания ответа ПЦ - вызываются
;перед передачей.
;ждут долго, а то вдруг ПЦ чем-то занят ;-)

;ожидаем пока ПЦ не выставит "0"
PCWAIT_0 LD DE,2000
PCWAIT0 IN A,(#1F): AND 2: RET Z
DEC DE
LD A,D: OR E: JP NZ,PCWAIT0
SCF: RET

;ожидаем пока ПЦ не выставит "1"
PCWAIT_1 LD DE,2000
PCWAIT1 IN A,(#1F): AND 2: RET NZ
DEC DE
LD A,D: OR E: JP NZ,PCWAIT1
SCF: RET
;********************************
=================================================

Hу вот и все *MAS* с кувалдой




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Капля припоя - Disk protector v1.4 (схема).
Вступление - Беларусские новости из мира Спектрума.
Наши новости - О создании списка юзеров.
Оттяг - Вступление от редактора.
Мультипликация на SPECTRUM`e - Спрайты и маски...

В этот день...   25 апреля