192 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
 | ||
| ; LAST UPDATE: 30.05.2025 savelij
 | ||
| 
 | ||
| 		include macros.a80
 | ||
| 
 | ||
| 		include macros_sp.a80
 | ||
| 		include define_sp.a80
 | ||
| 		include bios_sp.a80
 | ||
| 		include dss_sp.a80
 | ||
| 		include errors_sp.a80
 | ||
| 		include ports_sp.a80
 | ||
| 		include mouse_sp.a80
 | ||
| 		include accel_sp.a80
 | ||
| 		include fat_dir_sp.a80
 | ||
| 		include fn_version.a80
 | ||
| 
 | ||
|  INIT_VAR 0xC000
 | ||
|  SETVAR FONT_RAW,	6888;IFFFONT_RAW_PACK - FONT_RAW_PACK
 | ||
|  SETVAR_ALIGN
 | ||
|  SETVAR IFFFONT_RAW,	8704;IFFFONT_RAW_END - IFFFONT_RAW_PACK
 | ||
|  SETVAR CLOCK_BMP,	CLOCK_BMP_END - Clock_BMP
 | ||
|  SETVAR MOUSE_BMP,	MOUSE_BMP_END - Mouse_BMP
 | ||
| 
 | ||
| 		org	0x80EA
 | ||
| 
 | ||
| EXEhead:	db	"EXE"
 | ||
| 		db	1			; +3
 | ||
| 		dw	EntryExec-EXEhead
 | ||
| 		dw	0x0000			; +4
 | ||
| 		dw	EXEend-EntryExec	; +8
 | ||
| 		dw	0,0			; +10
 | ||
| 		dw	0			; +14
 | ||
| 		dw	EntryExec		; +16
 | ||
| 		dw	EntryExec
 | ||
| 		dw	0x80FF
 | ||
| 
 | ||
| EntryExec:	DI
 | ||
| 		LD	A,(IX-0x03)		; file handle
 | ||
| 		LD	(MAIN.hFile),A		; save
 | ||
| 		LD	HL,MAIN.copyright_str
 | ||
| 	SPDSS DSSF.PCHARS			; print text
 | ||
| 	SPDSS DSSF.VERSION
 | ||
| 		LD	A,D
 | ||
| 		OR	A
 | ||
| 		JR	NZ,.next1
 | ||
| 		LD	HL,MAIN.incor_dos_str
 | ||
| 	SPDSS DSSF.PCHARS			; print text
 | ||
| 	SPDSS DSSF.EXIT,0x26			; exit
 | ||
| 
 | ||
| .next1
 | ||
| 	SPDSS DSSF.GETMEM,6			; § ¯à®á 6 áâà ¨æ ¯ ¬ïâ¨
 | ||
| 		JR	NC,.next2		; CY - not enough memory
 | ||
| 		LD	HL,MAIN.no_memory_str
 | ||
| 	SPDSS DSSF.PCHARS			; print text
 | ||
| 	SPDSS DSSF.EXIT,0x1E			; exit
 | ||
| 
 | ||
| .next2		LD	(MAIN.hMem),A		; memory handle
 | ||
| 		LD	HL,MAIN.FNMAIN
 | ||
| 	SPBIOS BIOSF.GETMEMBLKPAGES		; get memory pages list
 | ||
| 		LD	A,(MAIN.FNMAIN)		; set pages from 0xC000
 | ||
| 	SETPORT WINSP.CPU3,,0
 | ||
| 		LD	HL,BASE_ADDR		; FNMAIN
 | ||
| 		LD	DE,END_BLOCK_1 - START_BLOCK_1
 | ||
| 		LD	A,(MAIN.hFile)
 | ||
| 	SPDSS DSSF.READ
 | ||
| 		JP	C,disk_error
 | ||
| 		LD	A,(MAIN.FNFUNCT)
 | ||
| 	SETPORT WINSP.CPU3,,0
 | ||
| 		LD	HL,0xC000		; FNFUNCT
 | ||
| 		LD	DE,END_BLOCK_2 - START_BLOCK_2
 | ||
| 		LD	A,(MAIN.hFile)
 | ||
| 	SPDSS DSSF.READ
 | ||
| 		JP	C,disk_error
 | ||
