flex_nav/fn_exe_boot.a80
savelij13 499aa7968d - исправлена проверка запускаемого файла по расширению.
- доки переведены на UTF8 кодировку.
- поправлена CorrBigChar.
2025-06-24 21:36:47 +03:00

181 lines
5.3 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; LAST UPDATE: 05.06.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
HDR_EXE 0x8100,1,EXEend-EntryExec,EntryExec,EntryExec,0x80FF,0
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