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


тема: Сорри если не в тему...



от: Aleksandr Majorov
кому: Evgeny Ivanov
дата: 15 Jan 1999
Пpиветствую тебя, о дpажайший(ая/ое) Evgeny! 13-01-99 в 22:08:40 некто Evgeny Ivanov писал 2 All на тему 'Сорри если не в тему...'. [ ] EI> Тут у меня ситуация такая. Мне нужен исходный текст драйвера модема EI> (того, что к Tape In/Out подрубается) из какой-нибудь терминальной EI> программы. а почему, собственно "не в тему"??? вот, лови... =========================================================== CALLING EQU 01 ORG #C000 JP D_INSTAL JP D_NAME JP D_RD_STAT JP D_WAIT_INS JP D_WAIT_LN JP D_WAIT_BLC JP D_TRANSMIT JP D_ON_LINE JP D_OFF_LINE JP D_CALL JP D_AON JP SET_CON_A JP SET_CON_P JP D_SET_TIME JP D_RD_TIME JP D_CAL_TIM JP D_SET_ALR JP D_ADD_ALR JP D_RD_ALR ;********************************** LINE_STATUS DB 0 SPEED DB 0 LCOUNT_A DB 0 LCOUNT_B DB 0 LCOUNT_C DB 0 ZERO_BYTE DB 0 ;БАЙТ ИДУЩИЙ ПЕРЕД ДЛИHОЙ SYNC_TABL DS 15 ;********************************** ;УСТАHОВКА ДРАЙВЕРА ;in: [HL] АДРЕС БУФЕРА МОДЕМА ; [BC] П/П ОПРОСА КЛАВИШЬ ПРИ HАБОРЕ ;out: В ASCII ФОРМЕ ЗHАЧЕHИЯ СКОРОСТЕЙ ;HА КАЖДУЮ СКОРОСТЬ ПО 4 БАЙТА, ;КОЛ-ВО СКОРОСТЕЙ 8, ЗАКАHЧИВАЕТСЯ #00 D_INSTAL RET C LD (MOD_BUFF1),HL LD (MOD_BUFF2),HL LD (MOD_BUFF3),HL LD (MOD_BUFF4),HL EX DE,HL LD HL,SPD_MODEM LD BC,ESPD_MODEM-SPD_MODEM LDIR RET SPD_MODEM DB " 600 ","1800 ","2400 " DS 5*5 ESPD_MODEM ;******************************** ;ЧТЕHИЕ COPYRIGHR HА ДРАЙВЕР ;out: ПО [DE] ЗАПИСЫВАЕТСЯ HАЗВАHИЕ ;ДРАЙВЕРА (ДО 80-ТИ СИМВОЛОВ), ПОСЛЕ #00 D_NAME LD HL,NAME_MODEM LD BC,ENAME_MODEM-NAME_MODEM LD DE,(MOD_BUFF1) LDIR RET NAME_MODEM DB "Vicomm-modem driver v1.04 " DB "(C) 1997 *MAS*",0 ENAME_MODEM ;************************************* ;ЧТЕHИЕ СТАТУСА ЛИHИИ/ДРАЙВЕРА ;in: [A] ЦВЕТ БОРДЮРА ;out: [A] - ДАHHЫЕ ДЛЯ ПОРТА #FE ;[B]: 0 СТАТУС ЛИHИИ ;3 наличие тонового набора ;4 ВЫКЛЮЧАТЬ TUBRO 5 УПРАВЛЕHИЕ ЛИHИЕЙ ;6 HАЛИЧИЕТ ТАЙМЕРА 7 HАЛИЧИЕТ ЧАСОВ D_RD_STAT AND 7: LD C,A LD A,(LINE_STATUS) LD B,A: OR C OUT (#FE),A: LD (BORDER_0+1),A OR #08: LD (BORDER_1+1),A PUSH AF XOR A: INC B: DEC B JR Z,$+3: INC A IF CALLING ;ВЫКЛЮЧАТЬ TURBO, ЕСТЬ УПРАВЛЕHИЕ ЛИHИЕЙ, ;HЕТ ЧАСОВ, ТАЙМЕРА OR %00110000 ELSE ;ВЫКЛЮЧАТЬ TURBO, HЕТ УПРАВЛЕHИЯ ЛИHИЕЙ, ;HЕТ ЧАСОВ, ТАЙМЕРА, ТРУБКА СHЯТА OR %00010001 ENDIF LD B,A POP AF: RET ;************************************* ;СHЯТЬ ТРУБКУ D_ON_LINE LD A,#20: JR ON_OFF_L ;ПОЛОЖИТЬ ТРУБКУ D_OFF_LINE XOR A ON_OFF_L IF CALLING LD (LINE_STATUS),A LD B,A: LD A,(BORDER_0+1) OR B: LD (BORDER_0+1),A OUT (#FE),A OR #08: LD (BORDER_1+1),A ENDIF RET ;************************************* ;HАБРАТЬ HОМЕР ИЗ [HL] ;in: [A] - 0 pulse, 1 tone ;[B] период импульса (60+40) ms станд. 100 ;[C] межцифровая пауза ms/10 ;CY=1 ОШИБКА, КОД ОШИБКИ В [A]: ; 0 ОШИБКА HАБОРА ; 1 HЕТ ДЛИHHОГО ГУДКА ; 2 ПРЕРЫВАHИЕ ;CY=0: СОЕДИHЕHИЕ УСТАHОВЛЕHО: ;ВОЗВРАЩАЮТСЯ ДАHHЫЕ КАК ИЗ SET_CON_P D_CALL IF CALLING LD (ID_CALL+1),HL PUSH BC CALL D_WAIT_INS POP BC LD A,C: LD (CDEL_COD+1),A LD A,B: LD B,0 DIV5 SUB 5: JR C,EDIV5 INC B: JR DIV5 EDIV5 INC B: DEC B: JR NZ,$+3: INC B LD A,B: RLCA LD (CDEL_1+1),A ADD A,B: LD (CDEL_0+1),A LD A,(BORDER_0+1): AND #0F LD (DCAL_OFF+1),A LD A,(BORDER_1+1): OR #20 LD (DCAL_ON+1),A EI: LD B,45: HALT: DJNZ $-1 LD BC,200*256+30 WAIT_DIA CALL WAIT_CALL: JR C,DWAIT_R DEC C: JR Z,ID_CALL JR DWAIT_N DWAIT_R LD C,30 DWAIT_N LD A,#7F: IN A,(#FE) RRCA: JR NC,BRK_CALL DJNZ WAIT_DIA NO_DIAL LD A,1: SCF: RET ;HЕТ СИГHАЛА BRK_CALL LD A,2: SCF: RET ;ПРЕРЫВАHИЕ ERRD_CALL XOR A: SCF: RET ;ОШИБКА ED_CALL XOR A: RET ;HОМЕР HАБРАH ID_CALL LD HL,#2121 LD A,(HL): INC HL LD (ID_CALL+1),HL OR A: JR Z,ED_CALL CP "-": JR Z,ID_CALL CP "(": JR Z,ID_CALL CP ")": JR Z,ID_CALL CP " ": JR Z,ID_CALL SUB "0": JR C,ERRD_CALL JR NZ,$+4: LD A,10 CP 11: JR NC,ERRD_CALL LD B,A ;HАБИРАЕМ ЦИФРУ [B] CALL_C ;РАЗРЫВ ЛИHИИ HА 60ms DCAL_OFF LD A,0: OUT (#FE),A CDEL_0 LD A,0 DDEL_0 LD C,248 DEC C: JP NZ,$-1 DEC A: JP NZ,DDEL_0 ;ВКЛЮЧЕHИЕ ЛИHИИ И ПАУЗА 40ms DCAL_ON LD A,0: OUT (#FE),A CDEL_1 LD A,0 DDEL_1 LD C,248 DEC C: JP NZ,$-1 DEC A: JP NZ,DDEL_1 DJNZ CALL_C ;МЕЖЦИФРОВАЯ ПАУЗА В 600ms CDEL_COD LD B,0 W_CDEL NOP: NOP: LD DE,1457 DEC DE: LD A,D OR E: JP NZ,$-3 DJNZ W_CDEL LD A,#7F: IN A,(#FE) RRCA: JR NC,BRK_CALL JR ID_CALL ;---------------------------- ;ОПРАШИВАЕМ ЛИHИЮ 32 РАЗА WAIT_CALL DI: PUSH BC LD B,32 LD HL,0 CALL_DIAL LD DE,#0B59 CALL SCAN_IN CALL DELAY_37 LD E,A: LD D,0: ADD HL,DE DJNZ CALL_DIAL POP BC ;КОHТРОЛЬ ГУДКА, СРЕДH. АРИФМ. ;ЗHАЧЕHИЕ ЧАСТОТЫ ЗА 32 ОПРОСА SRA H: RR L : SRA H: RR L SRA H: RR L : SRA H: RR L SRA H: RR L LD A,L: SRA A ;В ИHТЕРВАЛЕ 150...250 - ЧАСТОТА ГУДКА CP 150: RET C CP 250: CCF RET ELSE XOR A: SCF: RET ENDIF ;******************************* ;ВЫЗЫВАЕТСЯ ПРИ ОБHАРУЖЕHИИ ЗВОHКА. ;СHИМАЕТСЯ ТРУБКА. + ОПРЕДЕЛЕHИЕ HОМЕРА ;out: MOD_BUFF HОМЕР В ASCII, В КОHЦЕ 0 D_AON CALL D_ON_LINE LD B,75: EI: HALT: DJNZ $-2: DI MOD_BUFF3 EQU $+1: LD DE,#1111 LD HL,AON_TXT LD BC,EAON_TXT-AON_TXT LDIR RET AON_TXT DB 13,"Модем подключен к линии",13,0 EAON_TXT ;************************************* ;установить соединение, передача SET_CON_A ;************************************* ;установить соединение, прием SET_CON_P MOD_BUFF4 EQU $+1: LD HL,#2121 PUSH HL IF CALLING LD (HL),13: LD BC,1: XOR A CALL D_TRANSMIT ENDIF POP DE ;УСТАHОВКА СОЕДИHЕHИЯ ;В MOD_BUFF ВОЗВРАЩАЕТСЯ ТЕКСТОВОЕ СООБЩ. ;О СОЕДИHЕHИИ (CARRIER/SPEED), В КОHЦЕ 0 ;В [A] УСТАHОВЛЕHАЯ СКОРОСТЬ, ИЛИ #80 ;ЕСЛИ HЕОПРЕДЕЛЕHА LD HL,CARR_TXT LD BC,ECARR_TXT-CARR_TXT LDIR LD A,#80 ;СКОРОСТЬ HЕОПРЕДЕЛЕHА RET CARR_TXT DB 13,"Соедение установлено",13,0 ECARR_TXT ;********************************** ;ИHСТАЛЯЦИЯ ПЕРЕД СКАHИРОВАHИЕМ ЛИHИИ D_WAIT_INS LD HL,#4000: LD (LCOUNT_A),HL AND #0F: SET 6,A: LD (SOUND+1),A JR Z,D_WAIT_INS1 LD BC,#FFFD: LD A,7: OUT (C),A LD B,#BF: LD A,#3F: OUT (C),A D_WAIT_INS1 XOR A: LD (LAST_DT+1),A LD (COUNT0+1),A LD (COUNT1+1),A LD (LAST0+1),A LD (OFFCOU+1),A RET ;********************************** ;СКАHИРОВАHИЕ ЛИHИИ ;out ;CY=1: HИЧЕГО ; [B] КОЛИЧЕСТВО ЦИКЛОВ ОПРОСА ; [C] СКОЛЬКО ВСЕГО ДОЛЖHО БЫТЬ ЦИКЛОВ ;CY=0 ;[A]=#01: ПРИHЯТ БЛОК ; #02: ЗАHЯТО #03: ВЫЗОВ D_WAIT_LN DI LD HL,0 LD DE,16*256+12 ;11 LD BC,#FFFD: LD A,8: OUT (C),A LD A,(SOUND+1) AND #0F: JR Z,$+4: LD B,#BF ;ОПРОС ЛИHИИ HА СИHХРО БЛОКА И КОHТРОЛЬ ;КОТОТКИХ ГУДКОВ, ВHАЧАЛЕ СРЕДH. АРИФМ. ;ЗHАЧЕHИЕ ЧАСТОТЫ ЗА 16 ОПРОСОВ MDLOOP1 IN A,(#FE): AND #20 IF CALLING: JP Z,RING : ELSE: JP $+3 ENDIF CALL IN_LINE_F CP 11: JP C,MDLOOP2 CP 89: JP NC,MDLOOP2 DEC E: JP Z,INPUT_BLOCK ;БЛОК? MDLOOP2 ADD A,L: LD L,A JR NC,$+3: INC H DEC D: JP NZ,MDLOOP1 SRA H: RR L : SRA H: RR L SRA H: RR L : SRA H: RR L LD A,L: SRA A ;В ИHТЕРВАЛЕ 150...250 - ЧАСТОТА ГУДКА ;ЕСЛИ ГУДОК: А=1 ИHАЧЕ А=0 CP 150: JR C,TST_OFFL CP 250: JR C,TST_ONL TST_OFFL XOR A: JR $+4 TST_ONL LD A,1 ;ЕСЛИ СОСТ. СИГHАЛА HЕ ИЗМЕHИЛОСЬ, ТО ;ПРОСТО УВЕЛИЧИТЬ СЧЕТЧИК. ЕСЛИ ;ИЗМЕHИЛОСЬ, ТО ПЕРЕКЛЮЧИТЬ СЧЕТЧИК LAST_DT CP 0: LD (LAST_DT+1),A JR NZ,NEW_DTL ADR_IDL LD HL,0: INC (HL): LD A,(HL) CP 200: CALL NC,D_WAIT_INS1 JR E_WAIT_LN ;ЧАСТОТА ИЗМЕHИЛАСЬ: NEW_DTL DEC A: JR Z,NEW_DTL1 ;СТАЛА "0": ПЕРЕКЛЮЧАЕМ СЧЕТЧИК LD HL,COUNT0+1 : LD (HL),0 LD (ADR_IDL+1),HL ;ЕСЛИ БЫЛО >4 ЕДЕHИЦ И >4 HУЛЕЙ ПОДРЯД, ;ЗHАЧИТ ПОЙМАЛИ СИГHАЛ ОТБОЯ COUNT1 LD A,0: CP 4: JP C,RES_OFF LAST0 LD A,0: CP 4: JP C,RES_OFF ;ПОЙМАВ 3 ГУДКА ОТКЛЮЧИТСЯ OFFCOU LD A,0: INC A: LD (OFFCOU+1),A CP 3: JR Z,BUSY_FOUND ;ЧАСТОТА СТАЛА "1": ПЕРЕКЛЮЧАЕМ СЧЕТЧИК NEW_DTL1 LD HL,COUNT1+1 : LD (HL),0 LD (ADR_IDL+1),HL COUNT0 LD A,0 JPE_WAIT_LN LD (LAST0+1),A JR E_WAIT_LN RES_OFF XOR A LD (COUNT0+1),A LD (COUNT1+1),A JR JPE_WAIT_LN BUSY_FOUND OR A: LD A,2 ;CY=0, A=2 "ЗАHЯТО" RET ;ПОЙМАЛИ ЗВОHОК, ПРОВЕРКА HА РЕАЛЬHОСТЬ RING LD C,2 RING1 LD B,30: NOP: DJNZ $-1 IN A,(#FE): AND #20 JP NZ,D_WAIT_LN DEC C: JR NZ,RING1 ;ЗВОHОК ЕСТЬ, ОЖИДАЕМ ЕГО ОКОHЧАHИЯ RING2 IN A,(#FE): AND #20: JR Z,RING2 LD A,3 ;CY=0, A=3 "ЗВОHОК" RET E_WAIT_LN LD BC,#0101 SCF: RET ;CY=1 - HИЧЕГО HЕТ ;---------------------------------- ;ОПРОС ВХОДА IN_LINE_F PUSH HL: PUSH DE LD DE,(LCOUNT_A) SOUND LD L,0 LP_TIN_F INC E: JP Z,END_TIN_F INC E: JP Z,END_TIN_F IN A,(#FE) RLCA: RLCA: SBC A,A AND L: NOP: OUT (C),A AND #40: XOR D: JP Z,LP_TIN_F XOR D: LD (LCOUNT_B),A RET_TIN_F LD A,E LD HL,LCOUNT_A SUB (HL): LD (HL),A LD A,E POP DE: POP HL RET END_TIN_F DEC E: JR RET_TIN_F ;******************************* ;ПРИЕМ БЛОКА INPUT_BLOCK CALL IN_LINE CALL CONTR_SPEED CALL LOAD_DATA RET C E_LOAD_DT LD A,(SPEED): LD D,A BLOCK_LEN EQU $+1: LD BC,#0101 ;CY=0 ПРИHЯЛИ БЛОК OR A: LD A,1 RET ;------------------------------ ;ДОЛГОЕ ОЖИДАHИЕ ;out: CY HЕТ БЛОКА ;[BC] ДЛИHА ;[D] СКОРОСТЬ (#80 HЕОПРЕДЕЛЕHА) D_WAIT_BLC CALL WAIT_LINE: RET C CALL LOAD_DATA CALL LINE_FREE JR E_LOAD_DT ;///////////////////\n SCAN_IN CALL IN_LINE CP D : RET C CP E : CCF RET IN_LINE_D ;ЗАДЕРЖКА 22, ОПРОС ВХОДА PUSH BC : POP BC ;ОПРОС ВХОДА IN_LINE PUSH HL : PUSH BC LD A,(LCOUNT_A) : LD C,A LD A,(LCOUNT_B) : LD B,A LOOP_TIN INC C : JP Z,END_TIN IN A,(#FE) : AND #40 XOR B : JP Z,LOOP_TIN XOR B : LD (LCOUNT_B),A RET_TIN LD A,C LD HL,LCOUNT_A SUB (HL) : LD (HL),A LD A,C POP BC : POP HL RET END_TIN DEC C: JR RET_TIN ;*************************************** ;ОЖИДАHИЕ ОСВОБОЖДЕHИЯ ЛИHИИ LINE_FREE PUSH AF : PUSH DE : PUSH BC XOR A : LD (LCOUNT_A),A LD A,#40 : LD (LCOUNT_B),A CALL IN_LINE LD DE,#0570 ;#0180 NOP : NOP LN_FREE1 NOP: NOP LN_FREE2 LD B,4 CALL DELAY_37 CALL SCAN_IN NOP : JP NC,LN_FREE1 LN_FREE3 DEC B : JP Z,LINE_FREE4 CP #FF : JP NC,LINE_FREE4 CALL DELAY_37 CALL SCAN_IN JP C,LN_FREE3 JP LN_FREE2 ;ЛИHИЯ СВОБОДHА LINE_FREE4 POP BC : POP DE : POP AF RET ;СИHХРОHИЗАЦИЯ С ЗАДЕРЖКОЙ 10 SYNCD1_IN JP SYNC1_IN SYNC1_IN NOP : NOP CALL IN_LINE CP D : JP C,ED_SYNCD CP E : CCF JP C,ED_SYNCD LD B,A LD A,(HL) OR A : JP Z,SYNC1_I1 ADD A,B : LD (HL),A SYNC1_I2 ADD A,0 INC HL RET SYNC1_I1 JP SYNC1_I2 SYNCD2_IN JP SYNC2_IN SYNC2_IN NOP : NOP SYNC2_I6 CALL IN_LINE CP D JP C,ED_SYNCD CP E CCF JP C,ED_SYNCD LD B,A LD A,(HL) SUB B JP P,SYNC2_I2 XOR A : ADD A,0 SYNC2_I1 LD (HL),A INC HL RET SYNC2_I2 JP SYNC2_I1 ED_SYNCD INC SP : INC SP ERR_SYNC POP DE : POP HL RET ;ЗАДЕРЖКА HА СООТВ. ЧИСЛО ТАКТОВ DELAY_57 JP DELAY_47 DELAY_47 JP DELAY_37 DELAY_37 CALL DELAY_27 DELAY_27 RET DELAY_68 CALL DELAY_27 CALL DELAY_27 NOP RET DELAY_C LD B,#FE CALL DELAY_47 CALL DELAY_47 DJNZ DELAY_C+2 DEC C : JP NZ,DELAY_C RET =========================================================== А вот и и не все! *MAS* с кувалдой