| 		LD	A,(MAIN.FNVIEW)		; FNVIEW
 | ||
| 	SETPORT WINSP.CPU3,,0
 | ||
| 		LD	HL,0xC000
 | ||
| 		LD	DE,END_BLOCK_EDITOR - START_BLOCK_EDITOR
 | ||
| 		LD	A,(MAIN.hFile)
 | ||
| 	SPDSS DSSF.READ
 | ||
| 		JP	C,disk_error
 | ||
| 		LD	A,(MAIN.FNEDIT)		; FNEDIT
 | ||
| 	SETPORT WINSP.CPU3,,0
 | ||
| 		LD	HL,0xC000
 | ||
| 		LD	DE,END_BLOCK_VIEWER - START_BLOCK_VIEWER
 | ||
| 		LD	A,(MAIN.hFile)
 | ||
| 	SPDSS DSSF.READ
 | ||
| 		JP	C,disk_error
 | ||
| 		LD	A,(MAIN.FNHELP)		; FNHELP
 | ||
| 	SETPORT WINSP.CPU3,,0
 | ||
| 	SETPORT WINSP.CPU1,,0
 | ||
| 		LD	HL,0xC000
 | ||
| 		LD	DE,END_BLOCK_3 - START_BLOCK_3
 | ||
| 		LD	A,(MAIN.hFile)
 | ||
| 	SPDSS DSSF.READ
 | ||
| 		JP	C,disk_error
 | ||
| 		LD	A,(MAIN.FNFONT)		; FNFONT
 | ||
| 	SETPORT WINSP.CPU3,,0
 | ||
| 		LD	HL,0xFFFF - (IFFFONT_RAW_END - FONT_RAW_PACK)
 | ||
| 		LD	DE,END_BLOCK_4 - START_BLOCK_4
 | ||
| 		LD	A,(MAIN.hFile)
 | ||
| 	SPDSS DSSF.READ
 | ||
| 		JP	C,disk_error
 | ||
| 		LD	A,(MAIN.hFile)
 | ||
| 	SPDSS DSSF.CLOSE			; close file
 | ||
| ; à á¯ ª®¢ª  èà¨ä⮢
 | ||
| 		LD HL,0xFFFF - (IFFFONT_RAW_END - FONT_RAW_PACK)
 | ||
| 		LD DE,0xC000
 | ||
| 		CALL UNPACK
 | ||
| 		LD HL,0xFFFF - (IFFFONT_RAW_END - IFFFONT_RAW_PACK)
 | ||
| 		LD DE,0xDB00
 | ||
| 		CALL UNPACK
 | ||
| ; ¯¥à¥®á ¨ª®®ª ¬ëè¨   à ¡®ç¥¥ ¬¥áâ®
 | ||
| 		LD HL,Clock_BMP
 | ||
| 		LD DE,CLOCK_BMP
 | ||
| 		LD BC,CLOCK_BMP_Size + MOUSE_BMP_Size
 | ||
| 		LDIR
 | ||
| 		;!TEST				; !HARDCODE SYS_PAGE
 | ||
| 	SETPORT WINSP.CPU3,PAGE.SYSTEM;0xFE
 | ||
| 		LD	HL,0x0124 + CPU3	; !HARDCODE 
 | ||
| 		LD	(HL),0x38		; interrupt routine address Low byte
 | ||
| 		INC	HL
 | ||
| 		XOR	A
 | ||
| 		LD	(HL),A			; interrupt routine address High byte
 | ||
| 		INC	HL
 | ||
| 	GETPORT WINSP.CPU0
 | ||
| 		LD	(HL),A			; interrupt routine page
 | ||
| 		LD	A,(MAIN.FNMAIN)
 | ||
| 	SETPORT WINSP.CPU3,,0
 | ||
| 		LD	A,(MAIN.hMem)
 | ||
| 		LD	(RAMPAGES.FNPAGESID),A
 | ||
| 		LD	HL,MAIN.FNFUNCT
 | ||
| 		LD	DE,RAMPAGES.FNFUNCT
 | ||
| 		LD	BC,0x0005
 | ||
| 		LDIR
 | ||
| 		JP	BASE_ADDR
 | ||
| 
 | ||
| disk_error:	PUSH AF
 | ||
| 		LD	A,(MAIN.hMem)		; free memory
 | ||
