DataMuseum.dk

Presents historical artifacts from the history of:

Jet Computer Jet80

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Jet Computer Jet80

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦e03585458⟧ TextFile

    Length: 17792 (0x4580)
    Types: TextFile
    Names: »EDC.MAC«

Derivation

└─⟦c9df7130d⟧ Bits:30005915 Pascal MT+ Release 5.2 (Jet-80)
    └─ ⟦this⟧ »EDC.MAC« 

TextFile

;	*************************************
;	*  EDITOR FOR CHARACTER-GENERATORS  *
;	*	BY:  B.G.JOERGENSEN, OZ9DX  *
;	*************************************
;
.Z80
;
START:	LD	SP,STAK
	LD	HL,0017H	;CURSOR BOTTOM
	CALL	CURSOR
	LD	B,25	;25 LINES
NEWL:	LD	DE,5020H	;80+SPACE
	LD	C,CONOUT
LOOP0:	PUSH	DE
	PUSH	BC
	CALL	BDOS
	POP	BC
	POP	DE
	DEC	D
	JR	NZ,LOOP0
	PUSH	DE
	PUSH	BC
	LD	DE,MESS0
	CALL	PRINT
	POP	BC
	POP	DE
	DEC	B
	JR	NZ,NEWL
	CALL	RVIDEO
	LD	HL,1517H
	PUSH	HL
	CALL	CURSOR
	LD	DE,MESS01
	CALL	PRINT
	POP	HL
	PUSH	HL
	CALL	CURSOR
	LD	DE,MESS02
	CALL	PRINT
	POP	HL
	CALL	CURSOR
	LD	DE,MESS03
	CALL	PRINT
	LD	D,10	;UP 10 LINES
LOOP1:	LD	C,CONOUT
	LD	E,LF
	PUSH	DE
	CALL	BDOS
	CALL	WAIT
	POP	DE
	DEC	D
	JR	NZ,LOOP1
	LD	HL,1500H
	CALL	CURSOR
	LD	DE,MESS04
	CALL	PRINT
	CALL	LWAIT	;LONG WAIT
AGAIN:	LD	DE,MESS05
	CALL	PRINT
	LD	HL,0005H
	LD	IX,ADRA
	CALL	ASKLD	;LOAD A?
	LD	HL,(ADRA)
	LD	(ADRAF),HL
	LD	A,B
	LD	(SHOWA),A
	XOR	A
	LD	(AINIT),A
	LD	IY,CESS06
	LD	A,'B'
	LD	(IY),A
	LD	HL,000AH
	LD	IX,ADRB
	CALL	ASKLD	;LOAD B?
	LD	A,B
	LD	(SHOWB),A
	LD	IY,CESS06
	LD	A,'C'
	LD	(IY),A
	LD	HL,000FH	;LOAD C?
	LD	IX,ADRC
	CALL	ASKLD
	LD	A,B
	LD	(SHOWC),A
NSHW:	LD	DE,MESS09
	CALL	PRINT
	CALL	CIN
	CP	'F'+1
	JR	NC,NSHW
	LD	(ROW),A
	LD	DE,MESS1
	CALL	PRINT
	CALL	NVIDEO
	LD	HL,(ADRA)
	LD	DE,(ADRB)
	XOR	A	; 0 CARRY
	SBC	HL,DE	;CALC DIFF
	LD	(LDIFB),HL
	LD	(DIFFB),HL
	LD	HL,(ADRA)
	LD	DE,(ADRC)
	SBC	HL,DE
	LD	(LDIFC),HL
	LD	(DIFFC),HL
	LD	HL,0005H
	CALL	CURSOR
	LD	DE,MESS2
	CALL	PRINT
	LD	HL,0006H
	CALL	CURSOR
	LD	DE,MESS3
	CALL	PRINT
	LD	HL,2A06H
	CALL	CURSOR
	LD	DE,MESS3
	CALL	PRINT
	LD	A,(SHOWA)	;A LOADED?
	CP	'Y'
	JR	Z,NOCLR
	CALL	MEMCLR	;CLEAR 4K RAM
NOCLR:	LD	DE,GRAPH	;GRAPHIC MODE
	CALL	PRINT
	LD	HL,2606H
WIND:	CALL	WINDOW
	JR	NZ,WIND	
	LD	HL,0007H
	LD	A,(ROW)
	LD	E,A
	DEC	E
RAST1:	CALL	RASTER
	JR	NZ,RAST1
	LD	HL,2A07H
	LD	A,(ROW)
	LD	E,A
	DEC	E
