- плагин доделан, описание/history в cdplayer.txt рядом с плагином. FE 1.09 - исправлено: при выходе из редактора с несохраненным файлом и запросе на сохранение клавиша Enter теперь работает как подтверждение сохранения. FN 1.16 - встроенный editor переехал в плагин откуда и запускается по F4, из FN удален. - встроенный viewer переехал в плагин откуда и запускается по F3, из FN удален. - встроенный help переехал в плагин откуда и запускается при нажатии F1, из FN удален. - загрузка плагина отделена от запуска, теперь можно запускать плагины не только из панели FN. - добавлен макрос формирования заголовка для плагинов. - добавлена поддержка работы плагинов в адреса 0x4000-0x7FFF (окно 1) в дополнение к старым 0xC000-0xBFFF (окно 3), пока используется в плагине cdplayer. - в окнах с ошибкой переделан на 2 типа окон вместо многих под каждую ошибку. - исправлена потеря цвета при печати текста по указанному адресу. - текстовым файлам вернул кодировку CP866, readme.md оставлен в кодировке UTF8.
		
			
				
	
	
		
			966 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			966 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | ||
| ; LAST UPDATE: 25.07.2025 savelij
 | ||
| 
 | ||
| ;[]==========================================================[]
 | ||
| FileInfoR	LD	A,(IY+PANEL.FILES_ALL)
 | ||
| 		OR	(IY+PANEL.FILES_ALL + 1)
 | ||
| 		RET	Z
 | ||
| 		BIT	VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
 | ||
| 		RET	NZ
 | ||
| 	SETPORT WINSP.Y_PORT,0xC0
 | ||
| 	GETPORT WINSP.CPU3
 | ||
| 		PUSH	AF
 | ||
| 		BIT	PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
 | ||
| 		LD	A,(RAMPAGES.LEFTPANEL)
 | ||
| 		JR	Z,.L1
 | ||
| 		LD	A,(RAMPAGES.RIGHTPANEL)
 | ||
| .L1
 | ||
| 	SETPORT WINSP.CPU3,,0
 | ||
| 		LD	L,(IY+PANEL.FIRST_FILE)
 | ||
| 		LD	H,(IY+PANEL.FIRST_FILE + 1)
 | ||
| 		LD	E,(IY+PANEL.CURR_FILE)
 | ||
| 		LD	D,(IY+PANEL.CURR_FILE + 1)
 | ||
| 		ADD	HL,DE
 | ||
| 		ADD	HL,HL
 | ||
| 		ADD	HL,HL
 | ||
| 		ADD	HL,HL
 | ||
| 		LD	E,L
 | ||
| 		LD	D,H
 | ||
| 		ADD	HL,HL
 | ||
| 		ADD	HL,DE
 | ||
| 		LD	A,H
 | ||
| 		OR	0xC0
 | ||
| 		LD	H,A
 | ||
| 		LD	DE,WorkBuffer
 | ||
| 		LD	BC,0x0018
 | ||
| 		LDIR 
 | ||
| 		POP	AF
 | ||
| 	SETPORT WINSP.CPU3,,0
 | ||
| 		LD	IX,WorkBuffer
 | ||
| 		LD	HL,WorkBuffer+1
 | ||
| 		LD	DE,WorkBuffer+0x20
 | ||
| 		LD	A,(HL)
 | ||
| 		CP	'.'
 | ||
| 		RET	Z
 | ||
| 		CALL	SetClock
 | ||
| 		PUSH	DE
 | ||
| 		CALL	MakeDOSname
 | ||
| 		POP	HL
 | ||
| 		LD	DE,FName
 | ||
| 		LD	C,12
 | ||
| 		SUB	A
 | ||
| .L2		LDI 
 | ||
| 		CP	(HL)
 | ||
| 		JR	NZ,.L2
 | ||
| 		LD	A,C
 | ||
| 		OR	A
 | ||
| 		JR	Z,.L5
 | ||
| 		LD	B,A
 | ||
| 		LD	A,0x20
 | ||
| .L3		LD	(DE),A
 | ||
| 		INC	DE
 | ||
| 		DJNZ	.L3
 | ||
| .L5		LD	HL,FAtributs
 | ||
| 		LD	DE,FAttrib
 | ||
| 		LD	C,(IX + FileHDR.Attr)
 | ||
| 		LD	B,0x08
 | ||
| .L6		RL	C
 | ||
| 		LD	A,'-'
 | ||
| 		JR	NC,.L4
 | ||
| 		LD	A,(HL)
 | ||
| .L4		LD	(DE),A
 | ||
| 		INC	HL
 | ||
| 		INC	DE
 | ||
| 		DJNZ	.L6
 | ||
| 		LD	HL,FLen
 | ||
| 		LD	B,0x10
 | ||
| 		LD	A,0x20
 | ||
| .L10		LD	(HL),A
 | ||
| 		INC	HL
 | ||
| 		DJNZ	.L10
 | ||
| 		LD	DE,FLen
 | ||
| 		BIT	DIR.B_Dir,(IX + FileHDR.Attr)
 | ||
| 		JR	Z,.L7
 | ||
| 		LD	HL,DirText
 | ||
| 		LD	BC,0x000A
 | ||
| 		LDIR 
 | ||
| 		JR	.L8
 | ||
| 
 | ||
| .L7		LD	L,(IX+0x0F)
 | ||
| 		LD	H,(IX+0x10)
 | ||
| 		LD	C,(IX+0x11)
 | ||
| 		LD	B,(IX+0x12)
 | ||
| 		CALL	ConvNumTxt32
 | ||
| 		LD	A,0x20
 | ||
| 		LD	(DE),A
 | ||
| 		INC	DE
 | ||
| 		LD	HL,Bytes
 | ||
| 		LD	BC,0x0005
 | ||
| 		LDIR 
 | ||
| .L8		LD	DE,FData
 | ||
| 		CALL	GetData
 | ||
| 		LD	DE,FTime
 | ||
| 		CALL	GetTime
 | ||
| 		LD	HL,WorkBuffer+0x20
 | ||
| 		LD	DE,WorkBuffer+0x30
 | ||
| 		LD	A,(FileAtribut)
 | ||
| 		PUSH	IY
 | ||
