82H DEFB 0B3H ýHûASE ; XD|; ; ************************* ; * * ; * Turboeditor * ; * * ; ************************* ; ; ; (C) Frank Klemm Gera ; May 1988 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Konstanten: ; ORG 240H M40 DEFS 2 M42 DEFS 2 M44 DEFS 2 M46 DEFS 2 M48 DEFS 2 OPT DEFS 2 DEFS 2 OBJ DEFS 2 LBLEND DEFS 2 LBLANF DEFS 2 ; FIND EQU 276H FINDL EQU 298H ; START EQU 400H MENAN EQU 0C000H MENLG EQU 2000H ; ASSEM EQU 0C95BH ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; LOAD-Bereiche verlegen !!! ; ; Selbststart-Programme ; ORG 0C000H ; AUTO LD HL,79EDH ;Autost. LD (NCAOS),HL LD A,1EH OUT P1AD LD BC,880H LD A,0FDH AUTO1 JP NCAOS ; DEFW HEAD DEFM '/' DEFB 1 JR AUTO ; DEFW HEAD DEFM '!' DEFB 11H LD A,9FH JR AUTO1 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; DEFW HEAD DEFM 'EDAS' DEFB 11H CALL PRS ;Kaltstart DEFB CLS DEFB CUD DEFB CUD DEFM '>>> KC-Editor/' DEFM 'Assembler <<<' DEFB CUD DEFB CUD DEFB 0 ;Kopf LD HL,START INIT0 INC HL BIT 7,H JR NZ,INIT1 LD A,M CPL LD M,A CP M CPL LD M,A JR Z,INIT0 INIT1 DEC HL ;Speicherende INIT2 PUSH HL CALL PRS DEFB CR DEFM 'Memory end :' DEFB 0 CALL HLHX ;ausdrucken LD BC,0C0FH CALL INPUT EX DE,HL POP HL RET C PUSH HL CALL NUM POP HL JR C,INIT2 ;falsche Zahl PUSH HL LD DE,(NUMYX) SBC HL,DE POP HL JR C,INIT2 ;Zahl zu gro~ EX DE,HL INC HL LD (LBLEND),HL;Label Ende SRL H LD A,H SRL H ADD H LD H,A XOR A LD L,A LD (OBJ),HL;Objekt Anfang DEC HL LD (M42),HL;Quelle Ende INC HL LD BC,START SCF SBC HL,BC EX DE,HL JR C,INIT2 ;Zahl zu klein LD (M40),BC;Quelle Anfang CALL CLEAR LD HL,FTASTE+1 LD BC,9CH-2 CPIR JP PO,FT1 CPIR FT1 LD DE,FTASTE+3;FT1+2 suchen LD C,9CH-4 LDIR LD L,9CH-3 LD C,L LDDR ;verschieben LD M,A INC HL LD M,5 INC HL LD M,A INC HL LD M,6 ;belegen INC HL LD M,A JR REEDAS ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; DEFW HEAD DEFM 'REEDAS' DEFB 1FH REEDAS LD (IX+9),KOPF CALL BWIND CALL PRS DEFB CLS DEFB SCROLL DEFB CUD DEFM '>>> EDAS V2.0 <<<' DEFM ' free :' DEFB CR DEFB CUD DEFB 0 ;Kopf ausdrucken LD B,40 LIN CALL PRS DEFM '_' DEFB 0 DJNZ LIN ;unterstreichen LD BC,800H JR MENU21 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; DEFW KOPF DEFM 'MENU' DEFB 1FH CALL PRS DEFB CLS DEFB SCROLL ;BS l|schen+SCR DEFB 0 LD BC,MENLG ; MENU21 POP HL MENU22 CALL SWIND ;kleines Window CALL SHOME LD HL,MENAN MENU23 CALL PRS DEFB CR DEFM '*' DEFB 0 CALL BRKT JR C,MENU31 LD A,(IX+9) MEN11 CPIR JP PO,MENU31 CPI JR NZ,MEN11 MEN12 LD A,M CP ' ' CALL C,CRLF CP '0' JR C,MENU23 CP 60H JR NC,MENU23 CALL ROUT INC HL DEC BC JR MEN12 ;Men}aufbau ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; PARSE1 CALL SWIND CALL PRS DEFM '*' DEFB 0 MENU31 LD HL,MENAN LD BC,MENLG CALL INLOOP JR PARSE1 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; BWIND LD HL,100H LD (WINAN),HL LD HL,1E28H LD (WINLG),HL ;gro~es Wind. JP NNOM ; auf CRT schalt ; SWIND LD HL,(CRSR);kleines Window PUSH HL ;mit FREE :xxxx CALL BWIND ;Anzeige LD HL,11CH LD (CRSR),HL LD DE,(M44) LD HL,(M46) AND A SBC HL,DE CALL HLHX LD A,5 LD (WINAN+1),A LD A,1AH LD (WINLG+1),A POP HL LD (CRSR),HL RET ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; DEFW KOPF DEFM 'QUIT' DEFB 1FH LD HL,WINAN+1 ;Verlassen LD M,1 INC HL INC HL LD M,1EH INC HL INC HL LD A,M ADD 4 LD M,A LD (IX+9),HEAD JP PARSE ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; DEFW KOPF DEFM 'CLEAR' DEFB 11H CALL PRS ;l|schen DEFM 'Delete all' DEFB 0 CALL YESNO RET C CLEAR LD HL,(M40) LD (M44),HL LD HL,(M42) LD (M46),HL LD M,BRK CLEAR1 LD HL,0 LD (M48),HL RET ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; DEFW KOPF DEFM 'SAVE' DEFB 1FH CALL TOP ;abspeichern LD DE,(M46) LD HL,(M42) INC HL XOR A LD (ARGN),A LD (ARG1),DE LD (ARG2),HL CALL NAMEASM RET C JP SAVE ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; DEFW KOPF DEFM 'LOAD' DEFB 1FH CALL NAMEASM ;Name holen RET C ;BRK-anforderg. LD DE,FINDL LD BC,11 LDIR ;abspeichern CALL INITI ;INIT LD10 CALL RDPRO ;1.Block JR C,CSR ;BRK CALL CRLF LD HL,IOPUF LD DE,FINDL LD B,11 LD A,(DE) ;kein Name ? AND A JR Z,LD14 LD12 LD A,(DE) CP M JR Z,LD13 ADD M CP ' ' JR NZ,LD10 ;Name falsch LD13 INC HL INC DE DJNZ LD12 ;Namensvergleich ; LD14 CALL RDBLK ;Block lesen JR C,CSR LD HL,IOPUF LD15 LD A,M CP BRK CSR JP Z,RINIT ;Ende CALL EDINS ;wenn <> CUD INC L ;einf}gen JP P,LD15 ;Blockende CALL SWIND ;FREE :xxxx JR LD14 ; EDINS CP CUD RET Z PUSH HL PUSH DE LD HL,(M44) LD DE,(M46) LD M,A AND A SBC HL,DE ADC HL,DE LD (M44),HL POP DE POP HL RET C CALL NOMEM EDBRK LD SP,(SYSP) LD (IX+9),KOPF JP PARSE1 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; DEFW KOPF DEFM 'VERIFY' DEFB 11H JP VERIF ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; YESNO CALL PRS DEFM ' (Y/N ?)';Entscheidung DEFB 0 YN1 CALL ICHR CP 'Y' JR Z,YN2 CP 'N' JR NZ,YN1 SCF YN2 CALL ROUT YN3 PUSH AF CALL CRLF POP AF RET ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; INPUT LD A,B LD (CRSR),A INP0 CALL ICHR CP BRK ;Eingabe mit SCF ;Window JR Z,YN3 CP ' ' JR NC,INP1 CP CUR JR Z,INP1 CP CUL JR Z,INP1 CP DEL JR Z,INP1 CP HCOPY JR Z,INP1 CP CR JR Z,INP5 CP TAB JR NZ,INP0 LD A,CUR CALL PCTRL ;TAB als CUR XOR A INP1 CALL ROUT LD A,(CRSR) CP B JR NC,INP2 LD A,B INP2 CP C JR C,INP3 LD A,C INP3 LD (CRSR),A JR INP0 ; INP5 LD E,B LD A,(CRSR+1) SBC 0 LD D,A JP VADR ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; NAME CALL PRS ;Eingabe Name DEFM 'Name :' DEFB 0 LD BC,60DH CALL INPUT RET C LD A,0EH LD (CRSR),A RET ; NAMEASM CALL NAME ;mit ASM RET C CALL PRS DEFM 'ASM' DEFB CR DEFB CUD DEFB 0 SCF JR INP5 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; DEFW KOPF DEFM 'PRINT' DEFB 1 CALL DOWNL LD HL,(M46) PRINT0 LD DE,0 PRINT1 LD A,M CP BRK RET Z CALL OUTPUT LD A,M INC HL CP CR JR NZ,PRINT1 CALL BRKT JR NC,PRINT0 RET ; ; Ausgabe eines Zeichens mit L{ngekon- ; trolle, Expansion von TAB's etc. ; OUTPUT LD B,1 CP ' '+1 JR NC,PR1 CP CR JR Z,PRCR CP CUR JR NZ,PR0 LD A,D CPL AND 7 INC A LD B,A PR0 LD A,CUR PR1 CALL ROUT INC D DEC E JR Z,PR2 DJNZ PR1 PR2 LD A,(IX+13) CP CLR RET NZ JP ICHR ; POINT EQU #+5 PRCR CALL PRS DEFB CR DEFB CUD DEFB ESC DEFB 0 LD D,A JR PR2 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; DEFW KOPF DEFM 'ASM' DEFB 1FH CALL TOP CALL PRS DEFM 'Options(+,2,B,L,O,P,S)' DEFM '? :' DEFB 0 LD BC,1926H CALL INPUT RET C LD DE,OPTIONS LD B,8 ASM2 PUSH HL PUSH BC LD A,(DE) INC DE LD BC,14 CPIR SCF JR Z,ASM3 CCF ASM3 LD HL,OPT RL M POP BC POP HL DJNZ ASM2 CALL CRLF CALL CRLF LD HL,(M46) PUSH HL DEC HL LD M,CR LD A,(OPT) AND 84H JR NZ,ASM4 LD HL,(LBLEND) LD (LBLANF),HL ASM4 JP ASSEM ; OPTIONS DEFM '2OBÿS+PL' ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; DEFW KOPF DEFM 'FIND' DEFB 1 CALL DOWNL CALL PRS DEFM 'Text :' DEFB 0 LD BC,626H CALL INPUT RET C LD DE,FIND LD BC,34 LDIR CALL SEARCH JR MAINS ; DEFW KOPF DEFM 'TOP' DEFB 1 CALL DOWNL JR MAINS ; DEFW KOPF DEFM 'BOTTOM' DEFB 1 CALL BOTTOM CALL ARGS BOTS AND A EX DE,HL CALL NZ,UP MAINS JP MAIN ; DEFW KOPF DEFM '+' DEFB 13H JR BOTS ; DEFW KOPF DEFM '-' DEFB 13H CALL DOWNL1 JR MAINS ; DEFW KOPF DEFM 'EDIT' DEFB 11H JR MAINS ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; TOP CALL CLEAR1 ;HOME LD DE,(M40) TOP0 LD HL,(M44) LD (M44),DE AND A PUSH HL SBC HL,DE LD B,H LD C,L POP HL DEC HL LD DE,(M46) RET Z DEC DE LDDR INC DE LD (M46),DE RET ; SETBACK LD HL,1A00H LD (CRSR),HL UPL LD DE,26 UP INC D INC E LD HL,(M44) LD BC,(M40) AND A PUSH HL SBC HL,BC LD B,H LD C,L POP HL DEC HL RET Z LD A,CR UP1 CPDR JP PO,UP2 DEC E JR NZ,UP1 DEC D JR NZ,UP1 INC HL UP2 INC HL EX DE,HL JR TOP0 ; BOTTOM LD HL,(M42) BOT0 LD DE,(M46) LD (M46),HL AND A SBC HL,DE LD B,H LD C,L LD HL,(M44) EX DE,HL RET Z LDIR LD (M44),DE RET ; DOWNL CALL TOP DOWNL1 CALL ARGS AND A RET Z EX DE,HL DOWN INC D DEC DE INC E LD HL,(M42) LD BC,(M46) AND A SBC HL,BC PUSH HL LD H,B LD L,C POP BC RET Z LD A,CR DO1 CPIR JP PO,DO2 DEC E JR NZ,DO1 DEC D JR NZ,DO1 DO2 JR BOT0 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Suchprogramme ; SEARCH LD A,(CRSR+1);Suche ab akt. INC A ;Zeile LD E,A LD D,0 CALL DOWN SEARCH1 CALL CLEAR1 ;Suche ab akt. LD HL,(M42) ;Seite LD DE,(M46) AND A SBC HL,DE RET Z LD B,H LD C,L EX DE,HL ;HL=Anf,BC=L{n ; SR1 LD DE,FIND LD A,(DE) AND A RET Z CPIR JP PO,BOT0 ;nicht gefundn PUSH HL PUSH BC SR2 INC DE LD A,(DE) AND A JR Z,SR3 ;Ende CPI JR Z,SR2 ;= SR3 POP BC POP HL JR NZ,SR1 ;<> ; CALL BOT0 LD DE,0 JP UP ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Programm zum Ausdrucken eines Zeichens ; ; A: ASCII ; DE: abs. Cursor ; VR: AF ; DUMMY LD M,0 LD A,' ' ; DISPQ PUSH HL PUSH DE BIT 5,E JR NZ,DISP3;2.Teil SET 7,D BIT 0,D JR Z,DISP1 RES 0,D SET 6,E DISP1 ADD A ADD A JR C,DISP5 LD H,0F8H DISP2 ADD A LD L,A CALL DOCT POP DE POP HL RET ; DISP5 LD H,0F9H JP P,DISP2 LD H,0FBH JR DISP2 ; DISP3 PUSH AF LD A,D RLCA RLCA AND 18H OR E AND 1FH LD E,A LD A,D RRCA JR NC,DISP4 SET 6,E DISP4 RRCA AND 6 OR 0A0H LD D,A POP AF JR DISP1 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Programm zum Drucken einer Zeile ; ; HL: VRAM ; DE: abs. Cursor ; BC: Text ; LIN0 INC HL INC E LINE LD A,(BC) INC BC CP ' ' JR C,LIN1 CP M JR Z,LIN0 LD M,A CALL DISPQ JR LIN0 ; LIN1 CP CUR JR NZ,LIN3 LIN6 LD A,M ;Tabulator AND A CALL NZ,DUMMY INC HL INC E LD A,E AND 7 JR NZ,LIN6 JR LINE ; LIN3 CP CR JR Z,LIN4 CP BRK JR NZ,LINE DEC BC LIN4 LD A,E CP 40 RET NC LD A,M AND A CALL NZ,DUMMY INC HL INC E JR LIN4 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Ausdrucken einer Seite ; PPAGE LD BC,(M46) LD D,1 LD HL,0B200H+40 PP1 LD E,0 CALL LINE INC D LD A,D CP 31 JR NZ,PP1 LD (M46),BC RET ; ; Ausdrucken der Meldung : ; NOMEM CALL PRS DEFM '>>> No memory <<<' DEFB CR DEFB CUD DEFB 0 RET ; PNOMEM LD HL,(CRSR) CALL HOME CALL NOMEM LD (CRSR),HL POP HL JP ICHR ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Einlesen einer Zeile ; READ PUSH HL LD BC,(M46) XOR A SBC HL,BC ;wieviel ist frei INC H JR NC,PNOMEM;Ueberlauf POP HL LD A,BEEP CALL Z,CRT ;BEEP bei <100h ; LD BC,2800H;HL=Text RD1 LD A,(DE) ;DE=VADR AND A ;B =Counter JR Z,RD2 INC DE LD M,A INC HL DJNZ RD1 RD5 DEC HL LD A,CR CP M INC HL RET Z LD M,A INC HL RET ; RD2 LD A,E ;Dummies->CUR AND 0F8H ADD 8 LD E,A JR NC,$+3 INC D LD A,B DEC A AND 0F8H LD B,A JR Z,RD5 INC C LD A,(DE) AND A JR Z,RD2 LD A,CUR RD4 LD M,A INC HL DEC C JR Z,RD1 JR RD4 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Einlesen einer Zeile/Seite ; RLINE LD E,0 CALL VADR EX DE,HL RP LD B,1 RP0 LD HL,(M44) PUSH HL RP1 PUSH BC CALL READ POP BC DJNZ RP1 LD (M44),HL POP DE RET ; RPAGE LD DE,0B200H+40 LD B,30 JR RP0 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Backscroll (ohne Window, 30 Zeilen) ; BACK LD HL,0B700H-80-1 LD DE,0B700H-40-1 LD BC,500H-120 LDDR LD H,0E8H BACK1 LD L,0 LD C,20H CALL BACK2 LD L,A ;A=20h LD C,8 CALL BACK2 LD A,H SUB 8 LD H,A JR NZ,BACK1 RET ; BACK2 PUSH HL PUSH DE PUSH BC PUSH HL LD A,H ADD 8 LD H,A CALL PADR EX (SP),HL CALL PADR LD A,C JP SCRX ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Main Input Loop for Editmodus ; MAIN LD HL,(M48) LD (CRSR),HL MAIN1 LD HL,(M42) LD DE,(M46) AND A SBC HL,DE CALL Z,SETBACK CALL PPAGE LOOP CALL BWIND LD A,1FH LD (WINLG+1),A CALL KORR CALL ICHR LD DE,(CRSR) CP BRK ;BRK JR Z,XBRK CP INVS ;SEARCH JP Z,XSEAR CP PAGE ;UP JR Z,XUP CP SCROLL ;DOWN JR Z,XDOWN CP HCOPY ;^ JP Z,#+3 ; LD HL,LOOP PUSH HL CP ' ' ;CHAR JR NC,XCHR CP CLR ;CLR JR Z,XCLR CP ESC ;ESC JP Z,XESC CP TAB ;TAB JR Z,XTAB CP CUL ;CUL JR Z,XCUL CP CUR ;CUR JR Z,XCUR CP CUD ;CUD JP Z,XCUD CP CUU ;CUU JP Z,XCUU CP CLS ;CLS RET Z CP CR ;CR JR Z,XCR CP CEOLN ;CEOLN JR Z,XCLN JP CRT ;REST ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Abarbeitung der einzelnen ASCIIs ; XBRK CALL RPAGE CALL TOP0 LD HL,(CRSR) LD (M48),HL JP REEDAS ;------------------------- XCHR ; XCUL ; XCUR EX DE,HL XC1 CALL CRT LD B,A CALL TEST LD A,B JR C,XC1 LD A,D CP H JR NZ,SET1 RET ;------------------------- XCLR INC E DEC E JR NZ,XCUR RET ;------------------------- XTAB CALL AINS CALL VADR LD M,0 INC E LD A,E AND 7 JR NZ,XTAB JR SET ;------------------------- XUP CALL RPAGE CALL TOP0 CALL UPL JR XU ;------------------------- XDOWN CALL RPAGE CALL TOP0 LD DE,26 CALL DOWN XU JP MAIN1 ;------------------------- XSEAR LD A,(FIND) AND A JP Z,LOOP CALL RPAGE CALL TOP0 CALL SEARCH JP MAIN ;------------------------- XCLN LD E,39 CALL VADR XCLN1 DEC HL LD A,M AND A JR NZ,SET DEC E JR NZ,XCLN1 SET EX DE,HL SET1 LD (CRSR),HL RET ;------------------------- XCR INC D XOR A LD E,A CALL VADR LD B,40 XCR1 CP M INC HL JR NZ,XCR2 DJNZ XCR1 ;Feststellen, ob LD E,8 ;Zeile leer LD A,D CP 1EH JR C,SET ;letzte Zeile ; XCR2 LD A,D LD (WINLG+1),A LD DE,0B200H+40 CALL RP LD A,8 LD (CRSR),A JR SCRL ;------------------------ XESC LD A,D INC A LD (WINAN+1),A CPL SUB 255-31 XESC1 LD (WINLG+1),A CALL SCRL LD HL,0B700H-80 LD DE,1E00H XESC2 LD BC,(M46) CALL LINE LD (M46),BC RET ;------------------------ XCUD LD A,D INC D CP 1DH JR C,SET LD DE,0B200H+40 CALL RP LD A,1EH JR XESC1 ;------------------------ XCUU LD A,D DEC D AND A JR NZ,SET LD HL,(M40) LD DE,(M44) SBC HL,DE JR Z,CUU1 LD DE,0B700H-80 CALL RP CALL TOP0 LD DE,1 CALL UP CALL BACK LD HL,0B200H+40 LD DE,100H JR XESC2 ; CUU1 POP HL JP LOOP ;------------------------- SCRL LD A,(WINLG+1) LD D,A JP SCR ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Korrekturprogramme ; KORR LD DE,(CRSR) KORR0 CALL TEST0 JP NC,SET DEC E JR KORR0 ; TEST LD DE,(CRSR) TEST0 LD A,E ADD -40 RET C AND 7 RET Z PUSH HL CALL VADR DEC HL LD A,M POP HL AND A RET NZ SCF RET ; EOE ; ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; .;Ende