RAST2:	CALL	RASTER
	JR	NZ,RAST2
	LD	HL,2A06H	;SHOW B
	CALL	CURSOR
	CALL	RVIDEO
	LD	E,'B'	;INVERTED VIDEO
	LD	C,CONOUT
	CALL	BDOS
	CALL	NVIDEO
	LD	HL,(ADRA)	;START ADR
	LD	DE,(ZLINE)	;CALC ADR TOP LINE
	LD	A,7	;TOP=LINE 7
NLINE:	CP	E
	JR	Z,TLINE
	DEC	E
	DEC	HL
	JR	NLINE
TLINE:	LD	(TOPADR),HL
	LD	DE,15	;BOTTOM LINE ADR
	ADD	HL,DE
	LD	(BOTADR),HL
	LD	(CADR),HL
	LD	(INIADR),HL
TLX:	LD	HL,(TOPADR)	;RESTORE HL
	LD	A,(REF)
	LD	BC,(DIFFB)
	CP	1	;REF B
	JR	Z,BTLX
	LD	BC,(DIFFC)
BTLX:	LD	(DIFF),BC
	LD	A,(SHMOV)
	CP	0
	JR	NZ,TLX1
	LD	A,(SCROLL)
	CP	3	;SCROLL BOTH
	JR	Z,TLX1
	CP	2	;B ONLY
	JR	Z,TLX2
TLX1:	XOR	A
	LD	(SHMOV),A
	LD	DE,1A07H	;CURSOR TOP LINE
	LD	A,03H
	LD	(HPOS),A
	CALL	TLINE1
	LD	A,(SCROLL)
	CP	1
	JP	Z,TRYAGN
	LD	A,(REF)
	CP	1
	LD	BC,(DIFFB) 
	JR	Z,TLX2     
      	LD	BC,(DIFFC)
TLX2:	LD	(DIFF),BC
BSHO:	LD	BC,(DIFF)
	LD	DE,4607H
	LD	HL,(TOPADR)
	XOR	A	;CLR C
	SBC	HL,BC       
	LD	A,2DH	;HOR.POS
	LD	(HPOS),A                    
	CALL	TLINE1
	JP	TRYAGN
;
;
TLINE1:	PUSH	HL	;SAVE ADR IN MEM
	PUSH	HL
	LD	A,(HL)	;READ MEM
	LD	(MBYTE),A
	CALL	D2HEX	;CONV.TO DISPLAY
	POP	HL
	PUSH	DE	;SAVE CURSOR ADR
	PUSH	DE	;EX HL,DE
	CALL	DHEX	;HEX DISPLAY
	POP	HL
	PUSH	HL
	LD	A,(HPOS)	;BIT 7 LOC.
	LD	H,A
	CALL	MPAT
	POP	HL
	CALL	CURSOR
	LD	DE,DPLAY
	CALL	PRINT
	POP	DE	;CURSOR(HL)
	POP	HL	;MEM-ADR
	LD	A,22	;LAST LINE
	CP	E
	RET	Z
	INC	HL
	INC	DE
	JR	TLINE1
;
TRYAGN:	LD	HL,(CPOS)	;CURSOR START ADR.
	CALL	CURSOR
	LD	A,(CONT)
	CP	0	;CONT. SCROLL?
	JR	NZ,TRYAX	;YEPS
	CALL	CIN
TRYAX:	LD	HL,CTAB
	LD	IX,JTAB-2
	LD	BC,23
TNXT:	INC	IX
	INC	IX	
	CPI
	JP	PO,WRKEY
	JR	NZ,TNXT
	LD	L,(IX)
	LD	H,(IX+1)
	JP	(HL)
;
WRKEY:	CALL	BELL
	JP	TRYAGN
;
CUP:	LD	HL,(CPOS)
	LD	A,7-1	;ABOVE TOP LINE
	DEC	L
	CP	L
	JR	Z,FAIL1
	LD	DE,(CADR)	;ADR IN MEM
	DEC	DE
CUPX:	LD	(CADR),DE
	LD	(CPOS),HL
	JP	TRYAGN
FAIL1:	CALL	BELL
	JP	TRYAGN
;
CDOWN:	LD	HL,(CPOS)
	LD	A,22+1
	INC	L
	CP	L
	JR	Z,FAIL1
	LD	DE,(CADR)
	INC	DE
	LD	(CADR),DE
	JR	CUPX
;
CRIGHT:	LD	HL,(CPOS)
	LD	A,2*8+3
	INC	H
	INC	H
CRIX:	CP	H
	JR	Z,FAIL1
	LD	(CPOS),HL
	LD	A,(VPOS)	;HOR POS
	SRL	A
	LD	(VPOS),A
	JP	TRYAGN