| 	SPDSS DSSF.F_FIRST,0
 | ||
| 		POP	IY
 | ||
| 		JP	C,SetMouse
 | ||
| 		LD	HL,FClast
 | ||
| 		LD	B,0x05
 | ||
| 		LD	A,0x20
 | ||
| .L9		LD	(HL),A
 | ||
| 		INC	HL
 | ||
| 		DJNZ	.L9
 | ||
| 		LD	HL,WorkBuffer+0x30+26
 | ||
| 		LD	E,(HL)
 | ||
| 		INC	HL
 | ||
| 		LD	D,(HL)
 | ||
| 		EX	DE,HL
 | ||
| 		LD	DE,FClast
 | ||
| 		CALL	ConvNumTxt16
 | ||
| 	MAKEWINDOW WINSUBOBJ.STORE
 | ||
| 	W_MAIN 240,80,160,98
 | ||
| 	W_FILL 4,2,152,10,COLORI.BLACK
 | ||
| 	W_TEXT 56,3,COLORI.WHITE,"File info"
 | ||
| 	W_TEXT 10,20,COLORP.HIGHGRAY,"Name:              "
 | ||
| FName		EQU $ - STRLEN("            ") - 1
 | ||
| 	W_TEXT 10,32,COLORP.HIGHGRAY,"Attributes:          "
 | ||
| FAttrib		EQU $ - STRLEN("        ") - 1
 | ||
| 	W_TEXT 10,44,COLORP.HIGHGRAY,"Len:                  "
 | ||
| FLen		EQU $ - STRLEN("                ") - 1
 | ||
| 	W_TEXT 10,56,COLORP.HIGHGRAY,"Date:                  "
 | ||
| FData		EQU $ - STRLEN("                ") - 1
 | ||
| FTime		EQU $ - STRLEN("     ") - 1
 | ||
| 	W_TEXT 10,68,COLORP.HIGHGRAY,"First cluster:       "
 | ||
| FClast		EQU $ - STRLEN("     ") - 1
 | ||
| 	W_BUTTON 44,80,72,14
 | ||
| 	W_TEXT 72,83,COLORP.HIGHGRAY,"Ok"
 | ||
| 	W_END
 | ||
| 		CALL	SetMouse
 | ||
| FileInfoLoop:	LD	IX,FileInfoTab
 | ||
| 		CALL	TestCoords
 | ||
| 	SPDSS DSSF.SCANKEY
 | ||
| 		JR	Z,FileInfoLoop
 | ||
| 		LD	A,B
 | ||
| 		OR	A
 | ||
| 		JR	NZ,FileInfoLoop
 | ||
| 		LD	A,E
 | ||
| 		CP	0x1B
 | ||
| 		JR	Z,FileInfoExt
 | ||
| 		CP	0x0D
 | ||
| 		JR	Z,FileInfoExt
 | ||
| 		RES	5,A
 | ||
| 		CP	'O'
 | ||
| 		JR	NZ,FileInfoLoop
 | ||
| FileInfoExt:
 | ||
| 	WINDOWCLOSE
 | ||
| 		RET 
 | ||
| 
 | ||
| FAtributs:	DEFB	"--ad-shr"
 | ||
| 
 | ||
| ;[]==========================================================[]
 | ||
| PrintFileR	LD	A,(IY+PANEL.FILES_ALL)
 | ||
| 		OR	(IY+PANEL.FILES_ALL + 1)
 | ||
| 		RET	Z
 | ||
| 		BIT	VIEWFLAG.B_TREE,(IY+PANEL.VIEWFLAG)
 | ||
| 		RET	NZ
 | ||
| 	SETPORT WINSP.Y_PORT,0xC0
 | ||
| 	GETPORT WINSP.CPU3
 | ||
| 		PUSH	AF
 | ||
| 		BIT	PANELFLAG.B_SIDE,(IY+PANEL.PANELFLAG)
 | ||
| 		LD	A,(RAMPAGES.LEFTPANEL)
 | ||
| 		JR	Z,.L1
 | ||
| 		LD	A,(RAMPAGES.RIGHTPANEL)
 | ||
| .L1
 | ||
| 	SETPORT WINSP.CPU3,,0
 | ||
| 		LD	L,(IY+PANEL.FIRST_FILE)
 | ||
| 		LD	H,(IY+PANEL.FIRST_FILE + 1)
 | ||
| 		LD	E,(IY+PANEL.CURR_FILE)
 | ||
| 		LD	D,(IY+PANEL.CURR_FILE + 1)
 | ||
| 		ADD	HL,DE
 | ||
| 		ADD	HL,HL
 | ||
| 		ADD	HL,HL
 | ||
| 		ADD	HL,HL
 | ||
| 		LD	E,L
 | ||
| 		LD	D,H
 | ||
| 		ADD	HL,HL
 | ||
| 		ADD	HL,DE
 | ||
| 		LD	A,H
 | ||
| 		OR	0xC0
 | ||
| 		LD	H,A
 | ||
| 		LD	DE,WorkBuffer
 | ||
| 		LD	BC,0x0018
 | ||
| 		LDIR 
 | ||
| 		POP	AF
 | ||
| 	SETPORT WINSP.CPU3,,0
 | ||
| 		LD	IX,WorkBuffer
 | ||
| 		BIT	DIR.B_Dir,(IX + FileHDR.Attr)
 | ||
| 		RET	NZ
 | ||
| 		LD	HL,WorkBuffer+1
 | ||
| 		LD	DE,PrnFileName
 | ||
| 		CALL	MakeDOSname
 | ||
| 		LD	L,(IX + FileHDR.SizeBytes)
 | ||
| 		LD	H,(IX + FileHDR.SizeBytes + 1)
 | ||
| 		LD	(PrnFileLen),HL
 | ||
| 		LD	E,(IX + FileHDR.SizeBytes + 2)
 | ||
| 		LD	D,(IX + FileHDR.SizeBytes + 3)
 | ||
| 		LD	(PrnFileLen+2),DE
 | ||
| 		LD	A,H
 | ||
| 		OR	L
 | ||
| 		OR	D
 | ||
| 		OR	E
 | ||
| 		RET	Z
 | ||
| 		PUSH	IY
 | ||
