File-Manager/FM.ASM
2025-04-04 00:37:36 +10:00

254 lines
5.5 KiB
NASM
Executable File
Raw 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.

; ‡ £àã§ç¨ª ”Œ
include 'shared_includes/constants/Sp2000.inc'
include 'shared_includes/constants/bios_equ.inc'
include 'shared_includes/constants/dss_equ.inc'
include 'version.inc' ; ¢¥àá¨ï ¬¥­¥¤¦¥à 
; include 'fm.exp' ; ᮤ¥à¦¨â "@label" ¬¥âª¨
org 4100h
db "EXE" ; exe ID
db 0 ; exe ¢¥àá¨ï
dw 512 ; 512, ¬«. ᬥé. ª®¤ 
dw 0 ; áâ. ᬥé. ª®¤ 
dw end_loader - entry ; end-beg, ¯¥à¢¨ç­ë© § £àã§ç¨ª
dw 0,0,0 ; १¥à¢
dw entry ;  ¤à¥á § £à㧪¨ ª®¤ 
dw start ;  ¤à¥á ¯¥à¥¤ ç¨ ã¯à ¢«¥­¨ï
dw start ;  ¤à¥á á⥪ 
ds 490
entry: db "The File Manager, Version "
db major_version + "0"
db "."
db (minor_version / 10) + "0"
db (minor_version % 10) + "0"
db " Copyright (c) 2005-2007 by Vasil Ivanov."
start:
; ®ç¨áâ¨âì ¡ãä¥à ª« ¢ë
ld bc,3135h
rst ToDSS
di
; á®åà. §­ ç¥­¨¥ ¯®à⮢
in a,(SLOT0)
ld (port_82__),a
in a,(SLOT3)
ld (port_E2__),a
in a,(89h)
ld (port_89__),a
; á®åà. ¤¥áªà¨¯â®à ¬¥­¥¤¦¥à 
ld a,(ix-3)
ld (hFile),a
; § ªàëâì ᯥª. íªà ­
ld a,0C0h
out (89h),a
; ¢ë¤¥«¨âì 10 áâà. ¯ ¬ïâ¨
ld bc,0A3Dh
rst ToDSS
jr nc,ok_malloc ; Ok
ld a,(hFile) ; ⥪. ¤¥áªà¨¯â®à
ld c,12h ; § ªàëâì exe-ä ©«
rst ToDSS
ld hl,no_space ; ­¥â ¯ ¬ïâ¨
abort: ei
ld c,5Ch
rst ToDSS
ld bc,0FF41h ; ¢ë室 ¢ „Ž‘
rst ToDSS
ret
ok_malloc: ld (id_block__),a ; åí­¤« ¢ë¤¥«. ¡«®ª  ¯ ¬ïâ¨
; ¯®«ãç¨âì ᯨ᮪ áâà ­¨æ
ld hl,page_sys_screen__
ld c,0C5h
rst 08h
; ã§­ âì ¢¥àá¨î „Ž‘
ld c,0
rst ToDSS
ld hl,013Ch ; 1.60
and a
sbc hl,de
call nc,setup_znak ; =< 1.60 ãáâ. §­ ª®£¥­. 19h/1Ah
; à á¯ ª®¢ âì ¬®¤ã«ì 1
;...
; § £à㧨âì ®á­. ª®¤ ¬¥­¥¤¦¥à 
ld a,(page_manager__) ; à ¡®â ¥â ¢ #8000
out (SLOT3),a
ld hl,0C000h
ld de,len_modul1 ; à §¬¥à ¬®¤ã«ï 1
ld a,(hFile)
ld c,13h
rst ToDSS
jp c,read_error
; à á¯ ª®¢ âì ¬®¤ã«ì 2
;...
; § £à. ¤à ©¢¥àë ª« ¢ë/¬ë誨, ®¡à ¡®â稪¨ ®¡ê¥ªâ®¢ ¨ ¤¨ «. ®ª®­
ld a,(page_module0__) ; à ¡®â ¥â ¢ #0000
out (SLOT3),a
ld hl,0C000h
ld de,len_modul2 ; à §¬¥à ¬®¤ã«ï 2
ld a,(hFile)
ld c,13h
rst ToDSS
jp c,read_error
ld a,(page_spec__)
ld (0C02Ah),a ; á®åà. ᯥª-áâà ­¨æã (vectors.asm)
; à á¯ ª®¢ âì ¬®¤ã«ì 3
;...
; § £à㧨âì ®¯¨á â¥«¨ ¯ ­¥«¥©
ld a,(page_module1__)
out (SLOT3),a
ld hl,0C000h
ld de,len_modul3 ; à §¬¥à ¬®¤ã«ï 3
ld a,(hFile)
ld c,13h
rst ToDSS
jp c,read_error
; à á¯ ª®¢ âì ¬®¤ã«ì 4
;...
; § £à㧨âì ᯥª-ª®¤
ld a,(page_spec__)
out (SLOT3),a
ld hl,0C000h
ld de,len_modul4 ; à §¬¥à ¬®¤ã«ï 4
ld a,(hFile)
ld c,13h
rst ToDSS
jp c,read_error
ld a,(page_module0__)
ld (0C02Ah),a ; á®åà. ä¬-áâà ­¨æã (vect.asm)
; à á¯ ª®¢ âì ¬®¤ã«ì 5
;...
; § £à㧨âì ¢ìî¥à
ld a,(page_viewer__)
out (SLOT3),a
ld hl,0C000h
ld de,len_modul5 ; à §¬¥à ¢ìî¥à 
ld a,(hFile)
ld c,13h
rst ToDSS
jp c,read_error
;
; § ªàëâì exe-ä ©« ¬¥­¥¤¦¥à 
hFile+1: ld a,0 ; á®åà. ¤¥áªà¨¯â®à ¬¥­¥¤¦¥à 
ld c,12h
rst ToDSS
; ¢ª«. ¢ #8000 ®á­. ª®¤ ”Œ
ld a,(page_manager__)
out (SLOT2),a
; ¯¥à¥ª ç âì åí­¤«ë áâà ­¨æ
ld hl,id_block__ ; ®âªã¤ 
ld de,id_block ; ªã¤ 
ld bc,pages_end - id_block__
ldir
;
ld sp,stack ; á⥪ ”Œ
; ­¥ ¬¥­ïâì ¯®«®¦. ¬ë誨 ”Œ
ld c,3 ; ã§­ âì áâ âãá ¬ë誨
rst 30h
ld (Xcoord),hl ; ª®®à¤¨­ â  X (0..639)
ld (Ycoord),de ; ª®®à¤¨­ â  Y (0..255)
jp 8000h ; ¯¥à¥©â¨ ­  ¯à®£à ¬¬ã
; •í­¤«ë áâà ­¨æ ¬¥­¥¤¦¥à 
id_block__: db -1 ; ¤¥áªà¨¯â®à ¢ë¤¥«. ¡«®ª  ¯ ¬ïâ¨
;
page_sys_screen__:
db -1 ; +#0000 á¨áâ.íªà ­, +#1400 íªà ­ ”Œ
page_dial_screen__:
db -1 ; ¡ãä¥à á®åà. ¤¨ «. ®ª®­ ¨ ¢¥àâ. ¬¥­î
page_left_dir__:
db -1 ; ᯨ᮪ «¥¢®© ¯ ­¥«¨
page_right_dir__:
db -1 ; ᯨ᮪ ¯à ¢®© ¯ ­¥«¨
page_manager__:
db -1 ; ®á­. ª®¤ ¬¥­¥¤¦¥à 
page_module0__: db -1 ; ¤à ©¢¥àë ª« ¢ë, ¬ë誨, ¤¨ «. ª®¤ á ®¡à ¡.
page_module1__: db -1 ; ®¯¨á â¥«¨ ¯ ­¥«¥©
page_spec__: db -1 ; áâà ­¨æ  à §¡®à  ᯥª-ä㭪権
page_viewer__: db -1 ; áâà ­¨æ  ¢ìî¥à 
db -1
db 0 ; á⮯-¡ ©â
;
port_82__: db -1 ; á®åà. ¯®àâ 82h
port_E2__: db -1 ; á®åà. ¯®àâ 0E2h
port_89__: db -1 ; á®åà. ¯®àâ 89h
pages_end:
; ®è¨¡ª  § £à㧪¨ ¬¥­¥¤¦¥à 
read_error: ld a,(id_block__)
ld c,3Eh ; ®á¢®¡. ¢ë¤¥«. ¡«®ª ¯ ¬ïâ¨
rst ToDSS
ld a,(hFile)
ld c,12h ; § ªàëâì ä ©«
rst ToDSS
ld hl,load_err
jp abort
no_space: db "Not enough memory to run program !",0Dh,0Ah,0
load_err: db "Disk loading error !",0Dh,0Ah,0
; <20>®¤£®â®¢¨âì §­ ª®£¥­. ¤«ï á®äâ. ªãàá®à 
setup_znak: ld a,(page_manager__) ; ¢à¥¬. ¡ãä¥à
out (SLOT2),a
; ¯®«ãç¨âì á¨áâ. §­ ª®£¥­.
ld de,8000h ; ¡ãä¥à ¤«ï 2048 ¡ ©â ¤ ­­ëå
push de
ld c,0B8h ; ¯®«ãç¨âì §­ ª®£¥­.
rst 08h
; § ¯®«­¨âì ª®¤®¬ 0FFh 2 ­¨¦­¨¥ «¨­¨¨
ld hl,8000h+(2048-(2*256)) ; ¯®á«¥¤­¨¥ 512 ¡ ©â
ld bc,511
ld a,1Ah ; ­®¬¥à §­ ª®£¥­.
call fill_data_font
pop hl
; § ¯®«­¨âì ®áâ «ì­ë¥ 6 «¨­¨© (¯®«­ë© ¡«®ª)
ld bc,2048-513
ld a,19h ; ­®¬¥à §­ ª®£¥­.
; <20> áâனª  §­ ª®£¥­. ¨ ¥£® ॣ¨áâà æ¨ï
; ¢å®¤: a=­®¬¥à §­ ª®£¥­.
; hl=¤ ­­ë¥
; bc=à §¬¥à ¤ ­­ëå
fill_data_font: ld e,l
ld d,h
ld (hl),-1
inc de
ldir
ld de,8000h ; §­ ª®£¥­.
ld c,0B6h ; ãáâ. §­ ª®£¥­.
rst 08h
ret
; ¤¥¯ ª¥à
;...
; Š®­¥æ § £àã§ç¨ª 
end_loader:
;-------------------------------------------------
; Š®¤ ¬¥­¥¤¦¥à 
;-------------------------------------------------
; incbin 'Build/fm.bin'
include 'main.asm'