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

208 lines
3.9 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.

;-------------------------------------------------
; ˆ­¨æ. ᯨ᮪ ⨯®¢ ¤¨áª®¢ á¨á⥬ë
; (¯®á«¥¤. ç¨â ¥â BPB ª ¦¤®£® ¤¨áª )
;-------------------------------------------------
init_list_types_drives:
ld a,(disk) ; ¤¨áª  ªâ. ¯ ­¥«¨
ld c,1 ; ãáâ. ¤¨áª
rst 10h
jr nc,init_list_types_drv1
; ¨á¯. ­®¬¥à boot-¤¨áª 
ld bc,0009h
rst 10h
ld (disk),a
; ã§­ âì ­®¬¥à ¯®á«. ¤¨áª  ¢ á¨á⥬¥
ld c,1 ; ãáâ. ¤¨áª
rst 10h
init_list_types_drv1:
ld (lastdrive),a ; ¯®á«¥¤. ¤¨áª ¢ á¨á⥬¥ (0..25)
cp 1+1
jr c,init_list_types_done ; ⮫쪮 A,B ¤¨áª¨
dec a
ld b,a
ld c,2 ; ­ ç âì á "C:"
ld hl,scan_code_letters+5 ; â ¡«¨æ  ¤¨áª®¢ á "C:"
make_dlist_loop:
push bc
push hl
; ¯à®ç¨â âì BPB ¤¨áª 
push bc
ld a,c ; ­®¬¥à ¤¨áª 
ld c,1 ; open device
rst 18h
pop bc
jr c,make_dlist_err
push bc
ld a,c
ld de,work_buffer ; ¡ãä¥à
ld c,4 ; get BPB
rst 18h
pop bc
jr c,make_dlist_err
ld a,c ; ­®¬¥à ¤¨áª 
ld c,2 ; close device
rst 18h
pop hl
pop bc
ld a,(work_buffer+21) ; ¡ ©â ä®à¬ â  ­®á¨â¥«ï
ld (hl),a
inc hl
inc hl ; á«¥¤. ï祩ª  ⨯  ¤¨áª 
inc c ; ++­®¬¥à ¤¨áª 
djnz make_dlist_loop
init_list_types_done:
; â¥áâ ­  ¤®áâ㯭®áâì ¤¨áª  ã ¯ áá. ¯ ­¥«¨
ld hl,disk1
ld a,(lastdrive)
dec a
cp (hl)
ret nc
ld (hl),a
ret
;
make_dlist_err:
pop hl
pop bc
jr init_list_types_done
;----------------------------------------------------------------------
; ‘âàãªâãà  á¯¨áª  ¬¥­î ¢ë¡®à  ¤¨áª®¢
; <­®¬¥à ¯ã­ªâ >, <¨¬ï ¯ã­ªâ ,0>, <᪥­-ª®¤ ¡ãª¢ë>, <­®¬¥à ª®­â¥ªáâ >
;----------------------------------------------------------------------
; db 0,"&A: removable",0
; db 1Dh ; ᪥­-ª®¤
; db CTnodef ; ª®­â¥ªáâ (­¥ ¨á¯.)
; ;
; db 1,"&B: removable",0
; db 2Eh
; db CTnodef
; ;
; db 2,"&C: fixed",0
; db 2Ch ; ᪥­-ª®¤
; db CTnodef
; ;
; db 3,"&D: CD-ROM",0
; db 1Fh
; db CTnodef
; ;
; db 4,"&E: RAM-disk",0
; db 12h
; db CTnodef
; ;
; db -1 ; ª®­¥æ ®¯¨á â¥«ï
;-------------------------------------------------
; ‘®§¤ âì ¢ ¡ãä¥à¥ áâàãªâãàã ᯨ᪠ ¤¨áª®¢
;-------------------------------------------------
make_struct_drives:
exx
ld hl,scan_code_letters ; ᯨ᮪ ᪥­-ª®¤®¢ ¡ãª¢
exx
ld a,(lastdrive)
ld b,a
ld c,0 ; A=0
ld hl,work_buffer
make_drives_loop:
ld (hl),c ; ­®¬¥à ¤¨áª  (ª®¬ ­¤ë)
inc hl
ld (hl),"&"
inc hl
ld a,"A"
add a,c
ld (hl),a
inc hl
ld (hl),":"
inc hl
ld (hl)," "
inc hl
exx
ld a,(hl) ; ᪥­-ª®¤
ex af,af'
inc hl
ld a,(hl) ; ⨯ ¤¨áª 
inc hl
exx
ld de,fix_drive ; ¢¨­â
cp 0F8h
jr z,make_drives_type
ld de,ram_drive ; ram-¤¨áª
cp 0FAh
jr z,make_drives_type
ld de,rem_drive ; ¤¨áª¥â 
cp 0F0h ; 1.44Mb
jr z,make_drives__
cp 0F9h ; 720kB
jr z,make_drives__
ld de,cd_drive ; cd-rom
jr make_drives_type
make_drives__:
ld a,c
cp 2 ; ¬¥­ìè¥ "C:" ?
jr c,make_drives_type
ld de,ram_drive ; ram-¤¨áª
make_drives_type:
; ᪮¯¨à. ⨯ ¤¨áª 
ld a,(de)
ld (hl),a
inc hl
inc de
or a
jr nz,$-5
ex af,af'
ld (hl),a ; ᪥­-ª®¤
inc hl
inc hl ; ¯à®©â¨ ª®­â¥ªáâ
inc c ; ++­®¬¥à ¤¨áª 
djnz make_drives_loop
ld (hl),-1 ; ª®­¥æ ᯨ᪠
; ­ áâநâì Y ¯®«®¦. ¬¥­î ®â ç¨á«  ¤¨áª®¢
ld c,5 ; Y ¯®«®¦. ¬¥­î
ld a,(lastdrive) ; 0..25
cp 14+1
jr c,$+9
dec c
cp 18+1
jr c,$+4
ld c,2
ld a,c
ld (table_left_drive+1),a
ld (table_right_drive+1),a
ret
; ’ ¡«¨æ  ¡ãª¢ ¤¨áª®¢
; <᪥­-ª®¤>, <¡ ©â ä®à¬ â  ¤¨áª >
scan_code_letters:
db 1Dh,0F0h ; A
db 2Eh,0F0h ; B
db 2Ch,0F8h ; C
db 1Fh,0F8h ; D
db 12h,0F8h ; E
db 20h,0F8h ; F
db 21h,0F8h ; G
db 22h,0F8h ; H
db 17h,0F8h ; I
db 23h,0F8h ; J
db 24h,0F8h ; K
db 25h,0F8h ; L
db 30h,0F8h ; M
db 2Fh,0F8h ; N
db 18h,0F8h ; O
db 19h,0F8h ; P
db 10h,0F8h ; Q
db 13h,0F8h ; R
db 1Eh,0F8h ; S
db 14h,0F8h ; T
db 16h,0F8h ; U
db 2Dh,0F8h ; V
db 11h,0F8h ; W
db 2Bh,0F8h ; X
db 15h,0F8h ; Y
db 2Ah,0F8h ; Z