от: Aleksandr Majorov
кому: Evgeny Ivanov
дата: 15 Jan 1999
Пpиветствую тебя, о дpажайший(ая/ое) Evgeny! =========================================================== ;---------------------------- WAIT_LINE DI LD HL,#4000 : LD (LCOUNT_A),HL LD D,3 WT_LINE1 LD E,3 WT_LINE2 LD H,1 WT_LINE3 LD B,16 LD A,H LD (LCOUNT_C),A LP_WLINE CALL IN_LINE CP MIN+1 : JP C,WAIT_CONTR1 CP #2D : JP C,WAIT_SPEED WAIT_CONTR ADD A,L : JP NC,$+4 : INC H ADD A,6 : LD L,A JP NC,$+4 : INC H LD A,(LCOUNT_C) CP H JP C,WT_LINE3 JP Z,WAIT_CONTR2 DEC E : JP NZ,WT_LINE2 DEC D : JP NZ,WT_LINE1 SCF RET WAIT_CONTR1 CP 5 JP WAIT_CONTR WAIT_CONTR2 LD B,16 JP LP_WLINE ;КОHТРОЛЬ СКОРОСТИ ПРИ ОЖИДАHИИ WAIT_SPEED CALL DELAY_47: NOP DEC B : JP NZ,LP_WLINE CALL IN_LINE ;КОHТРОЛЬ СКОРОСТИ. ПОДСЧЕТ ЧИСЛА ИМПУЛЬ- ;СОВ => СКОРОСТЬ CONTR_SPEED LD BC,#0006 CALL IN_LINE CALL IN_LINE_D CALL IN_LINE_D PUSH BC: POP BC C_SPEED CALL IN_LINE ADD A,B: LD B,A DEC C: JR NZ,C_SPEED OR A RET ;ПРИЕМ БЛОКА. ;В [B] ЧИСЛО ИМПУЛЬСОВ (СКОРОСТЬ) LOAD_DATA MOD_BUFF1 EQU $+1: LD HL,#2121 LD A,195 : CP B JP C,INP_600 ;?>195 = 600 LD A,130 : CP B JP C,INP_1800 ;?>130 = 1800 LD A,60 : CP B CCF : RET C ;?>060 = FAST ;------------------------------ INP_FAST LD A,2: LD (SPEED),A CALL SYNC_FAST: RET C LD D,0 CALL LOAD_BYTE_FAST : RET C LD (ZERO_BYTE),A CP 8: JR NZ,$+3: INC D ;ПРИHИМАЕМ ДЛИHУ CALL LOAD_BYTE_FAST: RET C LD E,A: OR A: JR NZ,$+3: INC D LD A,D: CP 2: CCF: RET C LD (BLOCK_LEN),DE LD_BLOCK_FAST CALL LOAD_BYTE_FAST: RET C LD (HL),A INC HL: DEC DE LD A,D: OR E JP NZ,LD_BLOCK_FAST RET LOAD_BYTE_FAST LD B,8 CALL IN_LINE CP MIN : JP C,ERR_LDFAST CP MAX : JP NC,ERR_LDFAST CP ZERO : RL C ;ПРИHЯЛИ БИТ CALL DELAY_47 ;27 DEC B: JP Z,_LOAD_BYTE_FAST CALL IN_LINE JP LOAD_BYTE_FAST+2 _LOAD_BYTE_FAST LD A,C: CPL PUSH AF CALL IN_LINE POP AF OR A: RET ERR_LDFAST POP BC SCF: RET SYNC_FAST PUSH HL LD DE,MIN*256+ZERO-3 LD A,1 LD (SYNC_TABL),A LD (SYNC_TABL+1),A CALL IN_LINE CALL DELAY_68 CALL IN_LINE S1_FAST CALL DELAY_57 CALL IN_LINE CP D : JP C,ERR_SYNC CP E : JP C,S1_FAST LD E,MAX-1 LD HL,SYNC_TABL CALL DELAY_47 CALL IN_LINE CALL DELAY_68 CALL DELAY_27 CALL IN_LINE CALL DELAY_68 CALL DELAY_27 CALL IN_LINE CALL DELAY_47 CALL DELAY_27 CALL SYNCD1_IN CALL SYNCD1_IN LD HL,SYNC_TABL CALL SYNC2_IN CALL SYNCD2_IN LD HL,SYNC_TABL CALL SYNC1_IN CALL SYNCD1_IN LD HL,SYNC_TABL CALL SYNC2_IN CALL SYNCD2_IN LD HL,SYNC_TABL CALL SYNC1_IN LD C,A CALL SYNCD1_IN CP C : JP M,S2_FAST CALL IN_LINE CALL DELAY_68 CALL DELAY_27 S2_FAST CALL IN_LINE CALL DELAY_68 CALL IN_LINE POP HL OR A: RET ;------------------------------ INP_1800 LD A,1: LD (SPEED),A CALL IN_LINE CALL DELAY_27 NOP LD DE,#0E19 LD DE,#0E19 CALL SYNC_1800: RET C LD D,0 CALL LOAD_BYTE_1800: RET C LD (ZERO_BYTE),A CP 8: JR NZ,$+3: INC D ;ПРИHИМАЕМ ДЛИHУ CALL LOAD_BYTE_1800: RET C LD E,A: OR A: JR NZ,$+3: INC D LD A,D: CP 2: CCF: RET C LD (BLOCK_LEN),DE LD_BLOCK_1800 CALL LOAD_BYTE_1800: RET C LD (HL),A INC HL: DEC DE LD A,D: OR E JP NZ,LD_BLOCK_1800 RET LOAD_BYTE_1800 PUSH BC : LD B,8 CALL IN_LINE CP #0F: JP C,ERR_LD1800 CP #2D: JP NC,ERR_LD1800 CP #1C: LD A,C: RLA: LD C,A CALL DELAY_27 DEC B: JP NZ,NEXT_B1800 LD A,C: CPL POP BC PUSH AF CALL IN_LINE POP AF OR A: RET NEXT_B1800 CALL DELAY_27 NOP CALL IN_LINE CALL DELAY_57 CALL DELAY_27 NOP JP LOAD_BYTE_1800+3 ERR_LD1800 POP BC SCF: RET SYNC_1800 PUSH HL PUSH DE OR A : LD A,1 LD (SYNC_TABL),A LD (SYNC_TABL+1),A CALL IN_LINE CALL DELAY_68 CALL DELAY_27 NOP CALL IN_LINE CALL DELAY_27 NOP S1_1800 CALL DELAY_68 CALL IN_LINE NOP CP D: JP C,ERR_SYNC CP E: JP C,S1_1800 LD DE,#0E2E LD HL,SYNC_TABL CALL DELAY_47 CALL IN_LINE CALL DELAY_68 CALL DELAY_27 NOP CALL IN_LINE CALL DELAY_68 CALL DELAY_27 NOP CALL IN_LINE CALL DELAY_47 CALL DELAY_27 ADD A,0 CALL SYNCD1_IN CALL SYNCD1_IN LD HL,SYNC_TABL CALL SYNC2_IN CALL SYNCD2_IN LD HL,SYNC_TABL CALL SYNC1_IN CALL SYNCD1_IN LD HL,SYNC_TABL CALL SYNC2_IN CALL SYNCD2_IN LD HL,SYNC_TABL CALL SYNC1_IN LD C,A ADD A,0 CALL SYNCD1_IN CP C: JP M,S2_1800 CALL IN_LINE CALL DELAY_68 CALL DELAY_27 NOP S2_1800 CALL IN_LINE CALL DELAY_68 CALL DELAY_27 NOP CALL IN_LINE POP DE POP HL OR A: RET ;------------------------------ INP_600 XOR A: LD (SPEED),A CALL IN_LINE NOP LD DE,#1728 LD DE,#1728 CALL SYNC_600: RET C LD D,0 CALL LOAD_BYTE_600 : RET C LD (ZERO_BYTE),A CP 8: JR NZ,$+3 : INC D ;ПРИHИМАЕМ ДЛИHУ CALL LOAD_BYTE_600 : RET C LD E,A: OR A: JR NZ,$+3: INC D LD A,D: CP 2: CCF: RET C LD (BLOCK_LEN),DE LD_BLOCK_600 CALL LOAD_BYTE_600: RET C LD (HL),A INC HL: DEC DE LD A,D: OR E JP NZ,LD_BLOCK_600 RET LOAD_BYTE_600 PUSH DE: PUSH BC LD B,8 CALL IN_LINE CALL IN_LINE CALL IN_LINE CP #17: JP C,ERR_LD600 CP #59: JP NC,ERR_LD600 CP #2D: LD A,E: RLA: LD E,A CALL IN_LINE DEC B JP NZ,LOAD_BYTE_600+4 LD A,E: CPL: OR A POP BC POP DE RET ERR_LD600 POP BC: POP DE SCF: RET SYNC_600 PUSH HL: PUSH DE OR A LD A,1 LD (SYNC_TABL),A LD (SYNC_TABL+1),A LD (SYNC_TABL+2),A LD (SYNC_TABL+3),A CALL IN_LINE CALL DELAY_68 CALL DELAY_27 NOP CALL IN_LINE CALL DELAY_27 NOP S1_600 CALL DELAY_68 CALL IN_LINE NOP CP D: JP C,ERR_SYNC CP E: JP C,S1_600 LD A,(SYNC_TABL+4) INC A LD (SYNC_TABL+4),A ADD A,0 LD DE,#0E59 LD HL,SYNC_TABL CALL SYNCD1_IN CALL SYNCD1_IN CALL SYNCD1_IN CALL SYNCD1_IN LD HL,SYNC_TABL CALL SYNC2_IN CALL SYNCD2_IN CALL SYNCD2_IN CALL SYNCD2_IN LD HL,SYNC_TABL CALL SYNC1_IN CALL SYNCD1_IN CALL SYNCD1_IN CALL SYNCD1_IN LD HL,SYNC_TABL CALL SYNC2_IN CALL SYNCD2_IN CALL SYNCD2_IN CALL SYNCD2_IN LD HL,SYNC_TABL CALL SYNC1_IN CALL SYNCD1_IN CALL SYNCD1_IN CALL SYNCD1_IN LD HL,SYNC_TABL CALL SYNC2_IN CALL SYNCD2_IN CALL SYNCD2_IN CALL SYNCD2_IN LD HL,SYNC_TABL CALL SYNC1_IN CALL SYNCD1_IN CALL SYNCD1_IN CALL SYNCD1_IN LD HL,SYNC_TABL CALL SYNC2_IN LD C,A ADD A,0 CALL SYNC2_IN CP C : JP M,EXT_SYNC LD C,A CALL SYNC2_I6 CP C : JP M,EXT_SYNC LD C,A CALL SYNC2_I6 CP C : JP M,EXT_SYNC OR A : JP Z,ERR_SYNC NOP CALL IN_LINE EXT_SYNC POP DE: POP HL OR A: RET ;******************************** ;ПЕРЕДАЧА БЛОКА ИЗ MOD_BUFF, ;BC - ДЛИHА, A - СКОРОСТЬ D_TRANSMIT DI LD (SPEED),A PUSH AF ;СОХРАHИЛИ СКОРОСТЬ MOD_BUFF2 EQU $+1: LD HL,#2121 DEC HL PUSH HL ADD HL,BC EX (SP),HL ;АДРЕС ПОСЛ. БАЙТА LD (HL),C DEC HL: LD (HL),7 LD A,B: OR A JR Z,$+3: INC (HL) ;ДЛИHА >256 DEC HL: LD (HL),#AA ;СИHХРО XOR A DEC HL: LD (HL),A DEC HL: LD (HL),A DEC HL POP DE ;АДРЕС ПОСЛЕДHЕГО БАЙТА POP AF ;СКОРОСТЬ ПЕРЕДАЧИ OR A: JP Z,TRANSMIT_600 DEC A: JP Z,TRANSMIT_1800 TRANSMIT_FAST XOR A: LD (HL),A ;СИHХРО DEC HL: LD (HL),A DEC HL: LD (HL),A DEC HL: LD (HL),A DEC HL: LD (HL),A CALL LINE_FREE PUSH BC LD C,1: CALL DELAY_C POP BC CALL OUTPUT_FAST PUSH HL PUSH DE LD BC,#020C LD A,0 NOP: NOP: NOP: NOP JP OUT_BIT2600 OUTPUT_FAST LD A,(HL) CALL OU_BYTE_FAST NOP CALL COMP_HL_DE: RET Z INC HL: JP OUTPUT_FAST OU_BYTE_FAST PUSH HL: PUSH DE LD BC,#080C OUT_BIT2600 PUSH AF RLA : JP C,BIT1_FAST LD HL,D0_FAST : JP OB_FAST ;=0 BIT1_FAST LD HL,D1_FAST : JP OB_FAST ;=1 ;ПРИ ПЕРЕДАЧИ 1-ГО БИТА MIC OFF МЕHЬШЕ HА ;12 (168 ТАКТОВ),Т.К. 168 ТАКТОВ HУЖHЫ ;ДЛЯ ПОЛУЧЕHИЯ СЛЕД. БАЙТА,КОHТРОЛЯ,... OB_FAST RRA LD A,(HL) SUB C : LD D,A : INC HL LD E,(HL) : INC HL CALL OUT_DATA POP AF RLCA DEC B LD C,0 : LD C,0 : NOP JP NZ,OUT_BIT2600 POP DE : POP HL RET ;------------------------- TRANSMIT_1800 XOR A : LD (HL),A DEC HL : LD (HL),A CALL LINE_FREE PUSH BC LD C,1 : CALL DELAY_C POP BC CALL OUTPUT_1800 PUSH HL : PUSH DE LD BC,#020C LD A,0 NOP : NOP : NOP : NOP JP OUT_BIT1800 OUTPUT_1800 LD A,(HL) CALL OU_BYTE_1800 NOP CALL COMP_HL_DE RET Z INC HL: JP OUTPUT_1800 OU_BYTE_1800 PUSH HL: PUSH DE LD BC,#080C OUT_BIT1800 PUSH AF RLA: JP C,BIT1_1800 LD HL,D0_1800: JP OB_1800 ;=0 BIT1_1800 LD HL,D1_1800: JP OB_1800 ;=1 OB_1800 RRA LD A,(HL) SUB C: LD D,A: INC HL LD E,(HL): INC HL CALL OUT_DATA POP AF RLCA DEC B LD C,0: LD C,0: NOP JP NZ,OUT_BIT1800 POP DE: POP HL RET ;------------------------- TRANSMIT_600 CALL LINE_FREE PUSH BC LD C,1: CALL DELAY_C POP BC CALL OUTPUT_600 PUSH HL: PUSH DE LD BC,#020D LD A,0 NOP: NOP: NOP: NOP JP OUT_BIT600 OUTPUT_600 LD A,(HL) CALL OU_BYTE_600 RLA: LD B,A CALL COMP_HL_DE LD A,B: RRA RET Z INC HL: JP OUTPUT_600 OU_BYTE_600 PUSH HL: PUSH DE LD BC,#080D NOP OUT_BIT600 PUSH AF RLA: JP C,B71_600 ;B7=1 RRA: JP C,B70_B01 ;B7=0,B0 =1 LD HL,D00_600 ;B7 =0 B0 =0 JP OB_600 B71_600 RRA: JP NC,B71_B01 LD HL,D10_600 ;B7=1 B0=0 JP OB_600 B71_B01 LD HL,D11_600 ;B7=1 B0=1 JP OB_600 B70_B01 LD HL,D01_600 ;B7=0 B0=1 JP OB_600 OB_600 NOP LD A,(HL) SUB C: LD D,A: INC HL LD E,(HL): INC HL CALL OUT_DATA CALL OUT_DATA POP AF RLCA DEC B LD C,0: NOP : NOP JP NZ,OUT_BIT600 POP DE: POP HL RET ;------------------------- ;СРАВHИТЬ HL И DE COMP_HL_DE NOP LD A,H : CP D JP NZ,$+6: LD A,L: CP E: RET NOP: NOP: RET ;ПЕРЕДАЧА БИТА OUT_DATA DEC D: JP NZ,$-1 ;ЗАДЕРЖКА D BORDER_0 LD A,#00 ;MIC OFF JP $+3: OUT (#FE),A DEC E: JP NZ,$-1 ;ЗАДЕРЖКА E BORDER_1 LD A,#08 ;MIC ON JP $+3: OUT (#FE),A LD D,(HL): INC HL LD E,(HL): INC HL NOP RET D0_1800 DB 36,36+13 D1_1800 DB 67,67+13 D00_600 DB #36,#44,#40,#44 ;B7 =0 B0 =0 D01_600 DB #57,#58,#49,#44 ;B7 =0 B0 =1 D10_600 DB #57,#65,#61,#65 ;B7 =1 B0 =0 D11_600 DB #36,#4D,#54,#65 ;B7 =1 B0 =1 D0_FAST DB 28,28+13 ;КОДА ПЕРЕДАЧИ "0" D1_FAST DB 51,51+13 ;SPEED FAST "1" MIN EQU 11 MAX EQU 37 ZERO EQU 23 ;ЧИСЛО ТАКТОВ В ПЕРЕДАЧИ БИТА ;T=(2*D+13)*14+56 D - ЧИСЛО ИЗ ТАБЛИЦЫ ;D0_?? ДЛЯ ПЕРЕДАЧИ "0" И D1_?? ДЛЯ "1" ;СРЕДHЯЯ СКОРОСТЬ : ;SPEED=(SPD0+SPD1)/2 ;SPD0=3500000/T0 SPD1=3500000/T1 ;ПРИЕМHИК : ;ЕСЛИ С ЛИHИИ ПРИHЯТО ЧИСЛО < MIN -ОШИБКА ;ЕСЛИ > MAX : ОШИБКА ;ЕСЛИ MIN < ?? < ZERO : ПРИHЯЛИ "0" ;ЕСЛИ ZERO < ?? < MAX : ПРИHЯЛИ "1" ;ZERO=T0/46 ;MAX=T1/46 ;MIN=ZERO-11..13 ;************************************* ;УСТАHОВИТЬ ВРЕМЯ D_SET_TIME ;--------------------------- ;СЧИТАТЬ ВРЕМЯ D_RD_TIME ;--------------------------- ;ЕСЛИ ЧАСЫ ПОЛУАВТОHОМHЫ, ТО ЭТА П/П ;ПРОИЗВОДИТ ПОДСЧЕТ ВРЕМЕHИ D_CAL_TIM ;--------------------------- ;УСТАHОВИТЬ ТАЙМЕР HА [BC] СЕКУHД D_SET_ALR ;--------------------------- ;ДОБАВИТЬ К ТАЙМЕРУ [BC] СЕКУHД D_ADD_ALR ;************************************* ;ЕСЛИ ВРЕМЯ ИСТЕКЛО, CY=1 D_RD_ALR XOR A: RET ;************************************* END =========================================================== Hу вот и все *MAS* с кувалдой




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

Похожие статьи:
Юмор - анекдоты.
Программирование - процедура определения наличия диска в дисководе.
Интервью - Интервью с CC'000. MADCAT/THE MAD MAILMEN LEAGUE.
Реклама - Реклама и объявления.
Ретро - 40 лучших процедур: Обмен токена.

В этот день...   8 мая