| 	SPDSS DSSF.GETMEM,1
 | ||
| 		POP	IY
 | ||
| 		PUSH	AF
 | ||
| 		CALL	C,DOSError
 | ||
| 		POP	AF
 | ||
| 		RET	C
 | ||
| 		LD	(PrnMIndef),A
 | ||
| 		PUSH	IY
 | ||
| 		LD	HL,PagesList
 | ||
| 	SPBIOS BIOSF.GETMEMBLKPAGES
 | ||
| 	MAKEWINDOW WINSUBOBJ.STORE
 | ||
| 	W_MAIN 168,84,304,62
 | ||
| 	W_FILL 4,2,296,10,COLORI.BLACK
 | ||
| 	W_TEXT 142,3,COLORI.WHITE,"Print"
 | ||
| 	W_TEXT 16,16,COLORP.HIGHGRAY,"Printing file:"
 | ||
| 	W_BORDER 16,28,272,12
 | ||
| 	W_FILL 18,29,268,10,COLORI.WHITE
 | ||
| 	W_BUTTON 116,44,72,14
 | ||
| 	W_TEXT 140,47,COLORP.HIGHGRAY,"Stop"
 | ||
| 	W_END
 | ||
| 		PUSH	IY
 | ||
| 		POP	HL
 | ||
| 		LD	DE,PANEL.CURR_PATH
 | ||
| 		ADD	HL,DE
 | ||
| 		LD	DE,WorkBuffer
 | ||
| 		SUB	A
 | ||
| .L2		LDI 
 | ||
| 		CP	(HL)
 | ||
| 		JR	NZ,.L2
 | ||
| 		DEC	HL
 | ||
| 		LD	A,0x5C
 | ||
| 		CP	(HL)
 | ||
| 		JR	Z,.L3
 | ||
| 		LD	(DE),A
 | ||
| 		INC	DE
 | ||
| .L3		LD	HL,PrnFileName
 | ||
| 		SUB	A
 | ||
| .L4		LDI 
 | ||
| 		CP	(HL)
 | ||
| 		JR	NZ,.L4
 | ||
| 		LD	(DE),A
 | ||
| 		LD	IX,0x00D0
 | ||
| 		LD	HL,WorkBuffer
 | ||
| 		LD	DE,0x00F8
 | ||
| 		LD	BC,0x0064
 | ||
| 		LD	A,0x80
 | ||
| 		CALL	PrnRangPathL
 | ||
| 		LD	IX,PrintFTab
 | ||
| 		CALL	TestCoords
 | ||
| 		LD	IX,ProcessFPrn
 | ||
| 		LD	HL,(PrnFileLen)
 | ||
| 		LD	DE,(PrnFileLen+2)
 | ||
| 		LD	A,L
 | ||
| 		LD	L,H
 | ||
| 		LD	H,E
 | ||
| 		LD	E,D
 | ||
| 		OR	A
 | ||
| 		JR	Z,InitPrn
 | ||
| 		INC	HL
 | ||
| 		LD	A,H
 | ||
| 		OR	L
 | ||
| 		JR	NZ,InitPrn
 | ||
| 		INC	E
 | ||
| InitPrn		LD	(IX + PROC.MAX_PAGES),L
 | ||
| 		LD	(IX + PROC.MAX_PAGES + 1),H
 | ||
| 		LD	(IX + PROC.MAX_PAGES + 2),E
 | ||
| 		LD	(IX + PROC.MAX_PAGES + 3),0x00
 | ||
| 		CALL	InitProcess
 | ||
| 		LD	HL,PrnFileName
 | ||
| 	SPDSS DSSF.OPEN,,1
 | ||
| 		PUSH	AF
 | ||
| 		CALL	C,DOSError
 | ||
| 		POP	AF
 | ||
| 		JP	C,PrnError
 | ||
| 		LD	(PrnFHandle),A
 | ||
| 	GETPORT WINSP.CPU3
 | ||
| 		PUSH	AF
 | ||
| 		LD	HL,PagesList
 | ||
| 		LD	A,(HL)
 | ||
| ReadPr1		INC	HL
 | ||
| 		PUSH	HL
 | ||
| 	SETPORT WINSP.CPU3,,0
 | ||
| 		LD	HL,(PrnFileLen)
 | ||
| 		LD	DE,(PrnFileLen+2)
 | ||
| 		LD	BC,0x4000
 | ||
| 		OR	A
 | ||
| 		SBC	HL,BC
 | ||
| 		LD	B,0x00
 | ||
| 		EX	DE,HL
 | ||
| 		SBC	HL,BC
 | ||
| 		EX	DE,HL
 | ||
| 		JR	C,ReadPrnEnd
 | ||
| 		LD	(PrnFileLen),HL
 | ||
| 		LD	(PrnFileLen+2),DE
 | ||
| 		CALL	SetClock
 | ||
| 		LD	HL,0xC000
 | ||
| 		LD	DE,0x4000
 | ||
| 		LD	A,(PrnFHandle)
 | ||
| 	SPDSS DSSF.READ
 | ||
| 		CALL	SetMouse
 | ||
| 		LD	BC,0x4000
 | ||
| 		CALL	PrintBlock
 | ||
| 		POP	HL
 | ||
| 		JR	C,PrnEsc
 | ||
| 		LD	A,(HL)
 | ||
| 		CP	0xFF
 | ||
| 		JR	NZ,ReadPr1
 | ||
| PrnEsc		POP	AF
 | ||
| 		SETPORT WINSP.CPU3,,0
 | ||
| 		JR	PrnFileExit
 | ||
| 
 | ||
| ReadPrnEnd:	LD	HL,0xC000
 | ||
| 		LD	DE,(PrnFileLen)
 | ||
| 		LD	A,D
 | ||
| 		OR	E
 | ||
| 		JR	Z,.L1
 | ||
| 		CALL	SetClock
 | ||
| 		LD	A,(PrnFHandle)
 | ||
| 		PUSH	DE
 | ||
| 	SPDSS DSSF.READ
 | ||
| 		POP	BC
 | ||
| 		CALL	SetMouse
 | ||
| 		CALL	PrintBlock
 | ||
| 		JR	C,.L2
 | ||
| .L1		CALL	NxtPrnProc
 | ||