;
CLEFT:	LD	HL,(CPOS)
	LD	A,3-2
	DEC	H
	DEC	H
	CP	H
	JR	Z,FAIL1
	LD	(CPOS),HL
	LD	A,(VPOS)
	SLA	A
	LD	(VPOS),A
	JP	TRYAGN
;
;
NEXT:	LD	B,03H	;^C
	PUSH	BC
	LD	A,(SCROLL)
	CP	2	;B ONLY?
	JR	Z,NEX2
	CP	1	;A ONLY?
	JR	Z,NEX1
NEX0:	LD	A,(VPOS1)
	LD	(VPOS),A
	LD	HL,(CPOS1)
	LD	(CPOS),HL
	LD	HL,(INIADR)
	LD	DE,(OFFSET)
	ADD	HL,DE
	LD	(INIADR),HL
	LD	(CADR),HL
	LD	HL,(TOPADR)
 	ADD	HL,DE
  	LD	(TOPADR),HL
  	JP	NXTXX
;
NEX1:	LD	A,(REF)	;B OR C? 
 	CP	1                                  
 	JR	Z,BNEX
 	LD	HL,(DIFFC)
 	LD	DE,(OFFSET)
	ADD	HL,DE
	LD	(DIFFC),HL
	JR	NEX0
;
BNEX:	LD	HL,(DIFFB)
	LD	DE,(OFFSET)
	ADD	HL,DE
	LD	(DIFFB),HL
	JR	NEX0
;
NEX2:	LD	A,(REF)
	CP	1
	JR	Z,BNEX2
	LD	DE,(OFFSET)  
	LD	HL,(DIFFC)
	XOR	A
	SBC	HL,DE
	LD	(DIFFC),HL
	JP	NXTXX
;
BNEX2:	LD	DE,(OFFSET)
	LD	HL,(DIFFB)
	XOR	A
	SBC	HL,DE
	LD	(DIFFB),HL
NXTXX:	LD	A,(CSCRL)
	CP	0
	JR	Z,BNEXX
	CALL	WAIT
	LD	C,06H	;INPUT?
	LD	E,0FFH
	CALL	BDOS
	CP	0
	JR	NZ,CHRDY
	POP	BC
	LD	A,B
	LD	(CONT),A
	JP	TLX
CHRDY:	XOR	A
	LD	(CSCRL),A
	LD	(CONT),A
BNEXX:	POP	BC
	JP	TLX
;
SCCONT:	XOR	A
	CPL
	LD	(CSCRL),A
	JP	TRYAGN
;
PREV:	LD	B,12H	;^R
	PUSH	BC
	LD	A,(SCROLL)
	CP	2
	JR	Z,PRV2
	CP	1
	JR	Z,PRV1
PRV0:	LD	A,(VPOS1)
	LD	(VPOS),A
	LD	HL,(CPOS1)
	LD	(CPOS),HL
	LD	HL,(INIADR)
	LD	DE,(OFFSET)
	XOR	A
	SBC	HL,DE
	LD	(INIADR),HL
	LD	(CADR),HL
	LD	HL,(TOPADR)
	XOR	A
	SBC	HL,DE
	LD	(TOPADR),HL
	JP	NXTXX
;
PRV1:	LD	A,(REF)
	CP	1
	JR	Z,BPRV
	LD	HL,(DIFFC)
	LD	DE,(OFFSET)
	XOR	A
	SBC	HL,DE
	LD	(DIFFC),HL
	JR	PRV0
;
BPRV:	LD	HL,(DIFFB)
	LD	DE,(OFFSET)
	XOR	A
	SBC	HL,DE
	LD	(DIFFB),HL
	JR	PRV0
;
PRV2:	LD	A,(REF)
	CP	1
	JR	Z,BPRV2
	LD	DE,(OFFSET)
	LD	HL,(DIFFC)
	ADD	HL,DE
	LD	(DIFFC),HL
	JP	NXTXX
;
BPRV2:	LD	DE,(OFFSET)
	LD	HL,(DIFFB)
	ADD	HL,DE
	LD	(DIFFB),HL
	JP	NXTXX
;
;                               
SETBIT:	LD	E,'p'
	LD	C,CONOUT
	CALL	BDOS
	LD	DE,(CADR)
	LD	A,(DE)	;GET BYTE
	LD	HL,VPOS
	OR	(HL)
