; LAST UPDATE: 20.03.2025 savelij ;[]==========================================================[] ;Процедура печати страницы дампа с тек.смещ. от начала файла ;На вход: ; None ;На выход: ; None FEPrnHEXpage LD HL,PrnHEXinfo PUSH HL LD HL,(FEPageShift) LD (FETempShift),HL ;Запоминаем тек.смещение LD HL,LineBuffer LD BC,0x4E20 .L1 LD (HL),C INC L DJNZ .L1 LD B,0x1C ;Изнач.позиция печати FEPrnHEXl PUSH BC CALL FEPutHLine ;Выводим строку в буфер и на экран POP BC JR C,FEFillDwnHex ;CY-Закончились байты для печати LD HL,(FETempShift) LD DE,0x0010 ;Адрес дампа+16 ADD HL,DE LD (FETempShift),HL LD A,B ADD A,0x08 LD B,A CP 0xE4 JR NZ,FEPrnHEXl PrHEXCr LD HL,CursorTab1 LD A,(HEXmode) OR A JR Z,.L1 LD HL,CursorTab2 .L1 LD A,(IY+CursorX) ADD A,L LD L,A LD A,H ADC A,0x00 LD H,A LD E,(HL) LD D,(IY+CursorY) CALL FESetCursor RET ;Процедура отчистки нижней области экрана FEFillDwnHex LD A,B CP 0xE4 JR Z,PrHEXCr ;Z-нет отчистки LD (FEFPosHex),A LD A,0xE4 SUB B LD (FEFLenHex),A MAKEWINDOW WINSUBOBJ.WOBIND W_FILL 0,0,624,0,COLORI.PANEL FEFPosHex EQU $ - 7 FEFLenHex EQU $ - 3 W_END JR PrHEXCr ;Процедура печати тек.строки в буфер и на экран FEPutHLine LD IXL,0x00 LD IXH,B LD HL,(FEFileLenght) LD BC,(FETempShift) OR A SBC HL,BC RET C LD B,0x10 LD A,H OR A JR NZ,.PutHLn LD A,L CP B JR NC,.PutHLn LD B,L .PutHLn GETPORT WINSP.CPU1 PUSH AF LD DE,(FETempShift) LD A,D ;Выделяем номер страницы AND 0xC0 RLCA RLCA EXX LD E,A ;DE - Адрес страницы в списке LD D,HIGH (PagesList) LD A,(DE) ;Тек.страница SETPORT WINSP.CPU1,,0 EXX RES 7,D ;Вкл.с 0x4000 SET 6,D LD HL,LineBuffer+1 ;буфер строки EXX LD HL,LineBuffer+0x3D ;место для ASCII кодов EXX LD (HL),'0' INC L LD A,(FETempShift+1) CALL FEPutHexNumb LD A,(FETempShift) CALL FEPutHexNumb LD (HL),':' INC L INC L INC L LD A,B OR A JR Z,PutHLp2 FEPutHLoop BIT 7,D JR Z,PutHLp1 RES 7,D SET 6,D EXX INC E ;DE - Адрес страницы в списке LD A,(DE) ;Тек.страница SETPORT WINSP.CPU1,,0 EXX PutHLp1 LD A,(DE) INC DE EXX LD (HL),A INC L EXX CALL FEPutHexNumb ;Процедура конверта INC L INC IXL ;Увелич.кол-во введенных байтов LD A,IXL AND 0x03 JR NZ,.L1 INC L .L1 DJNZ FEPutHLoop PutHLp2 POP AF SETPORT WINSP.CPU1,,0 ;Процедура отчистки закончившихся байтов FEFillHex LD A,0x10 ;Макс.байтов SUB IXL ;Тек.кол-во байтов JR Z,.FillE2 LD B,A LD C,0x20 .FillE1 LD (HL),C INC L LD (HL),C INC L INC L EXX LD (HL),0x20 INC L EXX INC IXL LD A,IXL ;В центре 2 пробела AND 0x03 JR NZ,.L1 INC L .L1 DJNZ .FillE1 .FillE2 LD HL,LineBuffer LD DE,0x0000 LD B,0x4E LD C,IXH LD A,COLORP.PANEL + COLORI.FILES CALL JUMPS.PrnTxtLnNormC OR A RET ;CY-была последняя строка ;Процедура преобразования 8битовых чисел в шестнадц. текст ;На вход: ; HL - адрес буфера ; А - байт ;На выход: ; буфер с текст.числом FEPutHexNumb PUSH AF RRCA RRCA RRCA RRCA AND 0x0F ADD A,0x90 DAA ADC A,0x40 DAA LD (HL),A INC L POP AF AND 0x0F ADD A,0x90 DAA ADC A,0x40 DAA LD (HL),A INC L RET CursorTab1 DEFB 9,10,12,13,15,16,18,19 DEFB 22,23,25,26,28,29,31,32 DEFB 35,36,38,39,41,42,44,45 DEFB 48,49,51,52,54,55,57,58 CursorTab2 DEFB 61,61,62,62,63,63,64,64 DEFB 65,65,66,66,67,67,68,68 DEFB 69,69,70,70,71,71,72,72 DEFB 73,73,74,74,75,75,76,76 ;[]==========================================================[] PrnHEXinfo LD HL,LineH LD DE,ColH LD BC,FreeH LD A,0x01 REPT 0x04 LD (HL),A INC HL LD (DE),A INC DE LD (BC),A INC BC ENDM LD (HL),A LD (DE),A LD (BC),A LD HL,(CurLine) LD DE,LineH INC HL CALL JUMPS.ConvNumTxt16 LD DE,ColH LD A,(IY+CursorX) SRL A INC A CALL JUMPS.ConvNumTxt8 LD HL,0xC000 LD DE,FreeH LD BC,(FEFileLenght) OR A SBC HL,BC CALL JUMPS.ConvNumTxt16 LD HL,ReadyNo LD A,(IY+ReadyFile) OR A JR Z,.L1 LD HL,ReadyYes .L1 LD DE,0x017E LD BC,0x0011 LD A,0x80 CALL JUMPS.PrnTxtLnIFF LD HL,LineH LD DE,0x01AE LD BC,0x0011 LD A,0x80 CALL JUMPS.PrnTxtLnIFF LD HL,ColH LD DE,0x01F8 LD BC,0x0011 LD A,0x80 CALL JUMPS.PrnTxtLnIFF LD HL,FreeH LD DE,0x0248 LD BC,0x0011 LD A,0x80 CALL JUMPS.PrnTxtLnIFF LD IX,EditVBar LD HL,(ELines) LD DE,(EquipLines) OR A SBC HL,DE JR Z,TstLinH LD (ELines),DE CALL JUMPS.InitScrBar LD HL,(CurLine) LD (CLine),HL CALL JUMPS.PrnVScrBar RET TstLinH LD HL,(CLine) LD DE,(CurLine) OR A SBC HL,DE RET Z LD (CLine),DE CALL JUMPS.PrnVScrBar RET LineH DUPL 6,0 ColH DUPL 6,0 FreeH DUPL 6,0 ;[]==========================================================[] HPutSymbol CP 0x08 JP Z,HDeleteByte CP 0x09 JP Z,ChHEXmode LD C,A LD HL,(LineShift) LD E,(IY+CursorX) SRL E LD D,0x00 ADD HL,DE LD A,H CP 0xC0 RET NC LD A,(HEXmode) OR A JR NZ,HPutSymbA LD A,C CP 'a' JR C,.L1 RES 5,A .L1 CP '0' RET C CP 'F'+1 RET NC SUB '0' CP 0x0A JR C,HPutSH1 SUB 0x07 CP 0x0A RET C HPutSH1 LD C,A BIT 0,(IY+CursorX) LD B,0xF0 JR NZ,HPutSH2 LD B,0x0F RLC C RLC C RLC C RLC C HPutSH2 EX DE,HL LD HL,(FEFileLenght) OR A SBC HL,DE EX DE,HL LD A,0x00 JR Z,.L2 LD A,0x01 .L2 EX AF,AF' GETPORT WINSP.CPU1 PUSH AF LD A,H ;Выделяем номер страницы AND 0xC0 RLCA RLCA LD E,A ;DE - Адрес страницы в списке LD D,HIGH (PagesList) LD A,(DE) ;Тек.страница SETPORT WINSP.CPU1,,0 RES 7,H ;Вкл.с 0x4000 SET 6,H EX AF,AF' OR A JR NZ,.L3 LD (HL),A .L3 EX AF,AF' LD A,(HL) AND B OR C LD (HL),A POP AF SETPORT WINSP.CPU1,,0 JR HPrnSymbol HPutSymbA EX DE,HL LD HL,(FEFileLenght) OR A SBC HL,DE EX DE,HL LD A,0x00 JR Z,.L1 LD A,0x01 .L1 EX AF,AF' GETPORT WINSP.CPU1 PUSH AF LD A,H ;Выделяем номер страницы AND 0xC0 RLCA RLCA LD E,A ;DE - Адрес страницы в списке LD D,HIGH (PagesList) LD A,(DE) ;Тек.страница SETPORT WINSP.CPU1,,0 RES 7,H ;Вкл.с 0x4000 SET 6,H LD (HL),C POP AF SETPORT WINSP.CPU1,,0 HPrnSymbol EX AF,AF' OR A JR NZ,HPrnS1 LD HL,(FEFileLenght) INC HL LD (FEFileLenght),HL HPrnS1 CALL HPrnS2 LD (IY+ReadyFile),0x01 CALL HCursorRight LD HL,(LineShift) LD E,(IY+CursorX) SRL E LD D,0x00 ADD HL,DE EX DE,HL LD HL,(FEFileLenght) OR A SBC HL,DE RET NZ LD A,(IY+CursorX) OR A RET NZ HPrnS2 CALL FEResCursor LD HL,(LineShift) LD (FETempShift),HL LD A,(IY+CursorY) ADD A,A ADD A,A ADD A,A ADD A,0x1C LD B,A CALL FEPutHLine CALL PrHEXCr RET ;[]----------------------------------------------------------[] HDeleteByte LD HL,(LineShift) LD E,(IY+CursorX) SRL E LD D,0x00 ADD HL,DE EX DE,HL LD HL,(FEFileLenght) OR A PUSH HL SBC HL,DE POP HL JP NZ,HCursorLeft LD A,H OR L RET Z DEC HL LD (FEFileLenght),HL LD A,E AND 0x0F JR NZ,HDelS1 LD HL,EmptyAddr LD DE,0x0008 LD A,(IY+CursorY) ADD A,A ADD A,A ADD A,A ADD A,0x1C LD C,A LD B,0x06 LD A,COLORP.PANEL + COLORI.FILES CALL JUMPS.PrnTxtLnNormC HDelS1 LD (IY+ReadyFile),0x01 RES 0,(IY+CursorX) LD A,0x01 CALL HCursorLeft+3 CALL FEResCursor LD HL,(LineShift) LD (FETempShift),HL LD A,(IY+CursorY) ADD A,A ADD A,A ADD A,A ADD A,0x1C LD B,A CALL FEPutHLine CALL PrHEXCr RET EmptyAddr DEFB " " ;[]----------------------------------------------------------[] ChHEXmode CALL FEResCursor RES 0,(IY+CursorX) LD A,(HEXmode) XOR 0x01 LD (HEXmode),A CALL PrHEXCr RET ;[]----------------------------------------------------------[] ;Курсор влево на одно место HCursorLeft LD A,(HEXmode) LD C,A LD A,(IY+CursorX) DEC A AND 0x1F CP 0x1F JR NZ,HCurLf1 LD B,A LD HL,(LineShift) LD A,H OR L RET Z LD A,B SUB C LD (IY+CursorX),A JP HCursorUp HCurLf1 SUB C LD (IY+CursorX),A CALL FEResCursor CALL PrHEXCr CALL PrnHEXinfo RET ;[]----------------------------------------------------------[] ;Курсор вправо на одно место HCursorRight LD HL,(LineShift) LD DE,(FEFileLenght) LD C,(IY+CursorX) SRL C LD B,0x00 ADD HL,BC SBC HL,DE RET Z LD A,(HEXmode) LD C,A LD A,(IY+CursorX) INC A ADD A,C AND 0x1F JR NZ,HCurRg1 LD B,A LD HL,(LineShift) LD DE,0x0010 ADD HL,DE EX DE,HL LD HL,(FEFileLenght) SBC HL,DE RET C LD A,B LD (IY+CursorX),A JP HCursorDown HCurRg1 LD (IY+CursorX),A CALL FEResCursor CALL PrHEXCr CALL PrnHEXinfo RET ;[]----------------------------------------------------------[] HHomeString LD A,(IY+CursorX) CP 0x02 RET C LD (IY+CursorX),0x00 CALL FEResCursor CALL PrHEXCr CALL PrnHEXinfo RET ;[]----------------------------------------------------------[] HEndString LD A,(IY+CursorX) CP 0x1E RET NC LD (IY+CursorX),0x1E CALL FEResCursor CALL PrHEXCr CALL PrnHEXinfo RET ;[]----------------------------------------------------------[] HCursorUp LD HL,(LineShift) LD A,H OR L RET Z LD A,(IY+CursorY) OR A JP Z,HScrollUp LD DE,0x0010 SBC HL,DE LD (LineShift),HL DEC (IY+CursorY) CALL FEResCursor CALL PrHEXCr JP HCursorExit HCursorDown LD HL,(FEFileLenght) LD DE,(LineShift) LD A,(IY+CursorX) SRL A ADD A,0x10 LD C,A LD B,0x00 EX DE,HL ADD HL,BC EX DE,HL SBC HL,DE JP C,FEHEndFile LD A,(IY+CursorY) CP 0x18 JP Z,HScrollDown LD A,E AND 0xF0 LD E,A LD (LineShift),DE INC (IY+CursorY) CALL FEResCursor CALL PrHEXCr JP HCursorExit HScrollUp LD HL,(FEPageShift) LD A,H OR L JP Z,HCursorUp LD DE,0x0010 SBC HL,DE LD (FEPageShift),HL LD (FETempShift),HL LD HL,(LineShift) SBC HL,DE LD (LineShift),HL CALL FEResCursor CALL FEScrollSCRdown LD B,0x1C CALL FEPutHLine CALL PrHEXCr JP HCursorExit HScrollDown LD HL,(FEPageShift) LD DE,0x0190 ADD HL,DE EX DE,HL LD HL,(FEFileLenght) OR A SBC HL,DE ;Проверяем на конец файла JP C,HCursorDown LD (FETempShift),DE ;Запоминаем тек.смещение LD HL,(FEPageShift) LD DE,0x0010 ADD HL,DE LD (FEPageShift),HL LD HL,(LineShift) ADD HL,DE LD (LineShift),HL CALL FEResCursor CALL FEScrollSCRup LD B,0xDC CALL FEPutHLine CALL PrHEXCr HCursorExit LD HL,(LineShift) SRL H RR L SRL H RR L SRL H RR L SRL H RR L LD (CurLine),HL CALL PrnHEXinfo RET ;[]----------------------------------------------------------[] FEHPageUp LD HL,(FEPageShift) LD A,H OR L JP Z,FEHBegFile LD DE,0x0190 OR A SBC HL,DE JR NC,.L1 LD HL,0x0000 .L1 LD (FEPageShift),HL LD HL,(LineShift) OR A SBC HL,DE JR NC,.L2 LD HL,0x0000 .L2 LD (LineShift),HL JR HPageExit ;[]----------------------------------------------------------[] FEHPageDown LD HL,(FEPageShift) LD BC,0x0190 ADD HL,BC EX DE,HL LD HL,(FEFileLenght) OR A SBC HL,DE ;Проверяем на конец файла JP C,FEHEndFile LD (FEPageShift),DE LD HL,(LineShift) ADD HL,BC EX DE,HL LD HL,(FEFileLenght) OR A SBC HL,DE ;Проверяем на конец файла JP C,FEHEndFile LD (LineShift),DE HPageExit LD HL,(LineShift) SRL H RR L SRL H RR L SRL H RR L SRL H RR L LD (CurLine),HL CALL FEPrnHEXpage ;Печатаем страницу RET ;[]----------------------------------------------------------[] ;В начало файла FEHBegFile LD HL,(LineShift) LD A,(IY+CursorX) OR H OR L RET Z SUB A LD (IY+CursorX),A LD (IY+CursorY),A LD HL,0x0000 ;Смещение = 0000 LD (LineShift),HL LD (FEPageShift),HL LD (CurLine),HL CALL FEPrnHEXpage ;Печатаем страницу RET ;[]----------------------------------------------------------[] ;В конец файла FEHEndFile LD HL,(LineShift) LD E,(IY+CursorX) SRL E LD D,0x00 ADD HL,DE EX DE,HL LD HL,(FEFileLenght) OR A PUSH HL SBC HL,DE ;Проверяем на конец файла POP HL RET Z LD HL,(FEPageShift) LD BC,0x0190 ADD HL,BC EX DE,HL LD HL,(FEFileLenght) OR A SBC HL,DE ;Проверяем на конец файла ADD HL,DE JR C,.HEnd1 SBC HL,BC LD A,L AND 0xF0 LD L,A LD DE,0x0010 ADD HL,DE LD (FEPageShift),HL .HEnd1 LD HL,(FEFileLenght) LD DE,(FEPageShift) OR A SBC HL,DE PUSH HL SRL H RR L SRL H RR L SRL H RR L SRL H RR L LD (IY+CursorY),L POP DE LD A,E AND 0xF0 LD E,A LD HL,(FEPageShift) ADD HL,DE LD (LineShift),HL SRL H RR L SRL H RR L SRL H RR L SRL H RR L LD (CurLine),HL LD A,(FEFileLenght) AND 0x0F ADD A,A LD (IY+CursorX),A CALL FEPrnHEXpage ;Печатаем страницу RET ;[]----------------------------------------------------------[] HNewHEXPos EX DE,HL LD BC,0x001C OR A SBC HL,BC LD A,L AND 0xF8 LD L,A SLA L RL H PUSH HL SRL H RR L SRL H RR L SRL H RR L SRL H RR L LD A,L EX AF,AF' EX DE,HL LD BC,0x0048 OR A SBC HL,BC SRL H RR L SRL H RR L SRL H RR L LD A,L LD HL,HNewPosTb ADD A,A ADD A,L LD L,A JR NC,.L1 INC H .L1 LD A,(HL) INC HL LD L,(HL) LD H,A POP DE OR A RET M PUSH HL LD HL,(FEPageShift) ADD HL,DE EX DE,HL PUSH DE ADD A,E LD E,A JR NC,.L2 INC D .L2 LD HL,(FEFileLenght) OR A SBC HL,DE POP DE POP HL RET C LD A,H ADD A,A ADD A,L LD (IY+CursorX),A EX AF,AF' LD (IY+CursorY),A LD (LineShift),DE SRL D RR E SRL D RR E SRL D RR E SRL D RR E LD (CurLine),DE CALL FEResCursor SUB A LD (HEXmode),A CALL PrHEXCr CALL PrnHEXinfo RET HNewPosTb DEFB 0,0,0,1,-1,-1 DEFB 1,0,1,1,-1,-1 DEFB 2,0,2,1,-1,-1 DEFB 3,0,3,1,-1,-1,-1,-1 DEFB 4,0,4,1,-1,-1 DEFB 5,0,5,1,-1,-1 DEFB 6,0,6,1,-1,-1 DEFB 7,0,7,1,-1,-1,-1,-1 DEFB 8,0,8,1,-1,-1 DEFB 9,0,9,1,-1,-1 DEFB 10,0,10,1,-1,-1 DEFB 11,0,11,1,-1,-1,-1,-1 DEFB 12,0,12,1,-1,-1 DEFB 13,0,13,1,-1,-1 DEFB 14,0,14,1,-1,-1 DEFB 15,0,15,1,-1,-1,-1,-1 HNewASCPos EX DE,HL LD BC,0x001C OR A SBC HL,BC LD A,L AND 0xF8 LD L,A SLA L RL H PUSH HL SRL H RR L SRL H RR L SRL H RR L SRL H RR L LD A,L EX AF,AF' EX DE,HL LD BC,0x01E8 OR A SBC HL,BC SRL H RR L SRL H RR L SRL H RR L POP DE LD A,L PUSH HL LD HL,(FEPageShift) ADD HL,DE EX DE,HL PUSH DE ADD A,E LD E,A JR NC,.L1 INC D .L1 LD HL,(FEFileLenght) OR A SBC HL,DE POP DE POP HL RET C LD A,L ADD A,A LD (IY+CursorX),A EX AF,AF' LD (IY+CursorY),A LD (LineShift),DE SRL D RR E SRL D RR E SRL D RR E SRL D RR E LD (CurLine),DE CALL FEResCursor LD A,0x01 LD (HEXmode),A CALL PrHEXCr CALL PrnHEXinfo RET ;[]----------------------------------------------------------[] ;Процедура ввода нового указателя смещения в файле FEHGoTo LD HL,(FEFileLenght) LD A,H ;Проверяем,что длина OR A ;файла больше 16 байт JR NZ,.HGoToOk LD A,L CP 0x11 RET C ;меньше 16байт .HGoToOk CALL FEResCursor LD HL,FENewShift ;Буфер для ввода нового указ. SUB A LD (FECursPos),A ;Позиция ввода в буфере INC A LD (FEBuffFlg),A LD (HL),'0' INC HL LD A,(FEPageShift+1) CALL FEPutHexNumb ;Заносим в буфер текущее смещ. LD A,(FEPageShift) ;в текстовом виде CALL FEPutHexNumb ;Выводим на экран буфер и FEHGoToRet CALL FEPrintHGT ;печатаем курсор FEHGoToLp HALT ;Ожидаем прерывание CALL FEChangeCurs ;проверям на смену курсора SPMOUSE MOUSEF.READ_STATE BIT 0,A JP NZ,FEHGTescape SPDSS DSSF.SCANKEY ;Ожидаем нажатия клавиши JR Z,FEHGoToLp ;Z - не нажата LD A,B AND 0x3F JR NZ,FEHGoToLp LD A,E OR A JR Z,FEHGoToSys ;A=0 сист.клавиша CP 0x0D JP Z,FEHGTenter ;нажат Enter CP 0x08 JR Z,FEHGTdelete ;нажат BackSpace CP 0x1B JP Z,FEHGTescape ;нажат Esc CP 0x20 JR C,FEHGoToLp ;код<0x20 нам не подходит LD C,A ;сохр. ASCII код LD A,0x00 FEBuffFlg EQU $-1 OR A CALL NZ,FEClearBuff LD A,0x00 ;тек.позиция печати в буфере FECursPos EQU $-1 LD B,A ;сохр.тек.поз. LD HL,FENewShift ;Смещ.от начала буфера ADD A,L LD L,A JR NC,.L1 INC H .L1 LD (HL),C ;Заносим код в буфер LD A,B ;тек.поз. CP 0x04 ;Позиция в буфере (7-последняя) JR Z,FEHGoToRet ;печатаем строку и курсор INC A ;след.позиция LD (FECursPos),A JR FEHGoToRet ;печатаем строку и курсор FEClearBuff LD HL,FENewShift LD B,0x05 LD A,0x20 .L2 LD (HL),A INC HL DJNZ .L2 SUB A LD (FEBuffFlg),A RET ;Забой FEHGTdelete SUB A LD (FEBuffFlg),A LD A,(FECursPos) ;Тек.позиция в буфере OR A JR Z,FEHGoToLp ;0 - выходим DEC A LD (FECursPos),A ;предид.позиция LD HL,FENewShift ADD A,L ;смещ.в буфере LD L,A JR NC,.L1 INC H .L1 LD (HL),' ' ;Забиваем пробелом JR FEHGoToRet ;системная клавиша FEHGoToSys LD A,D CP 0x54 ;<- JR Z,.HGTleft CP 0x56 ;-> JR Z,.HGTright JR FEHGoToLp ;Курсор влево .HGTleft SUB A LD (FEBuffFlg),A LD A,(FECursPos) ;Тек.позиция в буфере OR A JP Z,FEHGoToLp ;0 - выходим DEC A LD (FECursPos),A ;Уменьш.поз. JP FEHGoToRet .HGTright SUB A LD (FEBuffFlg),A LD A,(FECursPos) ;Тек.позиция в буфере CP 0x04 JP Z,FEHGoToLp ;7 - последняя INC A LD (FECursPos),A ;Увелич.поз. JP FEHGoToRet ;Процедура вывода строки и курсора FEPrintHGT LD HL,FENewShift LD DE,0x0008 LD BC,0x051C LD A,COLORP.PANEL + COLORI.FILES CALL JUMPS.PrnTxtLnNormC LD A,(FECursPos) ;Позиция вывода курсора INC A LD L,A LD H,0x00 ADD HL,HL ADD HL,HL ADD HL,HL EX DE,HL LD HL,FETCursor LD (HL),0xAB;'<' LD BC,0x011C LD A,COLORP.PANEL + COLORI.FILES CALL JUMPS.PrnTxtLnNormC LD A,0x01 ;Номер выведенного курсора LD (FECurCurs),A LD A,0x06 ;Ожидание для смены курсора LD (FECurWait),A RET ;Процедура смены курсора FEChangeCurs LD A,0x00 ;Задержка между сменой курсора FECurWait EQU $-1 DEC A LD (FECurWait),A RET NZ ;еще не время LD A,(FECursPos) INC A LD L,A LD H,0x00 ;Тек.знакоместо ADD HL,HL ADD HL,HL ADD HL,HL EX DE,HL LD HL,FENewShift ;Смещ.в буфере LD A,(FECursPos) ADD A,L LD L,A JR NC,.L1 INC H .L1 LD A,0x00 ;Номер текущего курсора FECurCurs EQU $-1 XOR 0x01 ;Меняем курсор LD (FECurCurs),A LD A,(HL) JR Z,.L2 ;Печатаем LD A,0xBB;'<' .L2 LD HL,FETCursor LD (HL),A LD BC,0x011C LD A,COLORP.PANEL + COLORI.FILES CALL JUMPS.PrnTxtLnNormC LD A,0x0C ;Ожидание для смены курсора LD (FECurWait),A RET FETCursor DEFB ' ' ;Клавиша ENTER FEHGTenter SUB A ;При ошибке вернемся с курсором LD (FECursPos),A ;в нулевой позиции LD BC,FENewShift ;Буфер строки CALL GetHexNum16 ;Переводим текст в 32бит число JP C,FEHGoToRet ;CY - синтакс.ошибка LD C,E LD B,D LD A,L ;Адрес кратный 16 AND 0xF0 LD L,A EX DE,HL ;Смещ.в BC+DE LD HL,(FEFileLenght) ;Проверяем,что смещение в OR A ;пределах файла SBC HL,DE EX DE,HL JR NC,.HGTent1 ;NZ-в пределах LD HL,(FEFileLenght) LD A,L AND 0xF0 LD L,A .HGTent1 LD (FEPageShift),HL LD (LineShift),HL SRL H RR L SRL H RR L SRL H RR L SRL H RR L LD (CurLine),HL SUB A LD (IY+CursorX),A LD (IY+CursorY),A CALL FEPrnHEXpage ;Печатаем страницу RET ;Нажат Escape FEHGTescape LD HL,FENewShift ;Буфер строки PUSH HL LD (HL),'0' INC HL LD A,(FEPageShift+1) ;Заносим тек.смещение CALL FEPutHexNumb LD A,(FEPageShift) CALL FEPutHexNumb POP HL LD DE,0x0008 LD BC,0x051C LD A,COLORP.PANEL + COLORI.FILES CALL JUMPS.PrnTxtLnNormC CALL PrHEXCr CALL JUMPS.ResFire RET ;Выходим FENewShift DEFB " ",0 ;Процедура конвертирования 32битового шестн.текстового числа ;На вход: ; BC - Адрес буфера с текстом (0-конец буфера) ;На выход: ; DE+HL - Число 32бит ; CY - синтаксическая ошибка GetHexNum16 LD HL,0x0000 FEGetHNlp LD A,(BC) INC BC OR A RET Z CP ' ' JR Z,FEGetHNlp CP 0x61 JR C,.L1 SUB 0x20 .L1 CP 0x30 RET C CP 0x47 CCF RET C SUB 0x30 CP 0x0A JR C,FEGetHNum SUB 0x07 CP 0x0A RET C FEGetHNum ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL OR L LD L,A JR FEGetHNlp