| .L2		POP	HL
 | ||
| 		POP	AF
 | ||
| 	SETPORT WINSP.CPU3,,0
 | ||
| PrnFileExit	LD	A,(PrnFHandle)
 | ||
| 	SPDSS DSSF.CLOSE
 | ||
| PrnError	LD	A,(PrnMIndef)
 | ||
| 	SPDSS DSSF.FREEMEM
 | ||
| 		POP	IY
 | ||
| 		HALT 
 | ||
| 		HALT
 | ||
| 	WINDOWCLOSE
 | ||
| 		RET 
 | ||
| 
 | ||
| ;[]----------------------------------------------------------[]
 | ||
| PrintBlock:	LD	DE,0xC000
 | ||
| PrnBlockLp	LD	A,(DE)
 | ||
| 		INC	DE
 | ||
| 		CALL	PrintCHAR
 | ||
| 		RET	C
 | ||
| 		CALL	NxtPrnProc
 | ||
| 		DEC	BC
 | ||
| 		LD	A,B
 | ||
| 		OR	C
 | ||
| 		JR	NZ,PrnBlockLp
 | ||
| 		RET 
 | ||
| 
 | ||
| PrintCHAR:	LD	L,A
 | ||
| 		PUSH	HL
 | ||
| 		PUSH	DE
 | ||
| 		PUSH	BC
 | ||
| 	SPMOUSE MOUSEF.READ_STATE
 | ||
| 		BIT	0,A
 | ||
| 		JR	Z,PrnCH1
 | ||
| 		LD	IX,PrintFTab
 | ||
| 		CALL	TestCoords
 | ||
| 		JR	C,PrnCH2
 | ||
| PrnCH1
 | ||
| 	SPDSS DSSF.SCANKEY
 | ||
| 		LD	A,E
 | ||
| PrnCH2		POP	BC
 | ||
| 		POP	DE
 | ||
| 		POP	HL
 | ||
| 		RET	C
 | ||
| 		JR	Z,PrnCHAR
 | ||
| 		CP	0x1B
 | ||
| 		SCF 
 | ||
| 		RET	Z
 | ||
| 		RES	5,A
 | ||
| 		CP	'S'
 | ||
| 		JR	NZ,PrnCHAR
 | ||
| StopPrint	SCF 
 | ||
| 		RET 
 | ||
| 
 | ||
| PrnCHAR		PUSH	DE
 | ||
| 		PUSH	BC
 | ||
| 		LD	A,L
 | ||
| 	SPDSS DSSF.PRINT
 | ||
| 		LD	A,B
 | ||
| 		POP	BC
 | ||
| 		POP	DE
 | ||
| 		RET	NC
 | ||
| 		HALT 
 | ||
| 		JR	PrintCHAR
 | ||
| 
 | ||
| ;[]----------------------------------------------------------[]
 | ||
| NxtPrnProc	LD	A,E
 | ||
| 		OR	A
 | ||
| 		RET	NZ
 | ||
| 		PUSH	DE
 | ||
| 		PUSH	BC
 | ||
| 		LD	IX,ProcessFPrn
 | ||
| 		LD	L,(IX + PROC.CURR_PAGE)
 | ||
| 		LD	H,(IX + PROC.CURR_PAGE + 1)
 | ||
| 		INC	HL
 | ||
| 		LD	(IX + PROC.CURR_PAGE),L
 | ||
| 		LD	(IX + PROC.CURR_PAGE + 1),H
 | ||
| 		LD	A,H
 | ||
| 		OR	L
 | ||
| 		JR	NZ,.L1
 | ||
| 		LD	L,(IX + PROC.CURR_PAGE + 2)
 | ||
| 		LD	H,(IX + PROC.CURR_PAGE + 3)
 | ||
| 		INC	HL
 | ||
| 		LD	(IX + PROC.CURR_PAGE + 2),L
 | ||
| 		LD	(IX + PROC.CURR_PAGE + 3),H
 | ||
| .L1		CALL	PrnProcess
 | ||
| 		POP	BC
 | ||
| 		POP	DE
 | ||
| 		RET 
 | ||
| 
 | ||
| ProcessFPrn:	DEFW	0x00BA
 | ||
| 		DEFW	0x0071
 | ||
| 		DEFW	0x010C
 | ||
| 		DEFW	0x0000
 | ||
| 		DEFW	0x0000
 | ||
| 		DEFW	0x0000
 | ||
| 		DEFW	0x0000
 | ||
| 		DEFW	0x0000
 | ||
| 		DEFW	0x0000
 | ||
| 		DEFB	0x4F
 | ||
| PrnFileName:	DUPL	13,0
 | ||
| PrnFileLen:	DUPL	4,0
 | ||
| PrnMIndef:	DEFB	0x00
 | ||
| PrnFHandle:	DEFB	0x00
 | ||
| 
 | ||
| ;[]==========================================================[]
 | ||
| SystemInfoR
 | ||
| 	SETPORT WINSP.Y_PORT,0xC0
 | ||
| 		LD	HL,SetInvert
 | ||
| 		PUSH	HL
 | ||
| 		LD	HL,DOSvers
 | ||
| 		LD	DE,BIOSver
 | ||
| 		LD	B,0x05
 | ||
| 		LD	A,0x20
 | ||
| .L1		LD	(HL),A
 | ||
| 		INC	HL
 | ||
| 		LD	(DE),A
 | ||
| 		INC	DE
 | ||
| 		DJNZ	.L1
 | ||
| 		PUSH	IY
 | ||
| 	SPDSS DSSF.VERSION
 | ||
| 		POP	IY
 | ||
| 		EX	DE,HL
 | ||
| 		LD	DE,DOSvers
 | ||
| 		LD	A,H
 | ||
| 		CALL	ConvNumTxt8
 | ||
| 		LD	A,'.'
 | ||
| 		LD	(DE),A
 | ||
| 		INC	DE
 | ||
| 		LD	A,L
 | ||
| 		CALL	ConvNumTxt8
 | ||
| 		LD	HL,WorkBuffer
 | ||
| 	SPBIOS BIOSF.FN_VERSION
 | ||
| 		SUB	A
 | ||
| .L2		INC	HL
 | ||
