181 lines
5.3 KiB
Plaintext
181 lines
5.3 KiB
Plaintext
|
||
; 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
|