| 	SPDSS DSSF.FREEMEM
 | ||
| 		LD	A,(MAIN.hFile)
 | ||
| 	SPDSS DSSF.CLOSE			; close file
 | ||
| 		LD	HL,MAIN.load_err_str
 | ||
| 	SPDSS DSSF.PCHARS			; print text
 | ||
| 		POP BC
 | ||
| 	SPDSS DSSF.EXIT				; exit
 | ||
| 
 | ||
| UNPACK		include dec40.a80
 | ||
| 
 | ||
| ; 14 x 9 = 126	    00   01   02   03   04   05   06   07   08   09   0A   0B   0C   0D
 | ||
| Clock_BMP:	DB 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE,0xFE ; 00
 | ||
| 		DB 0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF ; 01
 | ||
| 		DB 0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0xFF,0xFF,0x00,0xFE,0xFE,0xFE,0x00 ; 02
 | ||
| 		DB 0xFE,0x00,0xFF,0xFF,0xFF,0x00,0xFE,0xF0,0xFE,0x00,0xFF,0xFF,0xFF,0xFF ; 03
 | ||
| 		DB 0xFF,0x00,0xFE,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFE,0x00,0xFF ; 04
 | ||
| 		DB 0xFF,0xFF,0xFF,0xFF,0x00,0xFE,0xF0,0xFE,0x00,0xFF,0xFF,0xFF,0x00,0xFE ; 05
 | ||
| 		DB 0xFE,0xFE,0x00,0xFE,0x00,0xFF,0xFF,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00 ; 06
 | ||
| 		DB 0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0xFE ; 07
 | ||
| 		DB 0xFE,0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; 08
 | ||
| CLOCK_BMP_END
 | ||
| 
 | ||
| ; 13 x 9 = 117	    00   01   02   03   04   05   06   07   08   09   0A   0B   0C
 | ||
| Mouse_BMP:	DB 0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFE,0x00,0xFF ; 00
 | ||
| 		DB 0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xFE,0xFE,0x00,0xFF,0xFF,0xFF,0xFF ; 01
 | ||
| 		DB 0xFF,0x00,0xFE,0xFE,0xFE,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0xFE,0xFE ; 02
 | ||
| 		DB 0xFE,0xFE,0x00,0xFF,0xFF,0xFF,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0x00 ; 03
 | ||
| 		DB 0xFF,0xFF,0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0xFF,0x00,0xFE ; 04
 | ||
| 		DB 0xFE,0xFE,0xFE,0x00,0x00,0x00,0x00,0x00,0xFE,0xFE,0x00,0xFE,0x00 ; 05
 | ||
| 		DB 0xFF,0xFF,0xFF,0x00,0xFE,0x00,0x00,0xFE,0xFE,0x00,0xFF,0xFF,0x00 ; 06
 | ||
| 		DB 0x00,0xFF,0xFF,0x00,0xFE,0x00,0xFF,0xFF,0x00,0xFF,0xFF,0xFF,0x00 ; 07
 | ||
| 		DB 0xFE,0xFE,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFF,0xFF ; 08
 | ||
| MOUSE_BMP_END
 | ||
| 
 | ||
| MAIN
 | ||
| .hFile		db 0x00
 | ||
| .hMem		db 0x00
 | ||
| .FNMAIN		db 0x00
 | ||
| .FNFUNCT	db 0x00	; 00
 | ||
| .FNVIEW		db 0x00	; 01
 | ||
| .FNEDIT		db 0x00	; 02
 | ||
| .FNHELP		db 0x00	; 03
 | ||
| .FNFONT		db 0x00	; 04
 | ||
| 		DB 0xFF
 | ||
| 
 | ||
| .copyright_str:	DB "\r\nThe Flex Navigator, ver.\{FLEX_VERS.NAVIGATOR}\r\n",0
 | ||
| .incor_dos_str:	DZ "Incorrect DOS version, need DOS 1.00 or high.\r\n"
 | ||
| .no_memory_str:	DZ "Not enough memory to load program.\r\n"
 | ||
| .load_err_str:	DZ "Disk loading error.\r\n"
 | ||
| 
 | ||
| EXEend:
 | ||
| 
 | ||
| 		include fnmain.a80
 |