| 		CP	(HL)
 | ||
| 		JR	NZ,.L2
 | ||
| 		LD	A,0x20
 | ||
| .L3		DEC	HL
 | ||
| 		CP	(HL)
 | ||
| 		JR	NZ,.L3
 | ||
| 		INC	HL
 | ||
| 		LD	DE,BIOSver
 | ||
| 		SUB	A
 | ||
| .L4		LDI 
 | ||
| 		CP	(HL)
 | ||
| 		JR	NZ,.L4
 | ||
| 		LD	HL,Present
 | ||
| 		LD	A,(CMOSFlag)
 | ||
| 		OR	A
 | ||
| 		JR	NZ,.L5
 | ||
| 		LD	HL,NotPresent
 | ||
| .L5		LD	DE,CMOS
 | ||
| 		LD	BC,0x000B
 | ||
| 		LDIR 
 | ||
| 		LD	HL,TotMem
 | ||
| 		LD	DE,FreeMem
 | ||
| 		LD	B,0x0F
 | ||
| 		LD	A,0x20
 | ||
| .L6		LD	(HL),A
 | ||
| 		INC	HL
 | ||
| 		LD	(DE),A
 | ||
| 		INC	DE
 | ||
| 		DJNZ	.L6
 | ||
| 		PUSH	IY
 | ||
| 	SPDSS DSSF.INFOMEM
 | ||
| 		POP	IY
 | ||
| 		PUSH	BC
 | ||
| 		LD	B,H
 | ||
| 		LD	C,L
 | ||
| 		LD	HL,0x0000
 | ||
| 		LD	DE,WorkBuffer
 | ||
| 		SRL	B
 | ||
| 		RR	C
 | ||
| 		RR	H
 | ||
| 		RR	L
 | ||
| 		SRL	B
 | ||
| 		RR	C
 | ||
| 		RR	H
 | ||
| 		RR	L
 | ||
| 		PUSH	DE
 | ||
| 		CALL	ConvNumTxt32
 | ||
| 		SUB	A
 | ||
| 		LD	(DE),A
 | ||
| 		POP	HL
 | ||
| 		LD	DE,TotMem
 | ||
| 		CALL	CorrBigNum
 | ||
| 		INC	DE
 | ||
| 		LD	HL,Bytes
 | ||
| 		LD	BC,0x0005
 | ||
| 		LDIR 
 | ||
| 		POP	HL
 | ||
| 		LD	B,H
 | ||
| 		LD	C,L
 | ||
| 		LD	HL,0x0000
 | ||
| 		LD	DE,WorkBuffer
 | ||
| 		SRL	B
 | ||
| 		RR	C
 | ||
| 		RR	H
 | ||
| 		RR	L
 | ||
| 		SRL	B
 | ||
| 		RR	C
 | ||
| 		RR	H
 | ||
| 		RR	L
 | ||
| 		PUSH	DE
 | ||
| 		CALL	ConvNumTxt32
 | ||
| 		SUB	A
 | ||
| 		LD	(DE),A
 | ||
| 		POP	HL
 | ||
| 		LD	DE,FreeMem
 | ||
| 		CALL	CorrBigNum
 | ||
| 		INC	DE
 | ||
| 		LD	HL,Bytes
 | ||
| 		LD	BC,0x0005
 | ||
| 		LDIR 
 | ||
| 	MAKEWINDOW WINSUBOBJ.STORE
 | ||
| 	W_MAIN 224,64,192,114
 | ||
| 	W_FILL 4,2,184,10,COLORI.BLACK
 | ||
| 	W_TEXT 48,3,COLORI.WHITE,"System information"
 | ||
| 	W_TEXT 10,20,COLORP.HIGHGRAY,"FN version:  \{FLEX_VERS.NAVIGATOR}"
 | ||
| 	W_TEXT 10,32,COLORP.HIGHGRAY,"BIOS version:       "
 | ||
| BIOSver		EQU $ - STRLEN("     ") - 1
 | ||
| 	W_TEXT 10,44,COLORP.HIGHGRAY,"DOS version:       "
 | ||
| DOSvers		EQU $ - STRLEN("     ") - 1
 | ||
| 	W_TEXT 10,56,COLORP.HIGHGRAY,"CMOS:             "
 | ||
| CMOS		EQU $ - STRLEN("           ") - 1
 | ||
| 	W_TEXT 10,70,COLORP.HIGHGRAY,"Total memory:                 "
 | ||
| TotMem		EQU $ - STRLEN("               ") - 1
 | ||
| 	W_TEXT 10,82,COLORP.HIGHGRAY,"Free memory:                 "
 | ||
| FreeMem		EQU $ - STRLEN("               ") - 1
 | ||
| 	W_BUTTON 60,96,72,14
 | ||
| 	W_TEXT 88,99,COLORP.HIGHGRAY,"Ok",0
 | ||
| 	W_END
 | ||
| SysInfoLoop:	LD	IX,SysInfoTab
 | ||
| 		CALL	TestCoords
 | ||
| 	SPDSS DSSF.SCANKEY
 | ||
| 		JR	Z,SysInfoLoop
 | ||
| 		LD	A,B
 | ||
| 		OR	A
 | ||
| 		JR	NZ,SysInfoLoop
 | ||
| 		LD	A,E
 | ||
| 		CP	0x1B
 | ||
| 		JR	Z,SysInfoExt
 | ||
| 		CP	0x0D
 | ||
| 		JR	Z,SysInfoExt
 | ||
| 		RES	5,A
 | ||
| 		CP	'O'
 | ||
| 		JR	NZ,SysInfoLoop
 | ||
| SysInfoExt
 | ||
| 	WINDOWCLOSE
 | ||
| 		RET 
 | ||
| 
 | ||
| Bytes:		DEFB	"bytes"
 | ||
| Present:	DEFB	"Present    "
 | ||
| NotPresent:	DEFB	"Not present"
 | ||
| 
 | ||
| ;[]==========================================================[]
 | ||
| DiskInfoR:	LD	HL,SetInvert
 | ||
| 		;!FIXIT	<09><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>	SAFE_PORTY 
 | ||
| 		PUSH	HL
 | ||
| 	SETPORT WINSP.Y_PORT,0xC0
 | ||
