OUTPUT #3B,#3C,#3D,#3E ; Window EQU #C000 WindowA EQU #D000 ; Assembler EQU #9000 ; lWindow EQU #1000 ; erFAE EQU #01 ; Print EQU #40 GetLine EQU #43 ReadKey EQU #46 WriteHex8 EQU #4C WriteHex16 EQU #4F MonComm EQU #6C WindowComm EQU #75 ; cScrollTU EQU #02 cScrollTD EQU #03 cScrollBD EQU #04 cScrollBU EQU #05 ; cDel EQU #08 cCls EQU #0C cCret EQU #0D ; cCurLeft EQU #11 cCurRight EQU #12 cCurUp EQU #13 cCurDown EQU #14 cCurRemo EQU #15 cCurInse EQU #16 ; cCCret EQU #18 cHomeLeft EQU #1A cEsc EQU #1B cPrAt EQU #1C cScroll EQU #1D cFill EQU #1E ; cGCret EQU #9C ; ceMark EQU #0C ceNext EQU #01 ; fsCreate EQU #007B fsDelete EQU #007E fsGetBlock EQU #0096 fsPutBlock EQU #0099 fsGetList EQU #009C fsPutList EQU #009F ; lScreen EQU 24 wScreen EQU 86 ; SCursoriY EQU 12 ; lLineBuffer EQU 256 ; Margin EQU 2 ; ORG #6000,0 ; Begin XOR A LD (InsertFlag),A LD (CharORMask),A LD A,1 LD (TokenFlag),A ; LD HL,0 LD (cLineCnt),HL ; PUSH DE ; LD A,cCls CALL Print ; LD DE,sEnterWind0 CALL WindowComm ; LD DE,sName CALL PrintStr ; LD DE,sOpenWind1 CALL WindowComm ; LD DE,sFireUp CALL PrintStr ; LD DE,sOpenWind2 CALL WindowComm ; LD DE,sLines CALL PrintStr ; POP DE ; CALL GetFileName ; CALL GetFileBlocks ; CALL FormatFile ; LD DE,sEnterWind0 CALL WindowComm ; LD DE,sNameFile CALL PrintStr ; LD DE,cFileName CALL PrintStrFN ; CALL UpdateLC ; CALL DispToken ; LD DE,sEnterWind1 CALL WindowComm ; LD A,cCls CALL Print ; LD DE,sCloseWind2 CALL WindowComm ; CALL PrintInitial ; JP EditLp ; Assemble LD DE,sOpenWind6 CALL WindowComm ; LD DE,sAssemble CALL PrintStr ; AssemLp CALL FilterKey LD C,A ; CP cEsc JR Z ASSEMret ; CP cCret LD A,1 JR Z AssembleGo ; LD A,C ; CP "0" JR C AssemLp ; CP "8" JR NC AssemLp ; AssembleGo LD HL,ASSEMret PUSH HL ; AND #07 ; ADD A,A ADD A,A LD E,A LD D,0 ; LD HL,OptTable ADD HL,DE ; LD E,(HL) INC HL LD D,(HL) INC HL PUSH DE ; LD E,(HL) INC HL LD D,(HL) INC HL PUSH DE ; XOR A PUSH AF ; XOR A ; Object PUSH AF ; LD HL,#B000 PUSH HL ; LD HL,cFileName LD B,0 ; Ass1 LD A,(HL) INC HL INC B OR A JR NZ Ass1 ; DEC HL ; LD A,B OR A JR Z AssF ; Ass2 LD A,(HL) DEC HL PUSH AF DJNZ Ass2 ; JP Assembler ; AssF POP AF POP HL POP AF POP AF POP AF POP HL SCF ; ASSEMret NOP ;JR NC ExitAssembler ; AssFailLp CALL FilterKey ; CP cEsc JR NZ AssFailLp ; LD DE,sEnterWind1 CALL WindowComm ; CALL RePrintInitial ; SCF ; ExitAssembler PUSH AF ; LD DE,sEnterWind2 CALL WindowComm ; LD DE,sCloseWind6 CALL WindowComm ; POP AF ; JP EscLp ; OptTable DEFW #0000,#0000 ;-L,-S,-O DEFW #0000,#0001 ; L,-S,-O DEFW #0001,#0000 ;-L,-S, O DEFW #0001,#0001 ; L,-S, O DEFW #0000,#0100 ;-L, S,-O DEFW #0000,#0101 ; L, S,-O DEFW #0001,#0100 ;-L, S, O DEFW #0001,#0101 ; L, S, O ; FormatFile LD IX,BlockList ; FFlp LD A,(IX) INC IX OR A RET Z ; CALL SetWind ; LD HL,Window ; LD A,(HL) OR A JR NZ FFlpA ; FFlp1 INC HL INC HL LD (HL),0 INC HL ; XOR A LD B,A LD C,A ; CPIR ; LD A,(HL) OR A JR Z FFlp1 ; FFlpA LD A,1 ; FFlpB LD (HL),A INC L JR NZ FFlpB ; INC H LD A,H AND %0000 1111 JR NZ FFlpA ; JP FFlp ; PrintHL PUSH HL ; CALL WriteHex16 ; CALL ReadKey ; POP HL RET ; PruneBlock CALL CalcplCursor ; CALL GetNewBlock RET C ; LD C,A ; CALL SetWindA ; CALL HalveBlock ; CALL GetWind ; CALL FindBlock ; CALL InsertOneA ; INC HL ; LD (HL),C ; CALL PutFileBlocks ; CALL FormatFile ; CALL ReplaceplCur ; RET ; CalcplCursor LD DE,(plCursor) LD IX,(plCursorBlock) ; LD BC,0 ; LD A,(IX) CALL SetWind ; LD HL,Window ; CplClp OR A SBC HL,DE ADD HL,DE ; JR Z CplCf ; INC HL INC HL INC HL ; PUSH BC ; XOR A LD B,A LD C,A ; CPIR ; POP BC ; INC BC JP CplClp ; CplCf LD (plCursorCount),BC ; RET ; ReplaceplCur LD IX,(plCursorBlock) ; LD A,(IX) CALL SetWind ; LD HL,Window ; LD BC,(plCursorCount) ; LD A,B OR C JR Z RplCf ; RplClp PUSH BC CALL MoveDown POP BC ; DEC HL CPI JP V RplClp ; RplCf LD (plCursor),HL ; LD (plCursorBlock),IX ; RET ; HalveBlock PUSH BC ; LD HL,Window ; HBlpA CALL SkipLine ; LD A,H SUB (Window+#800)/256 ; JR C HBlpA ; LD (HL),1 ; LD DE,WindowA LD BC,#800 LDIR ; XOR A LD (WindowA),A ; POP BC ; RET ; SkipLine INC HL INC HL INC HL ; SkipLine1 XOR A LD B,A LD C,A CPIR ; RET ; FindBlock LD HL,BlockList ; PUSH BC ; LD B,A ; FBlp LD A,(HL) OR A SCF JR Z FBx ; CP B JR Z FBx ; INC HL JR FBlp ; FBx POP BC ; RET ; InsertOneA PUSH BC ; LD BC,1 ; CALL InsertBlocksA ; POP BC RET ; InsertOneB PUSH BC ; LD BC,1 ; CALL InsertBlocksB ; POP BC RET ; InsertBlocksA PUSH HL ; LD E,L LD D,H ; ADD HL,BC ; LD BC,0 ; IBlpA LD A,(DE) OR A JR Z IBa ; INC DE INC HL INC BC ; JR IBlpA ; IBa EX DE,HL LDDR ; POP HL ; RET ; InsertBlocksB PUSH HL ; LD E,L LD D,H ; ADD HL,BC ; LD BC,0 ; IBlpB LD A,(DE) OR A JR Z IBb ; INC DE INC HL INC BC ; JR IBlpB ; IBb EX DE,HL INC BC LDDR ; POP HL ; RET ; RemoveBlocks PUSH HL ; LD E,L LD D,H ; ADD HL,BC ; RBlp LD A,(HL) LD (DE),A ; INC DE INC HL ; OR A JR NZ RBlp ; POP HL RET ; PrintInitial LD A,1 LD (pSCursorX),A LD A,SCursoriY LD (pSCursorY),A ; CALL PlaceCursor ; LD HL,Window LD (plCursor),HL ; LD IX,BlockList LD (plCursorBlock),IX ; RePrintInitial CALL PlaceCursor ; LD HL,(plCursor) LD IX,(plCursorBlock) ; LD A,(IX) CALL SetWind ; LD C,lScreen-1 ; LD A,(pSCursorY) LD (TempCursorY),A DEC A JR Z RPWx ; LD B,A ; NEG ADD A,C LD C,A ; RPWlp CALL MoveUp JR C RPWx ; LD A,(pSCursorY) DEC A LD (pSCursorY),A ; INC C ; DJNZ RPWlp ; JR RPWx1 ; RPWx LD A,(pSCursorY) LD E,A DEC E JR Z RPWx1 ; CALL PrintHomeTL ; RPWxlp LD A,cEsc CALL Print ; LD A,cCurDown CALL Print ; DEC E JR NZ RPWxlp ; LD A,cCurUp CALL Print ; LD DE,sTopOfFile CALL PrintStr ; RPWx1 LD B,C ; PIlp CALL PlaceCursor CALL ShowLine CALL MoveDown JR C PIx ; LD A,(pSCursorY) INC A LD (pSCursorY),A ; DJNZ PIlp ; CALL PlaceCursor ; CALL ShowLine ; PIx1 LD A,(TempCursorY) LD (pSCursorY),A ; JP PlaceCursor ; PIx LD A,cCurDown CALL Print ; LD DE,sBottomOfFile CALL PrintStr ; DEC B JR Z PIx1 ; PIxLp LD A,cCurDown CALL Print ; LD A,cEsc CALL Print ; DJNZ PIxLp ; JR PIx1 ; ShowLine LD A,cHomeLeft CALL Print ; LD A,(IX) CALL SetWind ; LD A,(HL) OR A RET NZ ; PUSH HL ; INC HL ; LD A,(HL) LD (DataByte),A ; AND %1100 0000 ; LD A,0 JR Z SL1 ; LD A,%1000 0000 ; SL1 LD (CharORMask),A ; INC HL INC HL ; PUSH BC ; LD DE,LineBuffer CALL Expand ; LD HL,LineBuffer CALL StripSpaces ; LD HL,LineBuffer CALL ShowLine1 ; POP BC POP HL RET ; ShowLine1 LD B,wScreen-1 ; LD A,(CharORMask) LD C,A ; SLlp LD A,(HL) ; INC HL OR A JR Z SL1x ; OR C CALL Print ; DJNZ SLlp ; RET ; SL1x LD A,wScreen ; SUB B ; LD B,A ; LD A,cFill CALL Print ; LD A,B CALL Print LD A,wScreen CALL Print ; LD A,(pSCursorY) CALL Print CALL Print ; LD A," " CALL Print ; RET ; SetUpCharMask PUSH IX PUSH HL PUSH AF ; LD HL,(plCursor) LD IX,(plCursorBlock) ; LD A,(IX) CALL SetWind ; INC HL LD A,(HL) ; AND %1100 0000 LD A,0 JR Z SUCMa ; LD A,%1000 0000 ; SUCMa LD (CharORMask),A ; POP AF POP HL POP IX ; RET ; MoveDown LD A,(IX) CALL SetWind ; LD A,(HL) OR A JR NZ MoveDownNB ; INC HL INC HL INC HL ; PUSH BC ; XOR A LD B,A LD C,A CPIR ; POP BC ; LD A,(HL) OR A RET Z ; MoveDownNB LD A,(IX+1) OR A SCF RET Z ; INC IX ; CALL SetWind ; LD HL,Window ; LD A,(HL) OR A JR NZ MoveDownNB ; RET ; MoveUp LD A,(IX) CALL SetWind ; LD DE,Window OR A SBC HL,DE ADD HL,DE ; JR Z MoveUpNB ; DEC HL DEC HL ; PUSH BC ; XOR A LD B,A LD C,A CPDR ; POP BC ; DEC HL ; OR A RET ; MoveUpNB LD A,(IX-1) OR A SCF RET Z ; DEC IX ; CALL SetWind ; LD HL,Window LD A,(HL) OR A JR NZ MoveUpNB ; LD DE,3 ; PUSH BC ; MoveUpNBa PUSH HL POP IY ; ADD HL,DE ; XOR A LD B,A LD C,A CPIR ; LD A,(HL) OR A JR Z MoveUpNBa ; POP BC ; PUSH IY POP HL ; OR A RET ; EditLp CALL FilterKey LD B,A ; CP ceMark JR Z EditMark ; CP ceNext JR Z EditNext ; CP cEsc JP Z EscapeCode ; CP cCret JR Z EditCret ; CP cDel JR Z EditDel ; CP cCurRemo JR Z EditFDel ; CP #20 JP C EditCtrl ; LD A,(pSCursorX) CP wScreen JR Z EditLp ; CALL EditAlter ; LD A,(pSCursorX) INC A LD (pSCursorX),A ; CALL PlaceCursor JR EditLp ; EditMark CALL EditMark1 ; JR EditLp ; EditNext JP FindNext ; EditCret CALL EditCret1 ; CALL IncLineCnt ; JR EditLp ; EditDel CALL EditDel1 ; JR EditLp ; EditFDel CALL EditFDel1 ; JR EditLp ; EditAlter CALL SetUpCharMask ; LD A,(InsertFlag) OR A JR NZ EditOver ; LD A,cCurInse CALL Print ; EditOver LD A,(CharORMask) OR B ; CALL Print ; LD A,B ; PUSH AF ; LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL ReadLine ; LD HL,LineBuffer1 LD DE,LineBuffer ; CALL Expand ; CALL CalcBufferAddr ; LD A,(InsertFlag) OR A JR NZ EditA ; PUSH HL CALL InsertInBuffer POP HL ; EditA POP AF ; LD (HL),A ; LD HL,LineBuffer CALL StripSpaces ; LD DE,LineBuffer LD HL,LineBuffer1 ; CALL Compress ; LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL ReplaceLine ; LD HL,(plCursor) LD IX,(plCursorBlock) ; JP ShowLine ; EditCret1 CALL ClearToEnd ; LD A,cScrollTU CALL Print ; LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL ReadLine ; LD HL,LineBuffer1 LD DE,LineBuffer ; CALL Expand ; CALL CalcBufferAddr ; LD A,(HL) LD (HL),0 ; PUSH AF PUSH HL ; LD HL,LineBuffer CALL StripSpaces ; LD DE,LineBuffer LD HL,LineBuffer1 ; CALL Compress ; LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL ReplaceLine ; LD A,1 LD (pSCursorX),A CALL PlaceCursor ; POP HL POP AF ; LD (HL),A ; PUSH HL ; CALL StripSpaces ; LD HL,LineBuffer1 POP DE ; CALL Compress ; LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL MoveDown ; LD (plCursor),HL LD (plCursorBlock),IX ; CALL InsertLine ; LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL ShowLine ; JP PlaceCursor ; EditDel1 LD A,(pSCursorX) DEC A JR Z EditDelBack ; LD (pSCursorX),A ; LD A,cDel CALL Print ; LD A,(InsertFlag) OR A JR NZ EditDelA ; LD A,cCurRemo CALL Print ; EditDelA LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL ReadLine ; LD HL,LineBuffer1 LD DE,LineBuffer ; CALL Expand ; CALL CalcBufferAddr ; LD A,(InsertFlag) OR A JR NZ EditDelB ; PUSH HL CALL RemoveInBuffer ; POP HL ; JR EditDelC ; EditDelB LD (HL),#20 ; EditDelC LD HL,LineBuffer CALL StripSpaces ; LD DE,LineBuffer LD HL,LineBuffer1 ; CALL Compress ; LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL ReplaceLine ; LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL ShowLine ; JP PlaceCursor ; EditDelBack LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL MoveUp RET C ; CALL MoveDown ; LD HL,(plCursor) LD IX,(plCursorBlock) ; PUSH HL PUSH IX ; CALL ReadLine ; POP IX POP HL ; CALL RemoveLine ; LD HL,LineBuffer1 LD DE,LineBuffer2 ; CALL Expand ; LD HL,LineBuffer2 CALL StripSpaces ; LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL MoveUp RET C ; LD (plCursor),HL LD (plCursorBlock),IX ; CALL DecLineCnt ; CALL ReadLine ; LD HL,LineBuffer1 LD DE,LineBuffer ; CALL Expand ; LD HL,LineBuffer CALL StripSpaces ; LD BC,LineBuffer OR A SBC HL,BC ; PUSH HL ; ADD HL,BC ; EX DE,HL LD HL,LineBuffer2 LD BC,lLineBuffer LDIR ; LD DE,LineBuffer LD HL,LineBuffer1 ; CALL Compress ; LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL ReplaceLine ; LD A,cScrollTD CALL Print ; LD HL,(plCursor) LD IX,(plCursorBlock) ; LD A,(pSCursorY) DEC A JR Z EDBa ; LD B,A ; EDBlp CALL MoveUp JR C EDBa ; DJNZ EDBlp ; CALL PrintHomeTL ; CALL ShowLine ; CALL PlaceCursor ; JR EDBa1 ; EDBa DJNZ EDBa1 ; CALL PrintHomeTL ; LD DE,sTopOfFile CALL PrintStr ; CALL PlaceCursor ; EDBa1 LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL ShowLine ; POP HL ; LD A,L INC A ; LD (pSCursorX),A ; JP PlaceCursor ; EditFDel1 LD A,cCurRemo CALL Print ; LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL ReadLine ; LD HL,LineBuffer1 LD DE,LineBuffer ; CALL Expand ; CALL CalcBufferAddr ; PUSH HL CALL RemoveInBuffer ; POP HL ; LD HL,LineBuffer CALL StripSpaces ; LD DE,LineBuffer LD HL,LineBuffer1 ; CALL Compress ; LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL ReplaceLine ; LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL ShowLine ; JP PlaceCursor ; EditMark1 LD HL,(plCursor) LD IX,(plCursorBlock) ; LD A,(IX) CALL SetWind ; INC HL LD A,(HL) XOR %1000 0000 LD (HL),A DEC HL ; CALL ShowLine ; JP PlaceCursor ; ReadLine LD A,(IX) CALL SetWind ; LD A,(HL) OR A JR NZ ReadNull ; LD DE,LineBuffer1 ; INC HL INC HL INC HL ; ELlp LD A,(HL) LD (DE),A ; OR A RET Z ; INC DE INC HL ; JR ELlp ; ReadNull LD DE,LineBuffer1 ; AddSpaces LD B,90 ; LD A,#20 ; EAlp LD (DE),A INC DE ; DJNZ EAlp ; XOR A LD (DE),A ; RET ; StripSpaces XOR A LD B,A LD C,A ; CPIR ; DEC HL ; StripSpcLp DEC HL LD A,(HL) CP " " JR Z StripSpcLp ; INC HL LD (HL),0 ; RET ; CalcBufferAddr LD A,(pSCursorX) ; DEC A ; ADD A,LineBuffer & #FF LD L,A ; LD A,LineBuffer / 256 ADC A,0 LD H,A ; RET ; InsertInBuffer PUSH BC ; EX DE,HL ; LD HL,LineBuffer+lLineBuffer-1 OR A SBC HL,DE ; LD BC,HL ; ADD HL,DE ; LD DE,HL DEC HL ; LDDR ; POP BC RET ; RemoveInBuffer PUSH BC ; EX DE,HL ; LD HL,LineBuffer+lLineBuffer-1 OR A SBC HL,DE ; LD BC,HL ; LD HL,DE ; INC HL ; LDIR ; POP BC RET ; CalcBufferLen PUSH HL ; LD HL,LineBuffer1 LD B,A LD C,A ; CPIR ; LD BC,LineBuffer1 OR A SBC HL,BC ; LD (BL),HL ; POP HL ; RET ; ReplaceLine LD (P0),HL LD DE,HL ; CALL CalcBufferLen ; LD A,(HL) OR A JP NZ InsertLast ; INC HL LD A,(HL) LD (DByte),A ; INC HL INC HL ; XOR A LD B,A LD C,A CPIR ; LD (P2),HL ; LD HL,(BL) ; INC HL INC HL INC HL ; ADD HL,DE ; LD (P3),HL ; LD BC,(P2) OR A SBC HL,BC ; JR Z P2eP3 ; JR NC P2lP3 ; P2gP3 LD HL,Window+lWindow OR A SBC HL,BC ; LD BC,HL LD HL,(P2) LD DE,(P3) ; LDIR ; LD DE,(P0) JP P2eP3 ; P2lP3 LD HL,Window+lWindow LD BC,(P3) OR A SBC HL,BC ; LD BC,HL ; LD HL,Window+lWindow-1 LD DE,(P3) OR A SBC HL,DE LD DE,(P2) ADD HL,DE ; LD DE,Window+lWindow-1 ; LDDR ; LD DE,(P0) ; CALL P2eP3 ; CheckBlockSize LD HL,Window+lWindow-1 ; CBSlp LD A,(HL) OR A JR Z CBSf ; DEC L JP NZ CBSlp ; RET ; CBSf JP PruneBlock ; P2eP3 XOR A LD (DE),A INC DE LD A,(DByte) LD (DE),A INC DE XOR A LD (DE),A INC DE ; LD HL,LineBuffer1 LD BC,(BL) ; LDIR ; RET ; InsertLast LD DE,HL ; CALL P2eP3 ; LD A,1 LD (DE),A ; RET ; InsertLine LD (P0),HL ; LD (P2),HL ; CALL CalcBufferLen ; LD BC,(BL) ; INC BC INC BC INC BC ; ADD HL,BC ; LD (P3),HL ; JP P2lP3 ; RemoveLine LD A,(IX) CALL SetWind ; LD A,(HL) OR A RET NZ ; PUSH HL ; INC HL INC HL INC HL ; XOR A LD C,A LD B,A ; CPIR ; LD BC,HL ; LD HL,Window+lWindow OR A SBC HL,BC ; PUSH BC LD BC,HL POP HL ; POP DE ; LDIR ; RET ; EditCtrl CALL EditCtrl1 ; JP EditLp ; EditCtrl1 CP cCurUp JR Z EditMoveUp CP cCurDown JR Z EditMoveDown CP cCurLeft JR Z EditMoveLeft CP cCurRight JR Z EditMoveRight ; RET ; EditMoveLeft LD A,(pSCursorX) CP 1 RET Z ; DEC A LD (pSCursorX),A ; JP PlaceCursor ; EditMoveRight LD A,(pSCursorX) CP wScreen RET Z ; INC A LD (pSCursorX),A ; JP PlaceCursor ; EditMoveUp LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL MoveUp RET C ; LD (plCursor),HL LD (plCursorBlock),IX ; CALL DecLineCnt ; LD A,(pSCursorY) DEC A LD (pSCursorY),A ; JR NZ EMUprint ; INC A LD (pSCursorY),A ; LD A,cCurUp CALL Print ; CALL ShowLine ; JP PlaceCursor ; EMUprint LD A,cCurUp JP Print ; EditMoveDown LD HL,(plCursor) LD IX,(plCursorBlock) ; CALL MoveDown RET C ; LD (plCursor),HL LD (plCursorBlock),IX ; CALL IncLineCnt ; LD A,(pSCursorY) INC A LD (pSCursorY),A ; CP lScreen+1 JR C EMDprint ; DEC A LD (pSCursorY),A ; LD A,cCurDown CALL Print ; CALL ShowLine ; JP PlaceCursor ; EMDprint LD A,cCurDown JP Print ; IncLineCnt PUSH HL ; LD HL,(cLineCnt) INC HL LD (cLineCnt),HL ; JR UpdateLC1 ; DecLineCnt PUSH HL ; LD HL,(cLineCnt) DEC HL LD (cLineCnt),HL ; JR UpdateLC1 ; UpdateLC PUSH HL UpdateLC1 PUSH DE ; LD DE,sEnterWind0 CALL WindowComm ; LD DE,sNameLine CALL PrintStr ; LD HL,(cLineCnt) CALL WriteDec16 ; LD DE,sEnterWind1 CALL WindowComm ; POP DE POP HL ; RET ; Read CALL Skip CP "#" JR Z ReadHex CP "%" JR Z ReadBin CALL Num RET C ReadDec SUB "0" LD H,0 LD L,A Read1 INC DE LD A,(DE) CALL Num CCF RET NC SUB "0" LD B,H LD C,L ADD HL,HL RET C ADD HL,HL RET C ADD HL,BC RET C ADD HL,HL RET C ADD A,L LD L,A JR NC Read1 INC H JR NZ Read1 RET ; ReadHex INC DE LD A,(DE) CALL Hex RET C LD H,0 LD L,A Read3 INC DE LD A,(DE) CALL Hex CCF RET NC ADD HL,HL RET C ADD HL,HL RET C ADD HL,HL RET C ADD HL,HL RET C OR L LD L,A JR Read3 ; ReadBin INC DE LD A,(DE) CALL Bin RET C LD H,0 LD L,A RB1 CALL Skip1 CALL Bin CCF RET NC RRCA ADC HL,HL RET C JR RB1 ; Hex SUB "0" RET C CP 10 CCF RET NC SUB 7 CP 10 RET C CP 17 CCF RET ; Bin SUB "0" RET C CP 2 CCF RET ; WriteDec16 LD C,1 LD DE,-10000 CALL Write1 LD DE,-1000 CALL Write1 LD DE,-100 CALL Write1 LD DE,-10 CALL Write1 LD A,L ADD A,"0" CALL Print WriteS LD A," " CALL Print RET ; Write1 XOR A Write2 INC A ADD HL,DE JR C Write2 SBC HL,DE CP C JR Z WriteS DEC C ADD A,#2F CALL Print RET ; Null EQU #00 Term1 EQU #08 Term2 EQU #0A Tab EQU #0A Eof EQU #0C ; Compress LD A,(TokenFlag) OR A JR Z DontComp ; LD C,0 JR Comp3 ; DontComp LD A,(DE) LD (HL),A OR A RET Z INC HL INC DE ; JR DontComp ; Comp1 INC HL Comp2 INC DE Comp3 LD A,(DE) LD (HL),A OR A RET Z CP #20 JR NZ Comp4 INC C JR Comp2 ; Comp4 DEC C JR Z Comp5 INC C JR Z Comp6 LD (HL),Tab INC HL LD (HL),C INC HL JR Comp6 ; Comp5 LD (HL),#20 INC HL Comp6 PUSH HL CALL Tokenise POP HL LD C,0 JR C Comp7 LD (HL),B INC HL JR Comp3 ; Comp7 LD A,(DE) AND #7F LD (HL),A CP #3C JR NC Comp8 CALL Pfx JR NZ Comp1 Comp8 INC DE INC HL LD A,(DE) LD (HL),A CALL Ident JR NC Comp8 JR Comp3 ; Expand1 INC HL Expand LD A,(HL) CP Tab JR Z Expand6 CP #80 JR NC Expand3 OR A JP Z AddSpaces Expand2 LD (DE),A INC DE JR Expand1 ; Expand3 CP #ED JR NC Expand1 PUSH HL ADD A,A LD L,A LD H,Tfil/256 LD A,(HL) INC HL LD H,(HL) LD L,A JR Expand5 ; Expand4 LD (DE),A INC DE INC HL Expand5 LD A,(HL) CP #20 JR NC Expand4 POP HL JR Expand1 ; Expand6 INC HL LD B,(HL) LD A,#20 Expand7 LD (DE),A INC DE DJNZ Expand7 JR Expand1 ; Tokenise LD A,(DE) ; ADD A,A LD L,A ; LD H,CompVectors/256 ; LD A,(HL) INC L LD H,(HL) LD L,A ; OR H SCF RET Z ; TokeniseA LD A,(DE) CP (HL) JR Z Token2 Token1 LD A,(HL) INC HL CP #20 JR NC Token1 ; INC HL ; LD A,(HL) ; CP Eof JR NZ TokeniseA SCF RET ; Token2 PUSH DE Token3 INC DE INC HL LD A,(DE) CP (HL) JR Z Token3 OR A LD A,(HL) JR Z Token6 CP Term1 JR Z Token5 CP Term2 JR NZ Token4 LD A,(DE) CALL Ident JR C Token5 Token4 POP DE JR Token1 ; Token5 INC HL ; LD B,(HL) ; POP HL OR A RET ; Token6 CP Term1 JR Z Token5 CP Term2 JR Z Token5 POP DE JR Token1 ; Ident CP #80 CCF RET C CP "<" RET NC Num CP "0" RET C CP #3A CCF RET ; Pfx CP "#" RET Z CP "'" RET Z CP #22 RET ; EscapeCode LD DE,sOpenWind2 CALL WindowComm ; EscapeScreen LD DE,sLines CALL PrintStr ; LD DE,sEscPrompt CALL PrintStr ; EscLp CALL FilterKey CALL CaseConv ; CP cEsc JR Z EscapeExit ; CP "0" JR C Esc1 CP "9"+1 JR C GotoMark ; Esc1 CP "M" JP Z PlaceMark ; CP "R" JP Z RemoveMark ; CP "A" JP Z Assemble ; CP "-" JP Z MarkLine ; CP " " JP Z FindNext ; CP "L" JP Z ListFile ; CP "X" JP Z QuitEditor ; CP "H" JP Z PrintHelp ; CP "B" JP Z PrintBlocks ; CP "N" JP Z NewFile ; CP "O" JP Z OverWrite ; CP "I" JP Z Insert ; CP "S" JP Z Scroll ; CP "K" JP Z Test ; CP "D" JP Z Display ; CP "T" JP Z TokenSelect ; CP "F" JP Z FindComm ; CP "Q" JP Z GotoBeginning ; CP "Z" JP Z GotoEnd ; JR EscLp ; EscapeExit LD DE,sEnterWind1 CALL WindowComm ; LD DE,sCloseWind2 CALL WindowComm ; JP EditLp ; GotoMark SUB "0" ; INC A ; CALL FindMark JP C EscLp ; LD (plCursor),HL LD (plCursorBlock),IX ; LD (cLineCnt),DE ; JP FindFoundDisp ; FindMark LD C,A ; CALL MoveToBegin ; LD A,(IX) CALL SetWind ; FMlp INC HL ; LD A,(HL) AND %0000 1111 CP C JR Z FMfound ; DEC HL ; INC DE PUSH DE CALL MoveDown POP DE ; JP NC FMlp ; RET ; FMfound DEC HL ; OR A RET ; MarkLine LD HL,(plCursor) LD IX,(plCursorBlock) ; LD A,(IX) CALL SetWind ; INC HL SET 7,(HL) ; JR MarkUpdate ; PlaceMark LD DE,sIdentifyMark CALL PrintStr ; CALL FilterKey ; SUB "0" JR C PMfail ; CP 10 JR NC PMfail ; INC A ; PUSH AF CALL DoRemoveMark POP AF ; CALL DoPlaceMark ; PMfail JP EscapeExit ; RemoveMark LD DE,sRemoveMark CALL PrintStr ; CALL FilterKey ; CP "A" LD C,%0000 0000 JR Z RemoveData ; CP "E" LD C,%1011 1111 JR Z RemoveData ; CP "M" LD C,%0111 1111 JR Z RemoveData ; SUB "0" JR C PMfail ; CP 10 JR NC PMfail ; INC A ; CALL DoRemoveMark ; RMexit JP EscapeExit ; RemoveData CALL DoRemoveData ; MarkUpdate LD DE,sEnterWind1 CALL WindowComm ; CALL RePrintInitial ; LD DE,sEnterWind2 CALL WindowComm ; JR RMexit ; DoPlaceMark LD HL,(plCursor) LD IX,(plCursorBlock) ; LD B,A ; LD A,(IX) CALL SetWind ; INC HL LD A,(HL) ; AND %1111 0000 OR B ; LD (HL),A ; RET ; DoRemoveMark LD C,A ; CALL MoveToBegin ; LD A,(IX) CALL SetWind ; DRMlp INC HL LD A,(HL) AND %0000 1111 ; CP C JR NZ DRMa ; LD A,(HL) AND %1111 0000 LD (HL),A ; DRMa DEC HL ; CALL MoveDown JP NC DRMlp ; RET ; DoRemoveData CALL MoveToBegin ; LD A,(IX) CALL SetWind ; DRDlp INC HL LD A,(HL) AND C LD (HL),A DEC HL ; CALL MoveDown JP NC DRDlp ; RET ; GotoBeginning CALL MoveToBegin ; LD (plCursor),HL LD (plCursorBlock),IX ; LD (cLineCnt),DE ; JP FindFoundDisp ; GotoEnd CALL MoveToEnd ; LD (plCursor),HL LD (plCursorBlock),IX ; LD (cLineCnt),DE ; JP FindFoundDisp ; MoveToBegin LD DE,0 ; LD HL,Window LD IX,BlockList ; RET ; MoveToEnd LD HL,Window LD (plCursor),HL ; LD IX,BlockList LD (plCursorBlock),IX ; LD DE,0 ; GElp PUSH DE CALL MoveDown POP DE ; JR C GEx ; INC DE ; JP GElp ; GEx PUSH DE CALL MoveUp POP DE ; RET ; QuitEditor LD DE,sEnterWind1 CALL WindowComm ; LD DE,sCloseWind2 CALL WindowComm ; LD A,cCls CALL Print ; RET ; PrintHelp LD DE,sOpenWind3 CALL WindowComm ; LD DE,sHelpLines CALL PrintStr ; LD DE,sHelpScreen CALL PrintStr ; CALL WaitForEsc ; LD DE,sEnterWind2 CALL WindowComm ; LD DE,sCloseWind3 CALL WindowComm ; JP EscLp ; PrintBlocks LD DE,sLines CALL PrintStr ; LD DE,sBlocks CALL PrintStr ; LD DE,BlockList ; PBlp LD A,(DE) OR A JR Z PBx ; CALL WriteHex8 INC DE ; CALL PrintSpc ; JR PBlp ; PBx LD A,cCret CALL Print ; CALL WaitForEsc ; JP EscapeScreen ; NewFile LD DE,Dummy JP Begin ; Dummy DEFB 0 ; ListFile LD DE,sStartPrint CALL MonComm ; LD DE,sHomePrint CALL MonComm ; LD DE,sNamePrint CALL MonComm ; LD DE,sEnterWind1 CALL WindowComm ; LD A,cCls CALL Print ; CALL MoveToBegin ; LD A,(IX) CALL SetWind ; PrintLp CALL PrintLine ; CALL MoveDown JR NC PrintLp ; LD DE,sStopPrint CALL MonComm ; LD DE,sEnterWind2 CALL WindowComm ; JP FindFoundDisp ; PrintLine PUSH HL ; INC HL INC HL INC HL ; LD DE,LineBuffer1 CALL Expand ; LD HL,LineBuffer1 CALL StripSpaces ; LD B,Margin LD A," " ; PLMlp CALL Print DJNZ PLMlp ; LD DE,LineBuffer1 CALL PrintStr ; LD A,cCret CALL Print ; POP HL RET ; Insert XOR A LD (InsertFlag),A ; LD DE,sNameModeI JR InsertOver ; OverWrite LD A,1 LD (InsertFlag),A ; LD DE,sNameModeO ; InsertOver PUSH DE ; LD DE,sEnterWind0 CALL WindowComm ; POP DE ; CALL PrintStr ; JP EscapeExit ; Scroll LD DE,sLines CALL PrintStr ; LD DE,sScroll CALL PrintStr ; ScrollLp CALL FilterKey ; CP cEsc JR Z ScrollExit ; CP "0" JR C ScrollLp ; CP "4" JR NC ScrollLp ; LD (sScrollRate1),A ; LD DE,sOpenWind1 CALL WindowComm ; CALL RePrintInitial ; ScrollExit JP EscapeExit ; Test LD IX,BlockList LD IY,BlockList ; LD HL,Window LD DE,WindowA ; LD BC,(plCursorBlock) LD A,(BC) LD (lCursorBlock),A ; LD A,(IX) CALL SetWind ; LD A,(IY) CALL SetWindA ; LD A,(HL) OR A JR Z CompLp ; LD A,(IX+1) OR A JR Z TestExit ; CompLp CALL CompLine ; JR NC CompLp ; LD A,1 LD (DE),A ; LD (IY+1),0 ; TestExit CALL PasteX ; CALL FormatFile ; JP EscLp ; CompLine LD A,(lCursorBlock) CP (IX) JR NZ CompLineA ; LD BC,(plCursor) ; OR A SBC HL,BC ADD HL,BC ; JR NZ CompLineA ; PUSH HL ; LD HL,-#1000 ADD HL,DE ; LD (plCursor),HL ; POP HL ; LD (plCursorBlock),IY ; CompLineA LD BC,3 ; LDIR ; CPLa LD A,(HL) LDI ; OR A JR NZ CPLa ; PUSH HL LD HL,WindowA+#F80 OR A SBC HL,DE ; POP HL JP P CPLb ; LD A,1 LD (DE),A ; INC IY LD A,(IY) CALL SetWindA LD DE,WindowA ; CPLb LD A,(HL) OR A RET Z ; LD A,(IX+1) OR A SCF RET Z ; INC IX CALL SetWind LD HL,Window ; JR CPLb ; PasteX CALL PutFileBlocks RET C ; LD A,(BlockList) OR A RET NZ ; CALL GetFileBlocks ; RET ; Display LD HL,(plCursor) CALL WriteHex16 ; LD HL,(plCursorBlock) CALL WriteHex16 ; CALL WaitForEsc ; JP EscapeExit ; TokenSelect LD A,(TokenFlag) XOR %0000 0001 LD (TokenFlag),A ; CALL DispToken ; JP EscLp ; DispToken LD DE,sEnterWind0 CALL WindowComm ; LD DE,sNameToken ; LD A,(TokenFlag) OR A JR NZ DTa ; LD DE,sNameNoToken ; DTa CALL PrintStr ; LD DE,sEnterWind2 CALL WindowComm ; RET ; FindComm LD DE,sOpenWind5 CALL WindowComm ; LD DE,sEnterWind2 CALL WindowComm ; LD DE,sLines CALL PrintStr ; LD DE,sFindComm CALL PrintStr ; LD HL,(plCursor) LD (pFCursor),HL ; LD HL,(plCursorBlock) LD (pFCursorBlock),HL ; LD HL,(cLineCnt) LD (cFindCnt),HL ; FindComm1 CALL DisplayStrings ; FindLp1 CALL FilterKey ; CP cEsc JR Z FindExit ; CP "0" JR C Find1 CP "9"+1 JR C FindMarker ; Find1 CP "S" JP Z FindStr ; CP "L" JP Z FindLabel ; CP "N" JP Z FindLine ; CP "E" JP Z FindError ; CP "M" JP Z FindMarked ; CP "R" JP Z FindReplace ; CP "U" JP Z FindSetUp ; CP "D" JP Z FindSetDown ; CP "Q" JP Z FindSetTop ; CP "Z" JP Z FindSetBottom ; CP cCret JR NZ FindLp1 ; FindNext1 LD HL,(pFindMode) JP (HL) ; FindNext LD HL,(plCursor) LD (pFCursor),HL ; LD HL,(plCursorBlock) LD (pFCursorBlock),HL ; LD HL,(cLineCnt) LD (cFindCnt),HL ; JR FindNext1 ; FindFoundDisp LD A,1 LD (pSCursorX),A ; FindFoundDisp1 LD A,SCursoriY LD (pSCursorY),A ; LD DE,sEnterWind1 CALL WindowComm ; CALL RePrintInitial ; CALL UpdateLC ; LD DE,sCloseWind5 CALL WindowComm ; JP EscapeExit ; FindExit LD DE,sCloseWind5 CALL WindowComm ; JP EscapeScreen ; FindMarker SUB "0" ; INC A ; CALL FindMark JP C FindLp1 ; LD (pFCursor),HL LD (pFCursorBlock),IX ; LD (cFindCnt),DE ; JP FindLp1 ; FindSetUp LD HL,FindMoveUp LD (pFindDir),HL ; JP FindLp1 ; FindSetDown LD HL,FindMoveDown LD (pFindDir),HL ; JP FindLp1 ; FindSetTop CALL MoveToBegin ; LD (pFCursor),HL LD (pFCursorBlock),IX LD (cFindCnt),DE ; JR FindSetDown ; FindSetBottom CALL MoveToEnd ; LD (pFCursor),HL LD (pFCursorBlock),IX LD (cFindCnt),DE ; JP FindSetUp ; FindStr LD DE,FindStrData CALL GetString ; LD DE,DoFindStr LD (pFindMode),DE ; JP FindComm1 ; FindLabel LD DE,FindLabelData CALL GetString ; LD DE,DoFindLabel LD (pFindMode),DE ; JP FindComm1 ; FindLine LD DE,FindLineData CALL GetString ; LD DE,DoFindLine LD (pFindMode),DE ; JP FindComm1 ; FindError LD DE,DoFindError LD (pFindMode),DE ; JP FindComm1 ; FindMarked LD DE,DoFindMarked LD (pFindMode),DE ; JP FindComm1 ; FindReplace LD DE,FindReplData CALL GetString ; JP FindComm1 ; DoFindStr LD HL,(pFCursor) LD IX,(pFCursorBlock) ; Findstg1 CALL DoFindMove JP C FindFoundDisp ; PUSH HL ; INC HL INC HL INC HL ; LD DE,LineBuffer CALL Expand ; LD A,#80 LD (DE),A ; CALL Findstg3 ; POP HL ; JR NZ Findstg1 ; LD (plCursor),HL LD (plCursorBlock),IX ; LD HL,(cFindCnt) LD (cLineCnt),HL ; LD HL,(FindStrTemp) LD DE,LineBuffer OR A SBC HL,DE ; LD A,L LD (pSCursorX),A ; JP FindFoundDisp1 ; Findstg3 LD HL,LineBuffer Findstg4 LD DE,FindStrData ; LD A,(DE) Findstg5 BIT 7,(HL) RET NZ ; CP (HL) INC HL JR NZ Findstg5 ; LD (FindStrTemp),HL ; Findstg6 INC DE LD A,(DE) CP (HL) INC HL JR Z Findstg6 ; LD HL,(FindStrTemp) ; OR A JR NZ Findstg4 ; RET ; DoFindLabel LD HL,(pFCursor) LD IX,(pFCursorBlock) ; DFLlp0 CALL DoFindMove JP C FindFoundDisp ; PUSH HL ; INC HL INC HL INC HL ; LD DE,FindLabelData ; DFLlp1 LD A,(DE) OR A JR Z DFLfound ; CP (HL) ; JR NZ DFLa ; INC HL INC DE ; JP DFLlp1 ; DFLa POP HL ; JP DFLlp0 ; DFLfound POP HL ; LD (plCursor),HL LD (plCursorBlock),IX ; LD HL,(cFindCnt) LD (cLineCnt),HL ; JP FindFoundDisp ; FindMoveDown CALL MoveDown RET C ; LD BC,(cFindCnt) INC BC LD (cFindCnt),BC ; RET ; FindMoveUp CALL MoveUp RET C ; LD BC,(cFindCnt) DEC BC LD (cFindCnt),BC ; RET ; DoFindLine LD DE,FindLineData CALL Read JP C FindFoundDisp ; PUSH HL ; CALL MoveToBegin ; LD (cFindCnt),DE ; POP BC ; DFLlp LD A,B OR C JR Z DFLnfound ; DEC BC ; PUSH BC CALL FindMoveDown POP BC ; JR NC DFLlp ; JP FindFoundDisp ; DFLnfound LD (plCursor),HL LD (plCursorBlock),IX ; LD HL,(cFindCnt) LD (cLineCnt),HL ; JP FindFoundDisp ; DoFindError LD HL,(pFCursor) LD IX,(pFCursorBlock) ; DFElp CALL DoFindMove JP C FindFoundDisp ; INC HL ; BIT 6,(HL) ; DEC HL ; JR Z DFElp ; JP DFLnfound ; DoFindMarked LD HL,(pFCursor) LD IX,(pFCursorBlock) ; DFMlp CALL DoFindMove JP C FindFoundDisp ; INC HL ; BIT 7,(HL) ; DEC HL ; JR Z DFMlp ; JP DFLnfound ; GetString PUSH DE ; CALL PrintStr ; LD A,cHomeLeft CALL Print ; CALL GetLine ; EX DE,HL ; POP DE ; LD BC,wScreen LDIR ; LD A,cCurUp CALL Print ; LD A,cEsc CALL Print ; RET ; GetFileBlocks LD DE,cFileName LD HL,BlockList ; CALL fsGetList RET C ; LD A,(BlockList) OR A RET NZ ; CALL GetNewBlock RET C ; CALL SetWind ; LD (BlockList),A XOR A LD (BlockList+1),A ; LD A,1 LD (Window),A ; PutFileBlocks LD BC,(cFileSpec) LD DE,BlockList ; CALL fsPutList ; RET ; GetNewBlock LD B,4 CALL fsGetBlock RET ; GetFileName CALL Skip ; LD A,(DE) OR A JR Z GFN0 CP #D JR Z GFN0 ; JR GFN1 ; GFN0 LD DE,sFirstPrompt CALL PrintStr ; LD DE,cFileName CALL PrintStrFN ; LD DE,sFileName CALL PrintStr ; LD DE,cFileName CALL PrintStrFN ; LD DE,sFileName1 CALL PrintStr ; CALL GetLine ; CALL Skip ; LD A,(DE) OR A JR Z GFNa ; CP #D JR Z GFNa ; GFN1 EX DE,HL LD DE,cFileName LD BC,#40 LDIR ; GFNa LD DE,cFileName CALL fsCreate LD (cFileSpec),BC RET NC ; CP erFAE RET Z ; JP GetFileName ; Skip2 INC DE Skip1 INC DE Skip LD A,(DE) CP #20 JR Z Skip1 CP #0A JR Z Skip2 RET ; FilterKey CALL ReadKey AND %0111 1111 ; RET ; WaitForEsc CALL FilterKey CP cEsc JR NZ WaitForEsc RET ; CaseConv CP "a" RET C ; CP "z"+1 RET NC ; ADD A,"A"-"a" RET ; PrintStr LD A,(DE) OR A RET Z ; INC DE CALL Print ; JR PrintStr ; PrintStrFN LD A,(DE) OR A RET Z ; CP #0D RET Z ; CP " " JR C PSFNa ; OR %1000 0000 ; PSFNa INC DE CALL Print ; JR PrintStrFN ; DisplayStrings LD DE,sEnterWind5 CALL WindowComm ; LD DE,sStrings CALL PrintStr ; LD DE,FindStrData LD HL,#010A LD B,13 LD C,cGCret ; CALL DSstr ; LD DE,FindLabelData LD HL,#0121 ; CALL DSstr ; LD DE,FindReplData LD HL,#013A ; CALL DSstr ; LD DE,FindLineData LD HL,#0150 LD B,5 ; CALL DSstr ; LD DE,sEnterWind2 CALL WindowComm ; RET ; DSstr LD A,cPrAt CALL Print ; LD A,L CALL Print ; LD A,H CALL Print ; PUSH BC ; DSlp LD A,(DE) INC DE OR A JR Z DSx ; CALL Print ; DJNZ DSlp ; LD A,C CALL Print ; POP BC RET ; DSx INC B ; LD A,C ; DSx1 CALL Print ; LD A," " ; DJNZ DSx1 ; POP BC RET ; PrintSpc PUSH AF ; LD A," " CALL Print ; POP AF RET ; PrintHomeTL PUSH AF ; LD A,cPrAt CALL Print ; LD A,1 CALL Print ; CALL Print ; POP AF RET ; PlaceCursor PUSH AF ; LD A,cPrAt CALL Print ; LD A,(pSCursorX) CALL Print ; LD A,(pSCursorY) CALL Print ; POP AF RET ; ClearToEnd PUSH AF ; LD A,cFill CALL Print ; LD A,(pSCursorX) CALL Print LD A,wScreen CALL Print ; LD A,(pSCursorY) CALL Print LD A,(pSCursorY) CALL Print ; LD A," " CALL Print ; POP AF RET ; SetWindA PUSH BC LD BC,WindowA OUT (C),A POP BC RET ; SetWind PUSH BC LD BC,Window OUT (C),A POP BC RET ; GetWind PUSH BC LD BC,Window IN A,(C) POP BC RET ; GetWindA PUSH BC LD BC,WindowA IN A,(C) POP BC RET sFireUp DEFB cCret DEFM " Zeus Integrated Translator" DEFB cCret,cCret DEFM " Zeus III ( Z80 ) Editor-Assembler Package" DEFB cCret,cCret DEFM " (C) S.Brattel and 'Mott-Mott' Mottershead" DEFB cCret,cCret DEFM "All rights reserved , no part of this programme or any associated" DEFB cCret DEFM "beer mats may be borrowed , retrieved from an information storage" DEFB cCret DEFM "system , debugged , deleted , maltreated , maligned or refined ." DEFB cCret DEFB cCret DEFM " It may not be used for any purpose other than that for which it" DEFB cCret DEFM " was intended , and then only in a user-friendly fashion amongst" DEFB cCret DEFM " consenting adults ." ; DEFB 0 ; sTopOfFile DEFB cEsc ; DEFM /<< Start >>/ ; DEFB 0 ; sBottomOfFile DEFB cEsc ; DEFM /<< End >>/ ; DEFB 0 ; sStartPrint DEFM /PRINT 1/ DEFB 0 ; sHomePrint DEFM /PRINT T / DEFB 0 ; sNamePrint DEFM /PRINT N / DEFB 0 ; sStopPrint DEFM /PRINT 0/ DEFB 0 ; sName DEFB cPrAt,1,1 ; DEFM /Bungle's Full Screen Edit Insert , Token , Line / ; DEFB cCret ; DEFB cFill,1,85,2,2,#9F ; DEFB 0 ; sNameFile DEFB cPrAt,1,1 DEFM /Editing / DEFB cPrAt,10,1 DEFB 0 ; sNameModeI DEFB cPrAt,27,1 DEFM /Insert / DEFB 0 ; sNameModeO DEFB cPrAt,27,1 DEFM / Over / DEFB 0 ; sNameToken DEFB cPrAt,35,1 DEFM / Token / DEFB 0 ; sNameNoToken DEFB cPrAt,35,1 DEFM / Ascii / DEFB 0 ; sNameLine DEFB cPrAt,49,1,0 ; sFirstPrompt DEFB cCret ; DEFM /Full screen editor : / ; DEFM /Editing file :- / ; DEFB 0 ; sFileName DEFB cCret ; DEFM /New file ? (Type file name or RETURN for / ; DEFB #00 ; sFileName1 DEFM / )/ DEFB cCret,0 ; sOpenWind1 DEFM /1 (15,24,/ sScrollRate1 DEFM /2)/ DEFB 0 ; sOpenWind2 DEFM /2 (178,7,0)/ DEFB 0 ; sOpenWind3 DEFM /3 (15,14,0)/ DEFB 0 ; sOpenWind5 DEFM /5 (0,1,0)/ DEFB 0 ; sOpenWind6 DEFM /6 (15,24,2)/ DEFB 0 ; sCloseWind6 DEFM /6 C/ DEFB 0 ; sEnterWind0 DEFM /0/ DEFB 0 ; sEnterWind1 DEFM /1/ DEFB 0 ; sEnterWind5 DEFM /5/ DEFB 0 ; sCloseWind1 DEFM /1 C/ DEFB 0 ; sCloseWind2 DEFM /2 C/ DEFB 0 ; sCloseWind3 DEFM /3 C/ DEFB 0 ; sCloseWind5 DEFM /5 C/ DEFB 0 ; sEnterWind2 DEFM /2/ DEFB 0 ; sEnterWind3 DEFM /3/ DEFB 0 ; sLines DEFB cCls ; DEFB cFill,1,85,1,1,#9F DEFB cFill,1,85,7,7,#A0 ; DEFB 0 ; sHelpLines DEFB cCls ; DEFB cFill,1,85,1,1,#9F DEFB cFill,1,85,15,15,#A0 ; DEFB 0 ; sStrings DEFB cPrAt,1,1 ; DEFM /String = / DEFS 14,cCurRight DEFM /,Label = / DEFS 14,cCurRight DEFM /,Replace = / DEFS 14,cCurRight DEFM /,Line =/ ; DEFB 0 ; sAssemble DEFB cCret ; DEFB "C"!#80,"R"!#80,"E"!#80,"T"!#80 DEFM / Assemble / ; DEFB "E"!#80,"S"!#80,"C"!#80 DEFM / Editor / ; DEFB "0"!#80,"."!#80,"."!#80,"7"!#80 DEFM / Options / ; DEFB cCCret ; DEFB 0 ; sEscPrompt DEFB cCret ; DEFB "O"!#80 DEFM / Overwrite / ; DEFB "N"!#80 DEFM / New File / ; DEFB "K"!#80 DEFM / Compress / ; DEFB "S"!#80,"P"!#80,"A"!#80,"C"!#80,"E"!#80 DEFM / Next / ; DEFB "M"!#80 DEFM / Place Mark / ; DEFB "0"!#80,"."!#80,"."!#80,"9"!#80 DEFM / Goto Mark/ ; DEFB cCCret ; DEFB "I"!#80 DEFM / Insert / ; DEFB "C"!#80 DEFM / Copy / ; DEFB "S"!#80 DEFM / Scroll / ; DEFB "T"!#80 DEFM / Tokenise / ; DEFB "Q"!#80 DEFM / Goto Start / ; DEFB "M"!#80 DEFM / Place Mark / ; DEFB cCCret ; DEFB "F"!#80 DEFM / Find / ; DEFB "P"!#80 DEFM / Paste / ; DEFB "B"!#80 DEFM / Blocks / ; DEFB "X"!#80 DEFM / Exit / ; DEFB "Z"!#80 DEFM / Goto End / ; DEFB "R" !#80 DEFM / Remove Mark / ; DEFB cCCret ; DEFB "E"!#80 DEFB "S"!#80 DEFB "C"!#80 DEFM / Do Edit / ; DEFB "A"!#80 DEFM / Assemble / ; DEFB "-"!#80 DEFM / Mark Line / ; DEFB "/"!#80 DEFM / Mark Block / ; DEFB "L"!#80 DEFM / List File / ; DEFB cCret ; DEFB 0 ; sIdentifyMark DEFB cEsc DEFM /Select the mark :- 0,1,2,3,4,5,6,7,8,9 / DEFB #00 ; sRemoveMark DEFB cEsc DEFM /Type the mark number 0,1,2,3,4,5,6,7,8,9,/ DEFB "A"!#80 DEFM /ll,/ DEFB "E"!#80 DEFM /rrors,/ DEFB "M"!#80 DEFM /arked / ; DEFB 0 ; sFindComm DEFB cCret ; DEFB "S"!#80 DEFM / String / ; DEFB "L"!#80 DEFM / Lable / ; DEFB "R"!#80 DEFM / Replace / ; DEFB "M"!#80 DEFM / Marked / ; DEFB "0"!#80,"."!#80,"."!#80,"9"!#80 DEFM / Markers / ; DEFB "N"!#80 DEFM / Line Number / ; DEFB cCret ; DEFB "D"!#80 DEFM / Search Down / ; DEFB "U"!#80 DEFM / Search Up / ; DEFB "E"!#80 DEFM / Errors / ; DEFB "Q"!#80 DEFM / Goto Start / ; DEFB "Z"!#80 DEFM / Goto End / ; DEFB " ";!#80 DEFM / / ; DEFB cCret ; DEFB "E"!#80,"S"!#80,"C"!#80 DEFM / Return / ; DEFB cCret ; DEFB 0 ; sBlocks DEFB cCret DEFM /The source occupies the following Ram_Disc blocks :-/ DEFB cCret,cCret,0 ; sScroll DEFB cCret DEFM /To define the scroll rate type 0 , 1 , 2 or 3 or Esc ./ DEFB cCret,0 ; sHelpScreen DEFB cCret ; DEFM /The proposed help format is :-/ ; DEFB cCret,cCret ; DEFM /Find String Command/ DEFB cCret,cCret ; DEFM / To use this command type RETurn , then type the string DEFM / of characters that you/ ; DEFB cCret ; DEFM /wish to search for , terminated by RETurn . If the/ DEFM / string is found the first/ ; DEFB cCret ; DEFM /occurrence will be displayed in the center of the/ DEFM / editing window and the cursor/ ; DEFB cCret ; DEFM /will be positioned at the beginning of the/ DEFM / string ./ ; DEFB cCret,cCret DEFM /Press / ; DEFB "E"!#80 DEFB "S"!#80 DEFB "C"!#80 DEFM /ape to return ./ ; DEFB #0D,0 ; ORG ($!#FF)+1 ; Tfil DEFW Z80,Z81,Z82,Z83 DEFW Z84,Z85,Z86,Z87 DEFW Z88,Z89,Z8A,Z8B DEFW Z8C,Z8D,Z8E,Z8F ; DEFW Z90,Z91,Z92,Z93 DEFW Z94,Z95,Z96,Z97 DEFW Z98,Z99,Z9A,Z9B DEFW Z9C,Z9D,Z9E,Z9F ; DEFW ZA0,ZA1,ZA2,ZA3 DEFW ZA4,ZA5,ZA6,ZA7 DEFW ZA8,ZA9,ZAA,ZAB DEFW ZAC,ZAD,ZAE,ZAF ; DEFW ZB0,ZB1,ZB2,ZB3 DEFW ZB4,ZB5,ZB6,ZB7 DEFW ZB8,ZB9,ZBA,ZBB DEFW ZBC,ZBD,ZBE,ZBF ; DEFW ZC0,ZC1,ZC2,ZC3 DEFW ZC4,ZC5,ZC6,ZC7 DEFW ZC8,ZC9,ZCA,ZCB DEFW ZCC,ZCD,ZCE,ZCF ; DEFW ZD0,ZD1,ZD2,ZD3 DEFW ZD4,ZD5,ZD6,ZD7 DEFW ZD8,ZD9,ZDA,ZDB DEFW ZDC,ZDD,ZDE,ZDF ; DEFW ZE0,ZE1,ZE2,ZE3 DEFW ZE4,ZE5,ZE6,ZE7 DEFW ZE8,ZE9,ZEA,ZEB DEFW ZEC ; ORG ($!#FF)+1 ; CompVectors DEFW 0, 0, 0, 0 ;#00 DEFW 0, 0, 0, 0 DEFW 0, 0, 0, 0 DEFW 0, 0, 0, 0 ; DEFW 0, 0, 0, 0 ;#10 DEFW 0, 0, 0, 0 DEFW 0, 0, 0, 0 DEFW 0, 0, 0, 0 ; DEFW 0, 0, 0, 0 ;#20 DEFW 0, 0, 0, 0 DEFW 0, 0, 0, 0 DEFW 0, 0, 0, 0 ; DEFW 0, 0, 0, 0 ;#30 DEFW 0, 0, 0, 0 DEFW 0, 0, 0, 0 DEFW 0, 0, 0, 0 ; DEFW 0,Z80,Z86,Z89 ;#40 DEFW Z92,Z9D, 0, 0 DEFW ZA3,ZA6,ZB0, 0 DEFW ZB2,ZB8,ZB9,ZEA ; DEFW ZC5, 0,ZCA,ZDA ;#50 DEFW 0,ZEB,ZE2, 0 DEFW ZE3, 0,ZE4, 0 DEFW 0, 0, 0, 0 ; DEFW 0, 0, 0, 0 ;#60 DEFW 0, 0, 0, 0 DEFW 0, 0, 0, 0 DEFW 0, 0, 0, 0 ; DEFW 0, 0, 0, 0 ;#70 DEFW 0, 0, 0, 0 DEFW 0, 0, 0, 0 DEFW 0, 0, 0, 0 ; Z80 DEFM /A/ DEFB Term2,#80 Z81 DEFM /ADC / DEFB Term1,#81 Z82 DEFM /ADD / DEFB Term1,#82 Z83 DEFM /AF'/ DEFB Term2,#83 Z84 DEFM /AF/ DEFB Term2,#84 Z85 DEFM /AND / DEFB Term1,#85 DEFB Eof ; Z86 DEFM /B/ DEFB Term2,#86 Z87 DEFM /BC/ DEFB Term2,#87 Z88 DEFM /BIT / DEFB Term1,#88 DEFB Eof ; Z89 DEFM /C/ DEFB Term2,#89 Z8A DEFM /CALL / DEFB Term1,#8A Z8B DEFM /CCF/ DEFB Term2,#8B Z8C DEFM /CP / DEFB Term1,#8C Z8D DEFM /CPD/ DEFB Term2,#8D Z8E DEFM /CPDR/ DEFB Term2,#8E Z8F DEFM /CPI/ DEFB Term2,#8F Z90 DEFM /CPIR/ DEFB Term2,#90 Z91 DEFM /CPL/ DEFB Term2,#91 DEFB Eof ; Z92 DEFM /D/ DEFB Term2,#92 Z93 DEFM /DAA/ DEFB Term2,#93 Z94 DEFM /DE/ DEFB Term2,#94 Z95 DEFM /DEC / DEFB Term1,#95 Z96 DEFM /DEFB / DEFB Term1,#96 Z97 DEFM /DEFM / DEFB Term1,#97 Z98 DEFM /DEFS / DEFB Term1,#98 Z99 DEFM /DEFW / DEFB Term1,#99 Z9A DEFM /DI/ DEFB Term2,#9A Z9B DEFM /DISP / DEFB Term1,#9B Z9C DEFM /DJNZ / DEFB Term1,#9C DEFB Eof ; Z9D DEFM /E/ DEFB Term2,#9D Z9E DEFM /EI/ DEFB Term2,#9E Z9F DEFM /ENT/ DEFB Term2,#9F ZA0 DEFM /EQU / DEFB Term1,#A0 ZA1 DEFM /EX / DEFB Term1,#A1 ZA2 DEFM /EXX/ DEFB Term2,#A2 DEFB Eof ; ZA3 DEFM /H/ DEFB Term2,#A3 ZA4 DEFM /HALT/ DEFB Term2,#A4 ZA5 DEFM /HL/ DEFB Term2,#A5 DEFB Eof ; ZA6 DEFM /I/ DEFB Term2,#A6 ZA7 DEFM /IM / DEFB Term1,#A7 ZA8 DEFM /IN / DEFB Term1,#A8 ZA9 DEFM /INC / DEFB Term1,#A9 ZAA DEFM /IND/ DEFB Term2,#AA ZAB DEFM /INDR/ DEFB Term2,#AB ZAC DEFM /INI/ DEFB Term2,#AC ZAD DEFM /INIR/ DEFB Term2,#AD ZAE DEFM /IX/ DEFB Term2,#AE ZE7 DEFM /IXH/ DEFB Term2,#E7 ZE6 DEFM /IXL/ DEFB Term2,#E6 ZE9 DEFM /IYH/ DEFB Term2,#E9 ZE8 DEFM /IYL/ DEFB Term2,#E8 ZAF DEFM /IY/ DEFB Term2,#AF DEFB Eof ; ZB0 DEFM /JP / DEFB Term1,#B0 ZB1 DEFM /JR / DEFB Term1,#B1 DEFB Eof ; ZB2 DEFM /L/ DEFB Term2,#B2 ZB3 DEFM /LD / DEFB Term1,#B3 ZB4 DEFM /LDD/ DEFB Term2,#B4 ZB5 DEFM /LDDR/ DEFB Term2,#B5 ZB6 DEFM /LDI/ DEFB Term2,#B6 ZB7 DEFM /LDIR/ DEFB Term2,#B7 DEFB Eof ; ZB8 DEFM /M/ DEFB Term2,#B8 DEFB Eof ; ZB9 DEFM /NC/ DEFB Term2,#B9 ZBA DEFM /NEG/ DEFB Term2,#BA ZBB DEFM /NOP/ DEFB Term2,#BB ZBC DEFM /NV/ DEFB Term2,#BC ZBD DEFM /NZ/ DEFB Term2,#BD DEFB Eof ; ZEA DEFM /OPT / DEFB Term1,#EA ZBE DEFM /OR / DEFB Term1,#BE ZBF DEFM /ORG / DEFB Term1,#BF ZC0 DEFM /OTDR/ DEFB Term2,#C0 ZC1 DEFM /OTIR/ DEFB Term2,#C1 ZC2 DEFM /OUT / DEFB Term1,#C2 ZC3 DEFM /OUTD/ DEFB Term2,#C3 ZC4 DEFM /OUTI/ DEFB Term2,#C4 ZEC DEFM /OUTPUT / DEFB Term1,#EC DEFB Eof ; ZC5 DEFM /P/ DEFB Term2,#C5 ZC6 DEFM /PE/ DEFB Term2,#C6 ZC7 DEFM /PO/ DEFB Term2,#C7 ZC8 DEFM /POP / DEFB Term1,#C8 ZC9 DEFM /PUSH / DEFB Term1,#C9 DEFB Eof ; ZCA DEFM /R/ DEFB Term2,#CA ZCB DEFM /RES / DEFB Term1,#CB ZCC DEFM /RET/ DEFB Term2,#CC ZCD DEFM /RETI/ DEFB Term2,#CD ZCE DEFM /RETN/ DEFB Term2,#CE ZCF DEFM /RL / DEFB Term1,#CF ZD0 DEFM /RLA/ DEFB Term2,#D0 ZD1 DEFM /RLC / DEFB Term1,#D1 ZD2 DEFM /RLCA/ DEFB Term2,#D2 ZD3 DEFM /RLD/ DEFB Term2,#D3 ZD4 DEFM /RR / DEFB Term1,#D4 ZD5 DEFM /RRA/ DEFB Term2,#D5 ZD6 DEFM /RRC / DEFB Term1,#D6 ZD7 DEFM /RRCA/ DEFB Term2,#D7 ZD8 DEFM /RRD/ DEFB Term2,#D8 ZD9 DEFM /RST / DEFB Term1,#D9 DEFB Eof ; ZDA DEFM /SBC / DEFB Term1,#DA ZDB DEFM /SCF/ DEFB Term2,#DB ZDC DEFM /SET / DEFB Term1,#DC ZDD DEFM /SLA / DEFB Term1,#DD ZE5 DEFM /SLI / DEFB Term1,#E5 ZDE DEFM /SP/ DEFB Term2,#DE ZDF DEFM /SRA / DEFB Term1,#DF ZE0 DEFM /SRL / DEFB Term1,#E0 ZE1 DEFM /SUB / DEFB Term1,#E1 DEFB Eof ; ZEB DEFM /USE / DEFB Term1,#EB DEFB Eof ; ZE2 DEFM /V/ DEFB Term2,#E2 DEFB Eof ; ZE3 DEFM /XOR / DEFB Term1,#E3 DEFB Eof ; ZE4 DEFM /Z/ DEFB Term2,#E4 DEFB Eof cFileName DEFM "NewText" DEFB #D,#00 DEFS 80 ; cFileSpec DEFS 2 ; DEFB 0 ; BlockList DEFS #101,0 ; plCursor DEFS 2 plCursorBlock DEFS 2 lCursorBlock DEFS 1 pSCursorX DEFS 1 pSCursorY DEFS 1 TempCursorY DEFS 1 ; pFCursor DEFS 2 pFCursorBlock DEFS 2 ; plCursorCount DEFS 2 ; InsertFlag DEFS 1 TokenFlag DEFS 1 ; pFindMode DEFW FindFoundDisp ; DoFindMove JP FindMoveDown pFindDir EQU $-2 ; FindStrData DEFS wScreen+1,0 ; FindLabelData DEFS wScreen+1,0 ; FindReplData DEFS wScreen+1,0 ; FindLineData DEFS wScreen+1,0 ; FindStrTemp DEFS 2 ; LineBuffer DEFS lLineBuffer LineBuffer1 DEFS lLineBuffer LineBuffer2 DEFS lLineBuffer ; DataByte DEFS 1 CharORMask DEFS 1 ; cLineCnt DEFS 2 cFindCnt DEFS 2 ; P0 DEFS 2 P1 DEFS 2 P2 DEFS 2 P3 DEFS 2 P4 DEFS 2 BL DEFS 2 ; DByte DEFS 1