SBTX:	LD	(DE),A
	CALL	D2HEX
	LD	HL,(CPOS)
	LD	H,20H	;MOVE CURSOR
	CALL	CURSOR
	LD	DE,DPLAY+6
	CALL	PRINT
	LD	HL,(CPOS)
	CALL	CURSOR
	JP	TRYAGN
;
RSTBIT: LD	E,20H	;SPACE
	LD	C,CONOUT
	CALL	BDOS
	LD	HL,(CADR)
	LD	A,(VPOS)
	CPL
	AND	(HL)
	LD	DE,(CADR)	
	JR	SBTX
;
CINIT:	LD	HL,(CPOS)
	LD	(CPOS1),HL
	LD	HL,(CADR)	;CURRENT ADR
	LD	(INIADR),HL
	LD	A,(VPOS)
	LD	(VPOS1),A
	JP	TRYAGN
;
SCRAB:	LD	A,3
	LD	(SCROLL),A
	LD	(INIT),A
	JP	TRYAGN
;
REFB:	LD	A,1
	LD	(REF),A
	LD	HL,2A06H	;SHOW B
	CALL	CURSOR
	CALL	RVIDEO
	LD	E,'B'
	LD	C,CONOUT
	CALL	BDOS
	CALL	NVIDEO
	LD	BC,(DIFFB)
	JP	TLX2
;
SCRA:	LD	A,1
	LD	(SCROLL),A
	LD	(INIT),A
	JP	TRYAGN
;
REFC:	LD	A,2
	LD	(REF),A
	LD	HL,2A06H
	CALL	CURSOR
	CALL	RVIDEO
	LD	E,'C'
	LD	C,CONOUT
	CALL	BDOS
	CALL	NVIDEO
	LD	BC,(DIFFC)
	JP	TLX2
;
SCRB:	LD	A,2
	LD	(SCROLL),A
	LD	(INIT),A
	JP	TRYAGN
;
AEQUB:	LD	A,(REF)
	CP	1
	JR	Z,EQUB
	LD	DE,(LDIFC)
	LD	(DIFFC),DE
	JP	TLX
EQUB:	LD	DE,(LDIFB)
	LD	(DIFFB),DE
	JP	TLX
;
MOVBA:	LD	A,(REF)
	LD	(SHMOV),A
	CP	1	;B?
	JR	Z,MOVB
	XOR	A	;C=0
	LD	HL,(TOPADR)
	LD	DE,(DIFFC)
	SBC	HL,DE
	LD	DE,(TOPADR)
	LD	BC,16
	LDIR
	JP	TLX
;
MOVB:	XOR	A
	LD	HL,(TOPADR)
	LD	DE,(DIFFB)
	SBC	HL,DE
	LD	DE,(TOPADR)
	LD	BC,16
	LDIR
	JP	TLX
;
BPAGE:	LD	DE,16
	LD	(OFFSET),DE
	JP	TRYAGN
;
FSAVE:	CALL	RVIDEO
	LD	DE,XGRAPH
	CALL	PRINT
	LD	DE,MES07A
	CALL	PRINT
	CALL	CLRFCB
	CALL	FNAME
	CALL	FCBINI
	JR	C,OKSV
	LD	DE,MESS0A
	CALL	PRINT
	CALL	LWAIT
	JR	FSAVE
OKSV:	CALL	FILOP
	CP	0FFH
	JR	Z,OKNF
	LD	DE,MESS0D
	CALL	PRINT
	CALL	CIN
	RES	5,A
	CP	'Y'
	JP	NZ,QUIT
	LD	DE,FCBA
	LD	C,DELFIL
	CALL	BDOS	;DELETE FILE
OKNF:	CALL	FILCR	;MAKE FILE
OKNF1:	LD	DE,MESS0E
	CALL	PRINT
	CALL	CIN
	SUB	30H
	CP	0
	JR	Z,CLSOK
	LD	DE,(ADRAF)
OREX:	PUSH	AF
	LD	B,8	;8*128=1K
OREC:	PUSH	BC
	PUSH	DE
	LD	C,SETDMA
	CALL	BDOS
	CALL	SEQWR
	POP	DE
	LD	HL,128
	ADD	HL,DE
	EX	DE,HL
	POP	BC
	DEC	B
	JR	NZ,OREC
	POP	AF
	DEC	A
	JR	NZ,OREX
CLSOK:	LD	DE,FCBA
	LD	C,CLOSEF
	CALL	BDOS
	JP	QUIT
;
;
;
BLINE:	LD	DE,1
	LD	(OFFSET),DE
	JP	TRYAGN
;
LOCK:	LD	A,(REF)
	CP	1	;B?
	JR	Z,BLOCK
	LD	DE,(DIFFC)
	LD	(LDIFC),DE
	JP	TRYAGN