| 		CALL	SetClock
 | ||
| 		PUSH	IY
 | ||
| 	SPDSS DSSF.CURDISK
 | ||
| 		POP	IY
 | ||
| 		ADD	A,'A'
 | ||
| 		LD	(.CrDrive),A
 | ||
| 		;!TEST
 | ||
| 		;LD	IX,0x0000
 | ||
| 		;LD	HL,0x0000
 | ||
| 		;LD	DE,WorkBuffer
 | ||
| 		;LD	BC,0x0105
 | ||
| 		;SUB	'A'
 | ||
| 		;PUSH	IY
 | ||
| 		;RST	ToDSS.DRV	;!FIXIT rst 0x18
 | ||
| 		;POP	IY
 | ||
| 		;JP	C,SetMouse
 | ||
| 		LD	B,0
 | ||
| 		CALL	.get_info
 | ||
| 		EX	AF,AF'
 | ||
| 		LD	A,D
 | ||
| 		AND	E
 | ||
| 		EXX
 | ||
| 		AND	D
 | ||
| 		AND	E
 | ||
| 		INC	A
 | ||
| 		EXX
 | ||
| 		JR	Z,.no_full_info
 | ||
| ; <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
 | ||
| 		PUSH	DE	; <><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		PUSH	HL	; <20><>饥 <20><><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		PUSH	BC	; ࠧ<><E0A0A7><EFBFBD> ᥪ<><E1A5AA><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		EXX
 | ||
| 		PUSH	DE	; <><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		PUSH	HL	; <20><>饥 <20><><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		EX	AF,AF'
 | ||
| 		PUSH	AF	; ࠧ<><E0A0A7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> ᥪ<><E1A5AA><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		EX	AF,AF'
 | ||
| .no_full_info:	PUSH	AF
 | ||
| ; parsing
 | ||
| 		LD	D,0
 | ||
| 		LD	HL,WorkBuffer
 | ||
| ; <20><><EFBFBD> <20> HL <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⥬<EFBFBD>"
 | ||
| 		LD	E,(HL)
 | ||
| 		ADD	HL,DE
 | ||
| 		INC	HL
 | ||
| ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> "<22><><EFBFBD><E0A8A9><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>᪠"
 | ||
| 		LD	A,(HL)
 | ||
| 		PUSH	HL
 | ||
| 		INC	HL
 | ||
| 		LD	(.serial_1),HL
 | ||
| 		INC	HL
 | ||
| 		LD	(.serial_2),HL
 | ||
| 		INC	HL
 | ||
| 		LD	(.serial_3),HL
 | ||
| 		INC	HL
 | ||
| 		LD	(.serial_4),HL
 | ||
| 		POP	HL
 | ||
| 		LD	E,A
 | ||
| 		ADD	HL,DE
 | ||
| 		INC	HL	; 㪠<><E3AAA0>⥫<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> "<22><>⪠ <20><>᪠"
 | ||
| 		INC	HL
 | ||
| ; <20><>⪠
 | ||
| 		LD	(.buf_label),HL
 | ||
| 		LD	DE,.NoLabel
 | ||
| 		LD	B,11
 | ||
| .loop1:		SUB	A
 | ||
| 		CP	(HL)
 | ||
| 		JR	Z,.DiskI2
 | ||
| 		LD	A,(DE)
 | ||
| 		CP	(HL)
 | ||
| 		JR	NZ,.DiskI1
 | ||
| 		INC	HL
 | ||
| 		INC	DE
 | ||
| 		DJNZ	.loop1
 | ||
| .DiskI1:	LD	HL,WorkBuffer+0x2B
 | ||
| .buf_label	EQU $-2
 | ||
| 		JR	NZ,.DiskI21F
 | ||
| .DiskI2:	LD	HL,.NoLabelT
 | ||
| .DiskI21F:	LD	DE,.Dlabel
 | ||
| 		LD	BC,.Dlabel.Size
 | ||
| 		LDIR 
 | ||
| ; <20><><EFBFBD><E0A8A9><EFBFBD>
 | ||
| 		LD	DE,.SerialN
 | ||
| 		LD	A,(WorkBuffer+0x2A)
 | ||
| .serial_4	EQU $-2
 | ||
| 		CALL	ConvHexTxt
 | ||
| 		LD	A,(WorkBuffer+0x29)
 | ||
| .serial_3	EQU $-2
 | ||
| 		CALL	ConvHexTxt
 | ||
| 		INC	DE
 | ||
| 		LD	A,(WorkBuffer+0x28)
 | ||
| .serial_2	EQU $-2
 | ||
| 		CALL	ConvHexTxt
 | ||
| 		LD	A,(WorkBuffer+0x27)
 | ||
| .serial_1	EQU $-2
 | ||
| 		CALL	ConvHexTxt
 | ||
| 	MAKEWINDOW WINSUBOBJ.STORE
 | ||
| 	W_MAIN 192,80,256,98
 | ||
| 	W_FILL 4,2,248,10,COLORI.BLACK
 | ||
| 	W_TEXT 106,3,COLORI.WHITE,"Disk info"
 | ||
| 	W_TEXT 10,20,COLORP.HIGHGRAY,"Current drive:   "
 | ||
| .CrDrive:	EQU $ - 2
 | ||
| 	W_TEXT 10,32,COLORP.HIGHGRAY,"Total disk space:"
 | ||
| 	W_TEXT 10,44,COLORP.HIGHGRAY,"Avaliable disk space:"
 | ||
| 	W_TEXT 10,56,COLORP.HIGHGRAY,"Disk label:             "
 | ||
| .Dlabel:	EQU $ - STRLEN("           ") - 1
 | ||
| .Dlabel.Size	EQU	$ - .Dlabel - 1
 | ||
| 	W_TEXT 10,68,COLORP.HIGHGRAY,"Serial volume number:      -    "
 | ||
| .SerialN:	EQU $ - STRLEN("    -    ") - 1
 | ||
| 	W_BUTTON 92,80,72,14
 | ||
| 	W_TEXT 120,83,COLORP.HIGHGRAY,"Ok"
 | ||
| 	W_END
 | ||
| 		POP	AF
 | ||
| 		JR	NZ,.calc_size
 | ||