BLOCK:	LD	DE,(DIFFB)
	LD	(LDIFB),DE
	JP	TRYAGN
;
EXIT:	CALL	RVIDEO
	LD	DE,XGRAPH
	CALL	PRINT
	LD	DE,MESS0C
	CALL	PRINT
	CALL	CIN
	RES	5,A
	CP	'Y'
	JR	Z,QUIT
	JP	FSAVE	;SAVE FILE
QUIT:	CALL	NVIDEO
	JP	BOOT
;
ASKLD:	PUSH	IX
	PUSH	HL
	CALL	CURSOR
	LD	DE,MESS06
	CALL	PRINT
	CALL	CIN
	RES	5,A
	LD	B,A
	CP	'Y'	;YES?
	POP	HL
	POP	IX
	PUSH	BC
	JR	NZ,NSHWA
	CALL	LOADF
NSHWA:	LD	A,(AINIT)
	CP	0	;A FILE?
	JR	Z,NSHWB
	CALL	LODADR
NSHWB:	POP	BC
	RET
;
;
LODADR:	LD	A,1
	LD	(AINIT),A
	PUSH	IX
	JR	LDF0
;
LOADF:	LD	A,2
	LD	(AINIT),A
	PUSH	IX
	INC	L
LAGN:	PUSH	HL
	CALL	CURSOR
	LD	DE,MESS07
	CALL	PRINT	;CLR SPACE
	CALL	CLRFCB
	CALL	FNAME
	CALL	FCBINI
	JR	C,NAMOK
	POP	HL
	PUSH	HL
	CALL	CURSOR
	LD	DE,MESS0A	;FAIL NAME
	CALL	PRINT
	CALL	LWAIT	;SHW A WHILE
	POP	HL
	JR	LAGN	;TRY AGAIN
NAMOK:	CALL	FILOP	;OPEN FILE
	CP	0FFH	;ANY FILE?
	JR	NZ,OKFL
	LD	DE,MESS0B
	CALL	PRINT
	CALL	LWAIT
	LD	SP,STAK	;RESET SP
	JP	AGAIN
OKFL:	POP	HL	;ADRESS
LDF0:	INC	L
AGN1:	PUSH	HL
	CALL	CURSOR
	LD	DE,MESS08
	CALL	PRINT
	LD	DE,SMEM
	PUSH	DE
	LD	C,READBF	;GET STRING
	CALL	BDOS
	POP	DE
	CALL	CHEX
	EX	DE,HL	;DE=HEX
	POP	HL	;HL=CURSOR
	JP	PO,AGN1
	POP	IX
	LD	(IX),E
	LD	(IX+1),D	;ADR=BIN(2)	
	LD	A,(AINIT)
	CP	2
	JR	NZ,ENDFIL
GETRC:	PUSH	DE
	LD	C,SETDMA
	CALL	BDOS
	CALL	SEQRD	;READ 1 REC
	POP	DE
	CP	0	;EOF?
	JR	NZ,ENDFIL	;YES
	LD	HL,128
	ADD	HL,DE	;UPDATE DMA
	EX	DE,HL
	JR	GETRC
ENDFIL:	SUB	A
	LD	(AINIT),A	;CLR
	RET

RVID:	DB	1BH,70H,'$'
NVID:	DB	1BH,71H,'$'
;
RVIDEO:	LD	DE,RVID
	CALL	PRINT
	RET
;
NVIDEO:	LD	DE,NVID
	CALL	PRINT
	RET
;
PRINT:	LD	C,PSTRING	;PRINT STRING
	CALL	BDOS
	RET
;
WAIT:	XOR	A
	LD	DE,0000H
	LD	HL,2000H
MWAIT:	DEC	HL
	SBC	HL,DE
	JR	NZ,MWAIT
	RET
;
LWAIT:	LD	B,30H
TWAIT:	CALL	WAIT
	DEC	B
	JR	NZ,TWAIT
	RET
;
;	DISPLAY MEM PATTERN
;	*******************
;
MPAT:	PUSH	HL
	CALL	CURSOR
	POP	HL
	LD	A,(MBYTE)	;GET BYTE
	LD	B,A
	LD	C,08H	;8 BITS
MPAT0:	SLA	B	;ROT BITS->CY
	PUSH	BC	;SAVE COUNT
	JR	C,MPAT1
	CALL	PSPAC	;OUT 2 SPACES
	JR	NXBIT
MPAT1:	CALL	PDOT	;DOT-SPACE
NXBIT:	POP	BC
	DEC	C
	JR	NZ,MPAT0
	RET
;
PSPAC:	INC	H
	INC	H	;NEXT LOC.
	PUSH	HL
	LD	DE,SPA2
	CALL	PRINT
	POP	HL
	RET
;
SPA2:	DB	'  $'	;2 SPACE
DTSP:	DB	'p $'	;DOT+SP
;
PDOT:	INC	H
	INC	H
	PUSH	HL
	LD	DE,DTSP
	CALL	PRINT
	POP	HL
	RET	


;
;	CONVERT HEX TO DISPLAYABLE HEX
;	******************************
;
DHEX:	LD	IX,DPLAY
	CALL	DHEXX
	LD	H,L
	INC	IX
	CALL	DHEXX
	RET
;
D2HEX:	LD	IX,DPLAY+6
	LD	H,A
DHEXX:	LD	A,H
	SRL	A
	SRL	A
	SRL	A
	SRL	A
	CALL	DHEX0
	INC	IX
	LD	A,H
	AND	0FH
	CALL	DHEX0
	RET
;
DHEX0:	CP	0AH
	JR	NC,DHEX1
	ADD	A,30H	;ASCII
DHEX2:	LD	(IX),A
	RET
DHEX1:	ADD	A,37H
	JR	DHEX2
;
DPLAY:	DB	0,0,0,0,'    $'
;
;	CONVERT 4 DIG "HEX" TO TRUE HEX
;	*******************************
;
CHEX:	INC	DE
	INC	DE
	CALL	CCHK
	RET	PO
	SLA	C
	SLA	C
	SLA	C
	SLA	C
	LD	H,C
	INC	DE
	CALL	CCHK
	RET	PO
	LD	A,C
	OR	H
	LD	H,A
	INC	DE
	CALL	CCHK
	RET	PO
	SLA	C
	SLA	C
	SLA	C
	SLA	C
	LD	L,C
	INC	DE
	CALL	CCHK
	RET	PO
	LD	A,C
	OR	L
	LD	L,A
	XOR	A
	RET
;
CCHK:	PUSH	HL
	LD	A,(DE)	;MSB
	LD	BC,17
	LD	HL,TAB2
	CPIR
	DEC	BC
	POP	HL
	RET

;
;
WINDOW:	PUSH	HL
	CALL	CURSOR
	LD	E,'!'
	LD	C,CONOUT
	CALL	BDOS
WND1:	POP	HL
	INC	L
	LD	A,23	;LAST LINE
	CP	L
	RET
;
RASTER:	PUSH	HL
	PUSH	DE
	CALL	CURSOR
	POP	DE
	INC	E
	LD	A,'9'+1
	CP	E
	JR	Z,RST3
	LD	A,'F'+1
	CP	E
	JR	Z,RST5
RST4:	LD	A,'0'
	CP	E
	JR	NZ,RSTX
	POP	HL
	LD	(ZLINE),HL
	PUSH	HL
RSTX:	PUSH	DE
	LD	C,CONOUT
	CALL	BDOS
	POP	DE
	JR	WND1
;
RST3:	LD	E,'A'
	JR	RST4	
;
RST5:	LD	E,'0'
	JR	RST4
;
ZLINE:	DS	2
;
CIN:	LD	C,CONIN		;GET CONSOLE INPUT
	CALL	BDOS
	RET
;
BELL:	LD	E,07H	;BELL CODE
	LD	C,CONOUT
	CALL	BDOS
	RET
;
MEMCLR:	LD	DE,(ADRA)
	LD	BC,2000H
MCLR:	LD	HL,ZERO
LOP1:	LDI
	DEC	HL
	JP	PE,LOP1
	RET
ZERO:	DB	0
;	
;
CURSOR:	LD	BC,2020H	;ADD SPACES
	ADD	HL,BC
	LD	(CURP+2),HL
	LD	HL,CURP-1
	LD	B,4
CRS:	INC	HL
	PUSH	HL
	PUSH	BC
	LD	E,(HL)
	LD	C,CONOUT
	CALL	BDOS
	POP	BC
	POP	HL
	DEC	B
	JR	NZ,CRS
	RET
;
;	FILE OPERATIONS:
;	****************
;
FCBA:	DS	36
;
CLRFCB:	LD	DE,FCBA
	PUSH	DE
	LD	BC,36
	CALL	MCLR
	POP	DE
	INC	DE
	LD	BC,11
LOP3:	LD	HL,BLANK
	LDI
	JP	PE,LOP3
	RET
;
BLANK:	DB	20H
;
FILNAM:	DB	14
	DS	15