| 		LD	B,1
 | ||
| 		CALL	.get_info
 | ||
| 		PUSH	DE		; <><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		PUSH	HL		; <20><>饥 <20><><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		PUSH	BC		; ࠧ<><E0A0A7><EFBFBD> ᥪ<><E1A5AA><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		EXX
 | ||
| 		PUSH	DE		; <><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		PUSH	HL		; <20><>饥 <20><><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		PUSH	AF		; ࠧ<><E0A0A7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> ᥪ<><E1A5AA><EFBFBD><EFBFBD><EFBFBD>
 | ||
| .calc_size:	POP	AF		; ࠧ<><E0A0A7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> ᥪ<><E1A5AA><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		POP	HL
 | ||
| 		POP	DE
 | ||
| 		EXX
 | ||
| 		POP	BC
 | ||
| 		POP	HL
 | ||
| 		POP	DE
 | ||
| ; --> (HL':HL)*BC*A, (DE':DE)*BC*A  =  B':HL'HL, C':DE':DE
 | ||
| 		EXX
 | ||
| 		LD	BC,0
 | ||
| 		EXX
 | ||
| 		SRL	B
 | ||
| 		RR	C
 | ||
| 		RRCA
 | ||
| 		JR	C,.loop_2
 | ||
| .loop_1:	SLA	L
 | ||
| 		RL	H
 | ||
| 		EXX
 | ||
| 		RL	L
 | ||
| 		RL	H
 | ||
| 		RL	B
 | ||
| 		EXX
 | ||
| 		SLA	E
 | ||
| 		RL	D
 | ||
| 		EXX
 | ||
| 		RL	E
 | ||
| 		RL	D
 | ||
| 		RL	C
 | ||
| 		EXX
 | ||
| 		RRCA
 | ||
| 		JP	NC,.loop_1
 | ||
| .loop_2:	SLA	L
 | ||
| 		RL	H
 | ||
| 		EXX
 | ||
| 		RL	L
 | ||
| 		RL	H
 | ||
| 		RL	B
 | ||
| 		EXX
 | ||
| 		SLA	E
 | ||
| 		RL	D
 | ||
| 		EXX
 | ||
| 		RL	E
 | ||
| 		RL	D
 | ||
| 		RL	C
 | ||
| 		EXX
 | ||
| 		SRL	B
 | ||
| 		RR	C		
 | ||
| 		JP	NC,.loop_2
 | ||
| ; <-- B':HL'HL, C':DE':DE
 | ||
| 		EXX
 | ||
| 		LD	A,C
 | ||
| 		LD	(.freeSpace_h),A
 | ||
| 		LD	(.freeSpace_m),DE
 | ||
| 		LD	A,B
 | ||
| 		PUSH	HL
 | ||
| 		EXX
 | ||
| 		LD	(.freeSpace_l),DE
 | ||
| 		POP	BC
 | ||
| ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞 <20><>騩 ࠧ<><E0A0A7><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		; A:BC:HL - <20><> <20><><EFBFBD> <20><>ॢ<EFBFBD><E0A5A2><EFBFBD>
 | ||
| 		LD	DE,WorkBuffer
 | ||
| 		CALL	ConvNumTxt40
 | ||
| 		SUB	A
 | ||
| 		LD	(DE),A
 | ||
| 		LD	HL,WorkBuffer
 | ||
| 		LD	DE,WorkBuffer+0x100
 | ||
| 		CALL	CorrBigNum
 | ||
| 		LD	A,' '
 | ||
| 		LD	(DE),A
 | ||
| 		INC	DE
 | ||
| 		LD	HL,Bytes
 | ||
| 		LD	BC,5;Bytes.Size
 | ||
| 		LDIR 
 | ||
| 		SUB	A
 | ||
| 		LD	(DE),A
 | ||
| ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞 <><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | ||
| 		LD	A,0
 | ||
| .freeSpace_h	EQU $-1
 | ||
| 		LD	BC,0
 | ||
| .freeSpace_m	EQU $-2
 | ||
| 		LD	HL,0
 | ||
| .freeSpace_l	EQU $-2
 | ||
| 		LD	DE,WorkBuffer+0x80
 | ||
| ; A:BC:HL - <20><> <20><><EFBFBD> <20><>ॢ<EFBFBD><E0A5A2><EFBFBD>
 | ||
| 		CALL	ConvNumTxt40
 | ||
| 		SUB	A
 | ||
| 		LD	(DE),A
 | ||
| 		LD	HL,WorkBuffer+0x80
 | ||
| 		LD	DE,WorkBuffer+0x180
 | ||
| 		CALL	CorrBigNum
 | ||
| 		LD	A,' '
 | ||
| 		LD	(DE),A
 | ||
| 		INC	DE
 | ||
| 		LD	HL,Bytes
 | ||
| 		LD	BC,5;Bytes.Size
 | ||
| 		LDIR 
 | ||
| 		SUB	A
 | ||
| 		LD	(DE),A
 | ||
| ; <20>뢮<EFBFBD> ࠧ<><E0A0A7>
 | ||
| 		LD	HL,WorkBuffer+0x100
 | ||
| 		LD	DE,0x0128
 | ||
| 		LD	BC,0x0070
 | ||
| 		LD	A,0x80
 | ||
| 		CALL	PrnTxtLnIFF
 | ||
| 		LD	HL,WorkBuffer+0x180
 | ||
| 		LD	DE,0x0013A
 | ||
| 		LD	BC,0x007C
 | ||
| 		LD	A,0x80
 | ||
| 		CALL	PrnTxtLnIFF
 | ||
| 		CALL	SetMouse
 | ||
| .DiskInfoLoop:	LD	IX,DiskInfoTab
 | ||
| 		CALL	TestCoords
 | ||
| 	SPDSS DSSF.SCANKEY
 | ||
| 		JR	Z,.DiskInfoLoop
 | ||
| 		LD	A,B
 | ||
| 		OR	A
 | ||
| 		JR	NZ,.DiskInfoLoop
 | ||
| 		LD	A,E
 | ||
| 		CP	0x1B
 | ||
| 		JR	Z,.Ext
 | ||
| 		CP	0x0D
 | ||
| 		JR	Z,.Ext
 | ||