;
FNAME:	LD	DE,FILNAM
	LD	C,READBF
	CALL	BDOS
	RET
;
CCNT:	DB	0
;
FCBINI:	LD	IY,FCBA
	LD	IX,FILNAM
	LD	C,(IX+1)	;AMOUNT CHAR'S
	LD	A,C
	LD	(CCNT),A
	LD	B,0	;DEF DRIVE
	LD	A,(IX+3)	;DRIVE REQ?
	CP	':'
	JR	NZ,DEFDRV	;USE DEFAULT
	DEC	C
	DEC	C	;-2 FOR DRV SEL.
	LD	A,C	;SAVE CHAR CNT
	LD	(CCNT),A
	INC	IX
	INC	IX
	LD	A,(IX)	;DRIVE NR
	RES	5,A
	CP	'A'	;A-DRIVE?
	JR	NZ,BDRV	;THEN B DRIVE
	LD	B,1	;SEL A
	JR	DEFDRV
BDRV:	LD	B,2	;SEL B
DEFDRV:	LD	(IY),B
	INC	IX
	INC	IX
	PUSH	IX	;POINTS 1 LETTER
	PUSH	IX
	LD	A,C	;ANYTHING LOADED?
	CP	0
	JR	Z,NFAIL	;NO NAME
FPNT:	LD	A,(IX)	;FIND POINT
	CP	'.'
	JR	Z,PNT	;FOUND
	INC	IX	;TRY NEXT
	DEC	C
	JR	NZ,FPNT
NFAIL:	POP	IX	;SET STACK
FAILN:	POP	IX
	XOR	A	;C=0=FAIL
	RET
;
PNT:	DEC	C	;.=-1
	LD	A,3	;TYPE 3 LETTERS?
	CP	C
	JR	NZ,NFAIL	;WRONG TYPE
	PUSH	IY
FTYP:	LD	A,(IX+1)	;GET FILE TYPE
	RES	5,A	;UPPER CASE
	LD	(IY+9),A
	INC	IX	;-> NEXT
	INC	IY
	DEC	C
	JR	NZ,FTYP
	POP	IY
	POP	IX
	LD	A,(CCNT)	;AMOUNT CHARS
	SUB	4	;-.TYP
	CP	0	;ANY NAME?
	JR	Z,FAILN
	POP	IX
GNAME:	LD	B,(IX)	;CHAR 1
	LD	(IY+1),B
	INC	IX
	INC	IY
	DEC	A
	JR	NZ,GNAME
	SCF	;C=1=NOTHING WRONG
	RET
;
FILOP:	LD	DE,FCBA
	LD	C,OPENF
	CALL	BDOS
	RET
;
FILCR:	LD	DE,FCBA
	LD	C,MAKEF
	CALL	BDOS
	RET
;
SEQRD:	LD	DE,FCBA
	LD	C,RDSEQ
	CALL	BDOS
	RET
;
SEQWR:	LD	DE,FCBA
	LD	C,WRSEQ
	CALL	BDOS
	CP	0
	RET	Z
	LD	DE,MESS0F
	CALL	PRINT
	CALL	LWAIT
	LD	SP,STAK
	JP	QUIT
;
CURP:	DB	1BH,59H,0,0,'$'
;
CTAB:	DB	05H,18H,04H,13H,03H,12H,16H,14H,10H,19H,02H
	DB	11H,01H,17H,06H,07H,08H,0BH,0FH,15H,0EH,1DH
;
JTAB:	DW	CUP,CDOWN,CRIGHT,CLEFT,NEXT,PREV,SETBIT
	DW	RSTBIT,CINIT,EXIT,SCRAB,REFB,SCRA,REFC
	DW	SCRB,AEQUB,MOVBA,BPAGE,FSAVE,BLINE,LOCK
	DW	SCCONT
;
SHADR:	DS	2
STADR:	DS	2
TOPADR:	DS	2
BOTADR:	DS	2
INIADR:	DS	2
CADR:	DS	2
MBYTE:	DS	1
SCROLL:	DB	3
INIT:	DB	0
AINIT:	DB	1
SHMOV:	DB	0
CONT:	DB	0
CSCRL:	DB	0
REF:	DB	1
OFFSET:	DB	16,0
LDIFB:	DS	2
LDIFC:	DS	2
DIFF:	DS	2
DIFFB:	DS	2
DIFFC:	DS	2
;
GRAPH:	DB	1BH,46H,'$'
XGRAPH:	DB	1BH,47H,'$'
;
SMEM:	DB	4,0,0,0,0,0
SADR:	DB	4,0,0,0,0,0
ROW:	DS	1
SHOWA:	DS	1
SHOWB:	DS	1
SHOWC:	DS	1
ADRA:	DS	2
ADRAF:	DS	2
ADRB:	DB	0,20H
ADRC:	DB	0,30H
;
TAB2:	DB	'FEDCBA9876543210$'
;
VPOS1:	DB	80H
VPOS:	DB	80H
HPOS:	DS	1
CPOS:	DB	22,3
CPOS1:	DB	22,3
;
MESS0:	DB	CR,LF,'$'
;
MESS01:	DB	'   Editor for character-generators   ',CR,LF,'$'
MESS02:	DB	'   made by B.G. Joergensen, OZ9DX    ',CR,LF,'$'
MESS03:	DB	'   Release 1.2   01-Oct-1983         ',CR,LF,'$'
MESS04:	DB	'   WAIT   $'
;
MESS05:	DB	CS,CR
	DB	' The editor enables you to either edit an existing file'
	DB	' (file A)(Y/N=Y), or to',CR,LF
	DB	' create a new one (Y/N=N), while comparing with or copy'
	DB	'ing from 1 or 2 other  ',CR,LF
	DB	' file(s) (B and C). The memory start-adress for the A-f'
	DB	'ile should be placed at',CR,LF
	DB	' a higher location than those of files B and C. Lowest '
	DB	'usable adress is: 1200H',CR,LF,'$'
;
MESS06:	DB	' Do you wish to load file '
CESS06:	DB	'A Y/N ?: $'
;
MES07A:	DB	CS,CR,LF,LF,LF
MESS07:	DB	CR,LF,' Enter filename : $'
;
MESS08:	DB	CR,LF,' Memory start adress (4 dig HEX) : $'
;
MESS09:	DB	CS,CR,LF,' Select adress of toprow-line. This is no'
	DB	'rmally top adress of capital ',CR,LF
	DB	' letters. Enter 1 hex-digit only: $'	
;
MESS0A:	DB	' illegal name and/or file type !!!     try again $'
;
MESS0B:	DB	CS,CR,LF,LF,' file does not exist      WAIT  $' 
;
MESS0C:	DB	CS,CR,LF,LF,LF,LF
	DB	' are you sure, you dont want to save the result of'
	DB	' all your efforts ?',CR,LF
	DB	' answer Y = EXIT or N = SAVE.   Y/N ?: $'
;
MESS0D:	DB	CS,CR,LF,LF,LF
	DB	' file exists. overwrite ?  Y/N : $'
;
MESS0E:	DB	CR,LF,' length in Kilobytes (enter 1 dig)  ?: $'
;
MESS0F:	DB	CS,CR,LF,LF,' disk space full !!!!!!  $'
;
MESS1:	DB	CS,CR
	DB	' CURSOR:  ^E=up line     ^X=down line     ^D=right'
	DB	'     ^S=left     ^P=save pos ',CR,LF
	DB	' SCROLL:  ^C=up screen   ^R=down screen   ^B=R&L s'
	DB	'ide  ^A=L-side   ^F=R-side   ',CR,LF
	DB	'^K=page   ^U=by line     ^Q=file B        ^W=file '
	DB	'C    ^Å=continous (2xCR=STOP)',CR,LF
	DB	' WRITE :  ^V=set bit     ^T=reset bit     ^H=move '
	DB	'R-side to left               ',CR,LF
	DB	' OTHER :  ^N=lock R-L    ^G=find R=L      ^O=save '
	DB	'file             ^Y=exit     $'
;
MESS2:	DB	'--------------------------------------------------'
	DB	'-----------------------------$'
MESS3:	DB	'A'+80H,'  7 6 5 4 3 2 1 0$'
	DS	100
STAK:	DS	2
;
CS		EQU	05H	;CLEAR SCREEN
LF		EQU	0AH
CR		EQU	0DH
WBOOT		EQU	0001H
BDOS		EQU	0005H
BOOT		EQU	0000H
REBOOT		EQU	0
CONIN		EQU	1
CONOUT       	EQU	2
LSTOUT		EQU	5
PSTRING		EQU	9
READBF		EQU	10
SELDSK		EQU	14
OPENF		EQU	15
CLOSEF		EQU	16
RDSEQ		EQU	20
WRSEQ		EQU	21
MAKEF		EQU	22
SETDMA		EQU	26
GETADR		EQU	27
DELFIL		EQU	19
RDRAND		EQU	33
WRRAND		EQU	34
FILSIZ		EQU	35
SRNDRC		EQU	36
		END	START
«eof»