| 		RES	5,A
 | ||
| 		CP	'O'
 | ||
| 		JR	NZ,.DiskInfoLoop
 | ||
| .Ext:
 | ||
| 	WINDOWCLOSE
 | ||
| 		RET 
 | ||
| 
 | ||
| .get_info:	LD	A,(.CrDrive)
 | ||
| 		SUB	'A'
 | ||
| 		OR	0x80
 | ||
| 		LD	HL,WorkBuffer
 | ||
| 		PUSH	IY
 | ||
| 	SPDSS DSSF.DSKINFO
 | ||
| 		POP	IY
 | ||
| 		RET	NC
 | ||
| ; <20> <20>訡<EFBFBD><E8A8A1>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD>塞 ࠧ<><E0A0A7><EFBFBD> <><E1A2AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠧ<><E0A0A7><EFBFBD>
 | ||
| 		XOR	A
 | ||
| 		LD	H,A
 | ||
| 		LD	L,A
 | ||
| 		LD	D,A
 | ||
| 		LD	E,A
 | ||
| 		EXX
 | ||
| 		LD	H,A
 | ||
| 		LD	L,A
 | ||
| 		LD	D,A
 | ||
| 		LD	E,A
 | ||
| 		LD	B,A
 | ||
| 		LD	C,A
 | ||
| 		RET		
 | ||
| 
 | ||
| .NoLabel	DEFB	"NO NAME    "
 | ||
| .NoLabelT	DEFB	"no label   "
 | ||
| 
 | ||
| ConvHexTxt	PUSH	AF
 | ||
| 		RRCA 
 | ||
| 		RRCA 
 | ||
| 		RRCA 
 | ||
| 		RRCA 
 | ||
| 		CALL	ConvHexT1
 | ||
| 		POP	AF
 | ||
| ConvHexT1	AND	0x0F
 | ||
| 		ADD	A,0x90
 | ||
| 		DAA 
 | ||
| 		ADC	A,0x40
 | ||
| 		DAA 
 | ||
| 		LD	(DE),A
 | ||
| 		INC	DE
 | ||
| 		RET 
 | ||
| 
 | ||
| CorrBigNum	PUSH	HL
 | ||
| 		SUB	A
 | ||
| 		LD	C,A
 | ||
| .L1		INC	C
 | ||
| 		INC	HL
 | ||
| 		CP	(HL)
 | ||
| 		JR	NZ,.L1
 | ||
| 		POP	HL
 | ||
| 		LD	A,C
 | ||
| .L2		SUB	0x03
 | ||
| 		JR	Z,.L5
 | ||
| 		JR	NC,.L2
 | ||
| 		ADD	A,0x03
 | ||
| 		LD	B,A
 | ||
| .L3		LD	A,(HL)
 | ||
| 		LD	(DE),A
 | ||
| 		INC	HL
 | ||
| 		INC	DE
 | ||
| 		DJNZ	.L3
 | ||
| .L4		LD	A,(HL)
 | ||
| 		OR	A
 | ||
| 		RET	Z
 | ||
| 		LD	A,' '
 | ||
| 		LD	(DE),A
 | ||
| 		INC	DE
 | ||
| .L5		LDI 
 | ||
| 		LDI 
 | ||
| 		LDI 
 | ||
| 		JR	.L4
 | ||
| 
 | ||
| ;[]==========================================================[]
 | ||
| VersionR
 | ||
| 	SETPORT WINSP.Y_PORT,0xC0
 | ||
| 		LD	HL,SetInvert
 | ||
| 		PUSH	HL
 | ||
| 	MAKEWINDOW WINSUBOBJ.STORE
 | ||
| 	W_MAIN 192,64,256,152
 | ||
| 	W_FILL 4,2,248,10,COLORI.BLACK
 | ||
| 	W_TEXT 110,3,COLORI.WHITE,"Version"
 | ||
| 	W_TEXT 93,20,COLORP.HIGHGRAY,"Flex Navigator"
 | ||
| 	W_TEXT 76,38,COLORP.HIGHGRAY,"Component versions:"
 | ||
| 	W_TEXT 70,48,COLORP.HIGHGRAY,"Manager:"
 | ||
| 	W_TEXT 128,48,COLORP.HIGHGRAY,"\{FLEX_VERS.NAVIGATOR}"
 | ||
| 	W_TEXT 65,58,COLORP.HIGHGRAY,"File Editor:"
 | ||
| 	W_TEXT 128,58,COLORP.HIGHGRAY,"\{FLEX_VERS.EDITOR}"
 | ||
| 	W_TEXT 61,68,COLORP.HIGHGRAY,"File Viewer:"
 | ||
| 	W_TEXT 128,68,COLORP.HIGHGRAY,"\{FLEX_VERS.VIEWER}"
 | ||
| 	W_TEXT 40,86,COLORP.HIGHGRAY,"2000, Enin Anton"
 | ||
| 	W_TEXT 40,96,COLORP.HIGHGRAY,"2021, Mikhaltchenkov Dmitry"
 | ||
| 	W_TEXT 40,106,COLORP.HIGHGRAY,"2022, Belyanskiy Anatoliy"
 | ||
| 	W_TEXT 40,116,COLORP.HIGHGRAY,"(C) Sprinter Team build ",0 ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><>⠢<EFBFBD><E2A0A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ᡮન
 | ||
| 	W_BUTTON 92,133,72,14
 | ||
| 	W_TEXT 120,136,COLORP.HIGHGRAY,"OK"
 | ||
| 	W_END
 | ||
| 		CALL	ResFire
 | ||
| VersionLoop	LD	IX,VersionTab
 | ||
| 		CALL	TestCoords
 | ||
| 	SPDSS DSSF.SCANKEY
 | ||
| 		JR	Z,VersionLoop
 | ||
| 		LD	A,B
 | ||
| 		OR	A
 | ||
| 		JR	NZ,VersionLoop
 | ||
| 		LD	A,E
 | ||
| 		CP	0x1B
 | ||
| 		JR	Z,VersionExt
 | ||
| 		CP	0x0D
 | ||
| 		JR	NZ,VersionLoop
 | ||
| VersionExt
 | ||
| 	WINDOWCLOSE
 | ||
| 		RET 
 |