mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-21 12:18:54 +03:00
Release DSS v1.71.57, Shell v1.2.522
This commit is contained in:
commit
607856305f
706
BOOT/BOOT.ASM
706
BOOT/BOOT.ASM
@ -1,706 +0,0 @@
|
|||||||
; <20>®á«¥¤ïï । ªæ¨ï: 25.04.2006
|
|
||||||
|
|
||||||
; <20>à®£à ¬¬ § ¯¨á¨ FDD/HDD boot-§ £àã§ç¨ª ¨ ä ©«®¢ á¨á⥬ë.
|
|
||||||
;
|
|
||||||
; ‡ £à㦠¥â á¨áâ. ä ©«ë ¨§ ª®àï ¤¨áª , á ª®â®à®£® ¡ë«
|
|
||||||
; § £à㦥 á¨á⥬ .
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
; ”¨âç¨ ¯à®£à ¬¬ë:
|
|
||||||
; ‚ ®â«¨ç¨¥ ®â ®à¨£¨ «ì®£® boot-¨áâ ««ïâ®à , íâ ¬®¦¥â
|
|
||||||
; ¯¥à¥¯¨áë¢ âì 㦥 ãáâ ®¢«¥ë© boot-§ £àã§ç¨ª.
|
|
||||||
; ” ©«ë á¨á⥬ë (system.dos, system.exe) ¬®£ãâ ¨¬¥âì
|
|
||||||
; «î¡ë¥ à §¬¥àë.
|
|
||||||
; <20>ਠ§ £à㧪¥ ª®¬¯ìîâ¥à á ¤¨áª¥âë, § ¯à 訢 ¥âáï ®¢ ï
|
|
||||||
; ¤¨áª¥â ¤«ï á®§¤ ¨ï ¨§ ¥¥ § £à㧮箩.
|
|
||||||
;
|
|
||||||
;
|
|
||||||
include 'shared_includes/constants/sp2000.inc'
|
|
||||||
include 'shared_includes/constants/bios_equ.inc'
|
|
||||||
include 'shared_includes/constants/dss_equ.inc'
|
|
||||||
include 'shared_includes/macroses/accelerator.z80'
|
|
||||||
include 'shared_includes/macroses/macros.z80'
|
|
||||||
include 'shared_includes/structures/FileSystem.inc'
|
|
||||||
|
|
||||||
DEFINE EXEinfoMACRO 1
|
|
||||||
MACRO _mEXEinfo
|
|
||||||
BLOCK 10,' ' ; ‚ëà ¢¨¢ ¨¥ ¤«ï ªà ᨢ®£® ®â®¡à ¦¥¨ï ¢ HEX
|
|
||||||
BYTE ' Bootloader '
|
|
||||||
BYTE ' installer '
|
|
||||||
BYTE ' for DSS. '
|
|
||||||
BYTE ' Vasil Ivanov, '
|
|
||||||
BYTE ' Anatoliy '
|
|
||||||
BYTE ' Belyanskiy. '
|
|
||||||
BYTE ' Sprinter Team, '
|
|
||||||
BYTE ' 2023 '
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
|
|
||||||
; ¢¥àá¨ï ¯à®£à ¬¬ë
|
|
||||||
major_version equ 1 ; áâ. ®¬¥à ¢¥àᨨ
|
|
||||||
minor_version equ 5 ; ¬«. ®¬¥à
|
|
||||||
;;
|
|
||||||
|
|
||||||
org_addr EQU #8000 + CLP_Buffer
|
|
||||||
code_addr EQU BEGIN
|
|
||||||
program_start EQU BEGIN
|
|
||||||
stack_point EQU #C000
|
|
||||||
Loader_length EQU 0
|
|
||||||
|
|
||||||
;
|
|
||||||
page_buffer equ 0C000h ; ¡ãä¥à ä ©«®¢
|
|
||||||
;;
|
|
||||||
|
|
||||||
include 'Shared_Includes/constants/EXE_Header.z80'
|
|
||||||
|
|
||||||
ORG org_addr
|
|
||||||
BEGIN: in a,(SLOT3)
|
|
||||||
ld (port+1),a ; á®åà. ¯®àâ
|
|
||||||
push ix
|
|
||||||
call save_path ; á®åà. ⥪. ¤¨áª ¨ ¯ãâì
|
|
||||||
ld c,0 ; ã§ âì ¢¥àá¨î „Ž‘
|
|
||||||
rst 10h
|
|
||||||
ex de,hl ; hl=⥪. ¢¥àá¨ï
|
|
||||||
ld de,013Ch ; 1.60 d=¢¥àá¨ï, e=¬®¤¨ä¨ª æ¨ï, bc - ®¬¥à ᡮન. de = #013E, bc = #0064 dos ver 1.62.100
|
|
||||||
and a
|
|
||||||
sbc hl,de
|
|
||||||
jr nc,version_ok
|
|
||||||
pop hl
|
|
||||||
ld a,9 ; ¨¤¥ªá áâப¨ "Error: Need DSS version 1.60..."
|
|
||||||
call print_string
|
|
||||||
ld a,-1
|
|
||||||
jp exit
|
|
||||||
|
|
||||||
version_ok: xor a ; ¨¤¥ªá áâப¨ â¨â«
|
|
||||||
call print_string
|
|
||||||
pop hl ; ª®¬-áâப
|
|
||||||
; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
|
|
||||||
call get_drive_letter
|
|
||||||
jp c,help ; ¥â ¯ à ¬¥â஢
|
|
||||||
ld (disk),a ; § ¤ ë© ®¬¥à ¤¨áª
|
|
||||||
; ã§ âì ®¬¥à boot-¤¨áª á¨á⥬ë
|
|
||||||
ld bc,0009h
|
|
||||||
rst 10h
|
|
||||||
ld (boot_disk),a ; ¤¨áª (A=0,B=1,..)
|
|
||||||
; ¯à®¢¥à¨âì ᮢ¯ ¤¥¨¥ ¤¨áª®¢
|
|
||||||
ld hl,disk
|
|
||||||
cp (hl)
|
|
||||||
jr nz,.next
|
|
||||||
ld hl,confirm_flag
|
|
||||||
ld (hl),1 ; ãáâ. ä« £
|
|
||||||
;
|
|
||||||
; —⥨¥ ¢ ¡ ª¨ ä ©«®¢ á¨á⥬ë
|
|
||||||
;
|
|
||||||
.next: ld a,(boot_disk) ; ¤¨áª § £à㧪¨ Ž‘
|
|
||||||
ld hl,root_path ; "X:\" ª®à¥ì ¤¨áª
|
|
||||||
add a,'A'
|
|
||||||
ld (hl),a
|
|
||||||
ld c,1Dh ; ᬥ ª â «®£
|
|
||||||
rst 10h
|
|
||||||
;--------------------------------------------
|
|
||||||
; —⥨¥ ä ©« system.exe
|
|
||||||
;--------------------------------------------
|
|
||||||
ld hl,name2 ; ¨¬ï ä ©«
|
|
||||||
call read_file ; ¢áï à ¡®â ¯® § £à㧪¥ ä ©« ¢ áâà ¨æë
|
|
||||||
jr nc,read_file1_ok
|
|
||||||
; ®á¢®¡. ¡«®ª ¯ ¬ïâ¨
|
|
||||||
read_file_err: ld a,(id_blck) ; ¨¤¥â¨ä. ¡«®ª ¯ ¬ïâ¨
|
|
||||||
ld c,3Eh
|
|
||||||
rst 10h
|
|
||||||
ld a,-1 ; ª®¤ ®è¨¡ª¨
|
|
||||||
jp exit
|
|
||||||
|
|
||||||
; á®åà. à ¡. ï祩ª¨ ä ©« system.exe
|
|
||||||
read_file1_ok: ld hl,file_handle ; ®âªã¤
|
|
||||||
ld de,hFile1 ; ªã¤
|
|
||||||
ld bc,6
|
|
||||||
ldir
|
|
||||||
;--------------------------------------------
|
|
||||||
; —⥨¥ ä ©« system.dos
|
|
||||||
;--------------------------------------------
|
|
||||||
ld hl,name1 ; ¨¬ï ä ©«
|
|
||||||
call read_file ; ¢áï à ¡®â ¯® § £à㧪¥ ä ©« ¢ áâà ¨æë
|
|
||||||
jr nc,read_file2_ok
|
|
||||||
; ®á¢®¡. ¡«®ª ¯ ¬ï⨠system.exe
|
|
||||||
file_err1: ld a,(id_mem) ; ¨¤¥â¨ä. ¡«®ª ¯ ¬ïâ¨
|
|
||||||
ld c,3Eh
|
|
||||||
rst 10h
|
|
||||||
jr read_file_err ; ®á¢®¡. ¡«®ª ¯ ¬ï⨠system.dos
|
|
||||||
|
|
||||||
read_file2_ok:
|
|
||||||
confirm_flag+*: ld a,0
|
|
||||||
or a
|
|
||||||
jr z,no_confirm
|
|
||||||
ld a,(boot_disk) ; á¨áâ. ¤¨áª
|
|
||||||
cp 2
|
|
||||||
jr nc,no_confirm ; ¥ ¤¨áª®¢®¤ë
|
|
||||||
; § ¯à®á¨âì æ¥«¥¢®© ¤¨áª
|
|
||||||
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
|
||||||
add a,'A'
|
|
||||||
ld (lett2),a
|
|
||||||
ld a,5 ; ¨¤¥ªá áâப¨ "Insert destination disk..."
|
|
||||||
call print_string
|
|
||||||
ld bc,3035h ; ¦¤¥¬ ¦ â¨ï ª« ¢¨è¨
|
|
||||||
rst 10h
|
|
||||||
no_confirm: ld a,2 ; ¨¤¥ªá áâப¨ "Installing boot loader..."
|
|
||||||
call print_string
|
|
||||||
; “áâ. 楫¥¢®© ¤¨áª/¯ãâì
|
|
||||||
ld a,(disk) ; 楫¥¢®© ¤¨áª
|
|
||||||
ld hl,root_path ; "X:\" áâப ¯ãâ¨
|
|
||||||
add a,'A'
|
|
||||||
ld (hl),a
|
|
||||||
ld c,1Dh ; ᬥ ⥪. ª â «®£
|
|
||||||
rst 10h
|
|
||||||
;--------------------------------------------
|
|
||||||
; ‡ ¯¨á âì boot-§ £àã§ç¨ª
|
|
||||||
call write_boot_loader
|
|
||||||
jr c,write_error ; ®è¨¡ª à ¡®âë á ¤¥¢ ©á®¬
|
|
||||||
;
|
|
||||||
ld a,3 ; ¨¤¥ªá áâப¨ "Writing system files..."
|
|
||||||
call print_string
|
|
||||||
; ‡ ¯¨áì ä ©« system.dos
|
|
||||||
ld hl,name1 ; ¨¬ï ä ©«
|
|
||||||
call write_file
|
|
||||||
jr nc,ok_write1
|
|
||||||
jr file_err1
|
|
||||||
;
|
|
||||||
ok_write1: ; ®á¢®¡®¤¨âì ¯ ¬ïâì
|
|
||||||
ld a,(id_blck) ; ¡«®ª system.dos
|
|
||||||
ld c,3Eh
|
|
||||||
rst 10h
|
|
||||||
;
|
|
||||||
; § £à. à ¡. ï祩ª¨
|
|
||||||
ld hl,hFile1 ; ®âªã¤
|
|
||||||
ld de,file_handle ; ªã¤
|
|
||||||
ld bc,6
|
|
||||||
ldir
|
|
||||||
; ‡ ¯¨áì ä ©« system.exe
|
|
||||||
ld hl,name2 ; ¨¬ï ä ©«
|
|
||||||
call write_file
|
|
||||||
; ®á¢®¡®¤¨âì ¯ ¬ïâì
|
|
||||||
push af
|
|
||||||
ld a,(id_blck) ; ¡«®ª system.exe
|
|
||||||
ld c,3Eh
|
|
||||||
rst 10h
|
|
||||||
pop af
|
|
||||||
jr c,exit ; ®è¨¡ª
|
|
||||||
;
|
|
||||||
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
|
||||||
add a,'A'
|
|
||||||
ld (lett1),a
|
|
||||||
ld a,1 ; ¨¤¥ªá áâப¨ "System installed on disk "
|
|
||||||
call print_string
|
|
||||||
ld a,(confirm_flag)
|
|
||||||
or a
|
|
||||||
jr z,exit
|
|
||||||
; § ¯à®á¨âì á¨áâ¥¬ë© ¤¨áª
|
|
||||||
ld a,(boot_disk) ; á¨áâ. ¤¨áª
|
|
||||||
cp 2
|
|
||||||
jr nc,exit-1 ; ¥ ¤¨áª®¢®¤ë
|
|
||||||
add a,'A'
|
|
||||||
ld (lett3),a
|
|
||||||
ld a,6 ; ¨¤¥ªá áâப¨ "Insert system disk..."
|
|
||||||
call print_string
|
|
||||||
ld bc,3035h ; ¦¤¥¬ ¦ â¨ï ª« ¢¨è¨
|
|
||||||
rst 10h
|
|
||||||
xor a ; ª®¤ "Ok"
|
|
||||||
exit: push af
|
|
||||||
call restore_path ; ¢®ááâ. ⥪. ¤¨áª ¨ ¯ãâì
|
|
||||||
port: ld a,-1 ; á®åà. ¯®àâ
|
|
||||||
out (SLOT3),a
|
|
||||||
pop af
|
|
||||||
ld c,41h ; ¢ë室 ¢ „Ž‘
|
|
||||||
ld b,a
|
|
||||||
rst 10h
|
|
||||||
jr $
|
|
||||||
|
|
||||||
|
|
||||||
help: ld a,8 ; ¨¤¥ªá áâப¨ "Invalid drive specification"
|
|
||||||
call print_string
|
|
||||||
ld a,4 ; ¨¤¥ªá áâப¨ åí«¯
|
|
||||||
err_mes: call print_string
|
|
||||||
ld a,1 ; ª®¤ ®è¨¡ª¨
|
|
||||||
jr exit
|
|
||||||
|
|
||||||
write_error: ld a,7 ; ¨¤¥ªá áâப¨ "Can't install boot on this disk"
|
|
||||||
jr err_mes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
root_path: db 'X:\',0 ; ¯ãâì
|
|
||||||
|
|
||||||
name1: db "SYSTEM.DOS",0
|
|
||||||
name2: db "SYSTEM.EXE",0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;-------------------------------------------------
|
|
||||||
; ‡ ¯¨á âì boot-§ £àã§ç¨ª FDD/HDD
|
|
||||||
; ¢å®¤: ¥â
|
|
||||||
; ¢ë室: CF - ®è¨¡ª à ¡®âë á ¤¥¢ ©á®¬
|
|
||||||
;-------------------------------------------------
|
|
||||||
write_boot_loader:
|
|
||||||
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
|
||||||
ld c,1 ; open device
|
|
||||||
rst 18h
|
|
||||||
ret c
|
|
||||||
ld hl,close_device ; â®çª ¢ë室
|
|
||||||
push hl
|
|
||||||
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
|
||||||
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
|
||||||
ld ix,0 ; ¬«. à §àï¤
|
|
||||||
ld de,buffer ; ªã¤
|
|
||||||
ld bc,0105h ; ¯à®ç¨â âì 1 ᥪâ®à (boot)
|
|
||||||
rst 18h
|
|
||||||
ret c ; ®è¨¡ª ç⥨ï
|
|
||||||
ld a,(buffer+21) ; ¡ ©â ä®à¬ â
|
|
||||||
cp 0F0h ; 1.44Mb
|
|
||||||
ret c ; ¥§ ª®¬ë© ä®à¬ â
|
|
||||||
jr z,write_to_floppy
|
|
||||||
cp 0F9h ; 720kB
|
|
||||||
jr z,write_to_floppy
|
|
||||||
cp 0FAh ; RAM disk
|
|
||||||
jr z,write_to_ram_disk
|
|
||||||
; pop hl ; ¢®ááâ. ¡ « á á⥪
|
|
||||||
; call close_device
|
|
||||||
cp 0F8h ; ¢¨â
|
|
||||||
jr z,write_to_hard_disk
|
|
||||||
scf ; ¥§ ª®¬ë© ä®à¬ â
|
|
||||||
ret
|
|
||||||
|
|
||||||
; § ªàëâì ¤¥¢ ©á
|
|
||||||
close_device: push af ; á®åà. ä« £
|
|
||||||
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
|
||||||
ld c,2 ; close device
|
|
||||||
rst 18h
|
|
||||||
pop af
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
;-------------------------------------------------
|
|
||||||
; ‡ ¯¨áì boot-§ £àã§ç¨ª ¤¨áª¥âã
|
|
||||||
;
|
|
||||||
; ¢å®¤: ¤ ë¥ ¨§ buffer
|
|
||||||
; ¢ë室: CF - ¯à¨ ®è¨¡ª¥ § ¯¨á¨
|
|
||||||
;-------------------------------------------------
|
|
||||||
write_to_floppy:
|
|
||||||
ld a,(buffer+16) ; ç¨á«® ª®¯¨© FAT-®¢
|
|
||||||
or a
|
|
||||||
scf
|
|
||||||
ret z ; ®è¨¡ª
|
|
||||||
dec a ; --ç¨á«® ª®¯¨©
|
|
||||||
jr z,overwrite_floppy ; § £àã§ç¨ª 㦥 § ¯¨á , ¯¥à¥§ ¯¨á âì ¥£®
|
|
||||||
; áâநâì ï祩ª¨ boot-ᥪâ®à
|
|
||||||
ld (buffer+16),a ; ç¨á«® ª®¯¨© FAT-®¢
|
|
||||||
ld hl,(buffer+14) ; § १¥à¢. ᥪâ®à®¢
|
|
||||||
ld bc,(buffer+22) ; ᥪâ®à®¢ FAT
|
|
||||||
ld a,b
|
|
||||||
or c
|
|
||||||
scf
|
|
||||||
ret z ; 0 ᥪâ®à®¢ FAT
|
|
||||||
add hl,bc
|
|
||||||
ld (buffer+14),hl ; § १¥à¢. ᥪâ®à®¢
|
|
||||||
overwrite_floppy:
|
|
||||||
; § ¯¨á âì boot-ᥪâ®à § ¤
|
|
||||||
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
|
||||||
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
|
||||||
ld ix,0 ; ¬«. à §àï¤
|
|
||||||
ld de,buffer ; ®âªã¤
|
|
||||||
ld bc,0106h ; § ¯¨á âì 1 ᥪâ®à
|
|
||||||
rst 18h
|
|
||||||
ret c ; ®è¨¡ª § ¯¨á¨
|
|
||||||
; § ¯¨á âì § £àã§ç¨ª
|
|
||||||
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
|
||||||
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
|
||||||
ld ix,1 ; ¬«. à §àï¤
|
|
||||||
ld de,code_loader ; ®âªã¤ (ª®¤ § £àã§ç¨ª )
|
|
||||||
ld bc,0306h ; § ¯¨á âì 3 ᥪâ®à (à §¬¥à § £à.)
|
|
||||||
rst 18h
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
;-------------------------------------------------
|
|
||||||
; ‡ ¯¨áì boot-§ £àã§ç¨ª ¤à ©¢
|
|
||||||
;
|
|
||||||
; ¢å®¤: ¥â
|
|
||||||
; ¢ë室: CF-®è¨¡ª § ¯¨á¨
|
|
||||||
;-------------------------------------------------
|
|
||||||
|
|
||||||
write_to_ram_disk:
|
|
||||||
write_to_hard_disk:
|
|
||||||
ld a,(disk) ; ®¬¥à § ¤ ®£® ¤¨áª
|
|
||||||
ld de,#55AA
|
|
||||||
ld bc,0 * 256 + 8
|
|
||||||
rst #18
|
|
||||||
ex af,af'
|
|
||||||
|
|
||||||
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
|
||||||
ld ix,1 ; ¬«. à §àï¤
|
|
||||||
ld de,code_loader ; ®âªã¤ (ª®¤ § £àã§ç¨ª )
|
|
||||||
ld bc,3*256 + BIOS.DRV_WRITE ; § ¯¨á âì 3 ᥪâ®à (à §¬¥à § £à.)
|
|
||||||
rst 08h
|
|
||||||
ret
|
|
||||||
|
|
||||||
;-------------------------------------------------
|
|
||||||
; ‚뤥«¨âì § ¤ ë© ¤¨áª ¨§ ª®¬-áâப¨
|
|
||||||
;
|
|
||||||
; ¢å®¤: hl=¡ãä¥à áâப¨
|
|
||||||
; ¢ë室: a=®¬¥à ¤¨áª
|
|
||||||
; CF-¯à¨ ®è¨¡ª¥
|
|
||||||
;-------------------------------------------------
|
|
||||||
get_drive_letter:
|
|
||||||
inc hl ; ¡ãä¥à áâப¨
|
|
||||||
ld de,buffer ; ¡ãä¥à ¤«ï ¢ë¤¥«. ¯ à ¬¥âà
|
|
||||||
ld c,43h ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬. áâப¨
|
|
||||||
rst 10h
|
|
||||||
ld de,buffer
|
|
||||||
ld a,(de)
|
|
||||||
inc de
|
|
||||||
ld c,a ; á®åà. 'a'
|
|
||||||
ld a,(de)
|
|
||||||
inc de
|
|
||||||
cp ':'
|
|
||||||
jr nz,get_drive_err ; ¤¨áª ¥ § ¤
|
|
||||||
ld a,(de)
|
|
||||||
inc de
|
|
||||||
or a
|
|
||||||
jr nz,get_drive_err ; > 1 ¯ à ¬¥âà
|
|
||||||
ld a,c ; ¢®ááâ. 'a'
|
|
||||||
cp 'A'
|
|
||||||
jr c,get_drive_err
|
|
||||||
cp 'z'+1
|
|
||||||
jr nc,get_drive_err
|
|
||||||
res 5,a
|
|
||||||
sub 'A'
|
|
||||||
or a
|
|
||||||
ret
|
|
||||||
;
|
|
||||||
get_drive_err: scf ; ®è¨¡ª
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------
|
|
||||||
; á®åà. ⥪. á¨áâ¥¬ë© ¤¨áª ¨ ¯ãâì
|
|
||||||
;----------------------------------------------------
|
|
||||||
save_path: ld c,2 ; ã§ âì ¤¨áª
|
|
||||||
rst 10h
|
|
||||||
ld (sys_disk),a
|
|
||||||
ld hl,sys_path
|
|
||||||
ld c,1Eh ; ã§ âì ¯ãâì
|
|
||||||
rst 10h
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------
|
|
||||||
; ¢®ááâ. ⥪. á¨áâ¥¬ë© ¤¨áª ¨ ¯ãâì
|
|
||||||
;----------------------------------------------------
|
|
||||||
restore_path: ld a,(sys_disk)
|
|
||||||
ld c,1 ; ᬥ ¤¨áª
|
|
||||||
rst 10h
|
|
||||||
ld hl,sys_path
|
|
||||||
ld c,1Dh ; ᬥ ¯ãâ¨
|
|
||||||
rst 10h
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
disk: db 0 ; ®¬¥à § ¤ ®£® ¤¨áª
|
|
||||||
boot_disk: db 0 ; ®¬¥à boot-¤¨áª á¨á⥬ë
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; à ¡. ï祩ª¨ ⥪. ä ©«
|
|
||||||
;
|
|
||||||
; ç⥨¥: system.exe, ¤ «¥¥ system.dos
|
|
||||||
; § ¯¨áì: system.dos, ¤ «¥¥ system.exe
|
|
||||||
file_handle: db -1 ; ¤¥áªà¨¯â®à ä ©«
|
|
||||||
id_blck: db -1 ; ¨¤¥â¨ä. ¢ë¤¥«. ¡«®ª ¯ ¬ïâ¨
|
|
||||||
;
|
|
||||||
lsize: dw 0 ; ¬«.à §àï¤ à §¬¥à ä ©«
|
|
||||||
hsize: dw 0 ; áâ.à §àï¤
|
|
||||||
|
|
||||||
; á®åà. ¤ ë¥ system.exe
|
|
||||||
hFile1: db -1 ; ¤¥áªà. ä ©«
|
|
||||||
id_mem: db -1 ; ¨¤¥â¨ä. ¡«®ª
|
|
||||||
;
|
|
||||||
dw 0 ; ¬«.à §àï¤
|
|
||||||
dw 0 ; áâ.à §àï¤
|
|
||||||
;
|
|
||||||
;
|
|
||||||
;
|
|
||||||
;
|
|
||||||
;
|
|
||||||
; á®®¡é¥¨ï
|
|
||||||
messages: db 0
|
|
||||||
db 0Dh,0Ah,"Boot and System files Installer v" ;0
|
|
||||||
db major_version + '0','.'
|
|
||||||
db (minor_version / 10) + '0',(minor_version % 10) + '0','.'
|
|
||||||
db 0Dh,0Ah,0Ah
|
|
||||||
db "Copyright (c) 2006-2022 Vasil Ivanov."
|
|
||||||
db 0Dh,0Ah,0Ah
|
|
||||||
db "Copyright (c) 2023 Sprinter Team."
|
|
||||||
db 0Dh,0Ah,0Ah,0
|
|
||||||
;
|
|
||||||
db "System successfully installed on disk " ;1
|
|
||||||
lett1: db "X:",0Dh,0Ah,0Ah,0
|
|
||||||
;
|
|
||||||
db "Installing boot loader...",0Dh,0Ah,0Ah,0 ;2
|
|
||||||
db "Writing system files...",0Dh,0Ah,0Ah,0 ;3
|
|
||||||
;
|
|
||||||
db "Syntax: SYS X:",0Dh,0Ah ;4
|
|
||||||
db " where X: - drive letter (A..Z)",0Dh,0Ah,0Ah,0
|
|
||||||
;
|
|
||||||
db "Insert destination disk in drive " ;5
|
|
||||||
lett2: db "X:",0Dh,0Ah
|
|
||||||
db "and strike any key when ready ...",0Dh,0Ah,0Ah,0
|
|
||||||
;
|
|
||||||
db "Insert system disk in drive " ;6
|
|
||||||
lett3: db "X:",0Dh,0Ah
|
|
||||||
db "and strike any key when ready ...",0Dh,0Ah,0Ah,0
|
|
||||||
;
|
|
||||||
db "Can't install boot on this disk",0Dh,0Ah,0Ah,0 ;7
|
|
||||||
db "Invalid drive specification",0Dh,0Ah,0Ah,0 ;8
|
|
||||||
db " Error: Can't open file",0Dh,0Ah,0Ah,0 ;9
|
|
||||||
db " Error: Can't allocate memory",0Dh,0Ah,0Ah,0 ;10
|
|
||||||
db " Error: Need DOS version 1.60 or higher",0Dh,0Ah,0Ah,0;11
|
|
||||||
db " Error: Reading error",0Dh,0Ah,0Ah,0 ;12
|
|
||||||
db " Error: Can't create file",0Dh,0Ah,0Ah,0 ;13
|
|
||||||
db " Error: Writing error",0Dh,0Ah,0Ah,0 ;14
|
|
||||||
endmess: db 0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ‚뢥á⨠áâப㠯® ¨¤¥ªáã
|
|
||||||
; ¢å®¤: a=¨¤¥ªá áâப¨
|
|
||||||
print_string: call get_string ; ¯®¨áª áâப¨ ¯® ¥¥ ¨¤¥ªáã ¢ 'a'
|
|
||||||
ld c,5Ch ; ¢ë¢®¤ áâப¨
|
|
||||||
rst 10h
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
; ¯®¨áª áâப¨ ¯® ¥¥ ¨¤¥ªáã ¢ 'a'
|
|
||||||
get_string: ld hl,messages ; ᯨ᮪ ¬¥áá £ ¤«ï ¨¤¥ªá. ¤®áâã¯
|
|
||||||
ld bc,endmess-messages ; à §¬¥à ᯨáª
|
|
||||||
inc a
|
|
||||||
ex af,af'
|
|
||||||
xor a
|
|
||||||
ex af,af'
|
|
||||||
get_loop: ex af,af'
|
|
||||||
cpir
|
|
||||||
ret po
|
|
||||||
ret nz
|
|
||||||
ex af,af'
|
|
||||||
dec a
|
|
||||||
jr nz,get_loop
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;====================================================
|
|
||||||
; ‚áï à ¡®â ¯® § £à㧪¥ ä ©« ¢ áâà ¨æë
|
|
||||||
; ¢å®¤: hl=¨¬ï ä ©«
|
|
||||||
; ¢ë室: CF-¯à¨ ®è¨¡ª¥
|
|
||||||
;====================================================
|
|
||||||
read_file: ld a,1 ; ç⥨¥
|
|
||||||
ld c,11h ; ®âªàëâì ä ©«
|
|
||||||
rst 10h
|
|
||||||
jr nc,ok ; ¡¥§ ®è¨¡®ª
|
|
||||||
ld a,9 ; ¨¤¥ªá "Can't open file"
|
|
||||||
call print_string
|
|
||||||
scf
|
|
||||||
ret
|
|
||||||
ok: ld (file_handle),a ; ¤¥áªà. ä ©«
|
|
||||||
ld hl,0
|
|
||||||
ld ix,0
|
|
||||||
ld bc,0215h ; 㪠§ â¥«ì ª®¥æ ä ©«
|
|
||||||
rst 10h
|
|
||||||
ld (hsize),hl ; áâ.à §àï¤ à §¬¥à ä ©«
|
|
||||||
ld (lsize),ix ; ¬«.à §àï¤
|
|
||||||
call get_memory ; à áç. ¨ ¢ë¤¥«. áâà ¨æë ¯®¤ ä ©«
|
|
||||||
jr c,not_enough ; ¥ å¢ â ¥â ¯ ¬ïâ¨
|
|
||||||
call file_to_bank ; § £à. ä ©« ¢ áâà ¨æë
|
|
||||||
close_file: ld a,(file_handle) ; ¤¥áªà. ä ©«
|
|
||||||
ld c,12h ; § ªàëâì ä ©«
|
|
||||||
rst 10h
|
|
||||||
ret
|
|
||||||
;
|
|
||||||
not_enough: call close_file
|
|
||||||
ld a,10 ; ¨¤¥ªá "Can't allocate memory"
|
|
||||||
call print_string
|
|
||||||
scf
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------
|
|
||||||
; <20>® à §¬¥àã ä ©« à ááç¨â âì ¥®¡å®¤¨¬®¥
|
|
||||||
; ç¨á«® áâà ¨æ ¨ ¢ë¤¥«¨âì ¨å.
|
|
||||||
; ‚ë室: CF - ¯à¨ ¥å¢ ⪥ ¯ ¬ïâ¨
|
|
||||||
;----------------------------------------------------
|
|
||||||
get_memory: ld hl,(hsize) ; áâ.à §àï¤ à §¬¥à ä ©«
|
|
||||||
ld bc,(lsize) ; ¬«.à §àï¤
|
|
||||||
ld de,4000h ; ¤¥«¨â¥«ì (à §¬¥à áâà ¨æë)
|
|
||||||
xor a
|
|
||||||
scf
|
|
||||||
malloc1: rr d
|
|
||||||
rr e
|
|
||||||
jr c,malloc2
|
|
||||||
rr h
|
|
||||||
rr l
|
|
||||||
rr b
|
|
||||||
rr c
|
|
||||||
jr nc,malloc1
|
|
||||||
ld a,1
|
|
||||||
jr malloc1
|
|
||||||
;
|
|
||||||
malloc2: or a
|
|
||||||
jr z,$+3
|
|
||||||
inc bc
|
|
||||||
xor a
|
|
||||||
cp b
|
|
||||||
scf
|
|
||||||
ret nz
|
|
||||||
; ¢ë¤¥«¨âì ¡«®ª ¯ ¬ïâ¨
|
|
||||||
ld b,c ; b=ç¨á«® áâà ¨æ
|
|
||||||
ld c,3Dh
|
|
||||||
rst 10h
|
|
||||||
ld (id_blck),a ; ¨¤¥â¨ä. ¡«®ª
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------
|
|
||||||
; ‡ £à㧨âì ä ©« ¢ áâà ¨æë
|
|
||||||
;----------------------------------------------------
|
|
||||||
file_to_bank: ld hl,0
|
|
||||||
ld ix,0
|
|
||||||
ld a,(file_handle) ; ¤¥áªà. ä ©«
|
|
||||||
ld bc,0015h ; 㪠§ ⥫ì ç «® ä ©«
|
|
||||||
rst 10h
|
|
||||||
ld a,(id_blck) ; ¨¤¥â¨ä. ¡«®ª ¯ ¬ïâ¨
|
|
||||||
ld b,0 ; «®£. ®¬¥à áâà ¨æë ¢ ¡«®ª¥
|
|
||||||
ld c,0C4h ; ¯®«ãç¨âì 䨧. ®¬¥à áâà ¨æë ¢ ¡«®ª¥
|
|
||||||
rst 08h
|
|
||||||
ret c
|
|
||||||
loop_to_bank: push af
|
|
||||||
out (SLOT3),a
|
|
||||||
ld hl,page_buffer ; #C000 ªã¤
|
|
||||||
ld de,4000h ; ᪮«ìª®
|
|
||||||
ld a,(file_handle) ; ¤¥áªà. ä ©«
|
|
||||||
ld c,13h ; ç¨â âì ä ©«
|
|
||||||
rst 10h
|
|
||||||
pop bc
|
|
||||||
jr nc,ok_to_bank
|
|
||||||
ld a,12 ; ¨¤¥ªá "Reading error"
|
|
||||||
call print_string
|
|
||||||
scf
|
|
||||||
ret
|
|
||||||
;
|
|
||||||
ok_to_bank: cp -1 ; ¯à®ç¨â ® ¬¥ì襥 ç¨á«® ¡ ©â ?
|
|
||||||
ret z ; ¤
|
|
||||||
ld a,b ; a=䨧¨ç. áâà ¨æ
|
|
||||||
ld c,0C7h ; ¯®«ãç¨âì ®¬¥à á«¥¤. 䨧. áâà ¨æë ¡«®ª
|
|
||||||
rst 08h
|
|
||||||
ret c
|
|
||||||
cp 255
|
|
||||||
jr nz,loop_to_bank ; ¥ ¯®á«¥¤ïï áâà ¨æ
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;====================================================
|
|
||||||
; ‡ ¯¨áì ä ©« ¤¨áª
|
|
||||||
; ¢å®¤: hl=¨¬ï ä ©«
|
|
||||||
; ¢ë室: CF-¯à¨ ®è¨¡ª¥
|
|
||||||
;====================================================
|
|
||||||
write_file: ld a,20h ; âਡãâ " à娢ë©"
|
|
||||||
ld c,0Ah ; á®§¤ âì ä ©«
|
|
||||||
rst 10h
|
|
||||||
jr nc,create_ok ; ¡¥§ ®è¨¡®ª
|
|
||||||
ld a,13 ; ¨¤¥ªá "Can't create file"
|
|
||||||
call print_string
|
|
||||||
scf
|
|
||||||
ret
|
|
||||||
;
|
|
||||||
create_ok: ld (file_handle),a ; ¤¥áªà. ä ©«
|
|
||||||
ld hl,close_file ; § ªà. ä ©«
|
|
||||||
push hl ; â®çª ¢ë室
|
|
||||||
;
|
|
||||||
; ç⥨¥ ä ©« ¨§ ¡ ®ª ¨ § ¯¨áì ¤¨áª
|
|
||||||
ld a,(id_blck) ; ¨¤¥â¨ä. ¡«®ª ¯ ¬ïâ¨
|
|
||||||
ld b,0 ; «®£. ®¬¥à áâà ¨æë ¢ ¡«®ª¥
|
|
||||||
ld c,0C4h ; ¯®«ãç¨âì 䨧. ®¬¥à áâà ¨æë ¢ ¡«®ª¥
|
|
||||||
rst 08h
|
|
||||||
ret c
|
|
||||||
write_loop: push af
|
|
||||||
out (SLOT3),a
|
|
||||||
ld hl,(lsize) ; ¬«.à §àï¤ à §¬¥à ä ©«
|
|
||||||
ld de,(hsize) ; áâ.à §àï¤
|
|
||||||
ld bc,4000h
|
|
||||||
xor a
|
|
||||||
sbc hl,bc
|
|
||||||
ld b,a
|
|
||||||
ex de,hl
|
|
||||||
sbc hl,bc
|
|
||||||
ex de,hl
|
|
||||||
jr c,write_end ; § ¯¨á âì ®áâ ⮪
|
|
||||||
ld (lsize),hl
|
|
||||||
ld (hsize),de
|
|
||||||
;
|
|
||||||
ld hl,page_buffer ; #C000 ®âªã¤
|
|
||||||
ld de,4000h ; ᪮«ìª®
|
|
||||||
ld a,(file_handle) ; ¤¥áªà. ä ©«
|
|
||||||
ld c,14h ; § ¯¨áì ä ©«
|
|
||||||
rst 10h
|
|
||||||
pop bc
|
|
||||||
jr nc,write_ok
|
|
||||||
ld a,14 ; ¨¤¥ªá "Writing error"
|
|
||||||
call print_string
|
|
||||||
scf
|
|
||||||
ret
|
|
||||||
;
|
|
||||||
write_ok: cp -1 ; § ¯¨á ® ¬¥ì襥 ç¨á«® ¡ ©â ?
|
|
||||||
scf
|
|
||||||
ret z ; ¤ , ¤¨áª¥ ¥â ¬¥áâ
|
|
||||||
ld a,b ; a=䨧¨ç. áâà ¨æ
|
|
||||||
ld c,0C7h ; ¯®«ãç¨âì ®¬¥à á«¥¤. 䨧. áâà ¨æë ¡«®ª
|
|
||||||
rst 08h
|
|
||||||
ret c
|
|
||||||
cp 255
|
|
||||||
jr nz,write_loop ; ¥ ¯®á«¥¤ïï áâà ¨æ
|
|
||||||
ret
|
|
||||||
;
|
|
||||||
write_end: pop af ; ¡ « á á⥪
|
|
||||||
ld de,(lsize) ; ᪮«ìª®
|
|
||||||
ld a,e
|
|
||||||
or d
|
|
||||||
ret z ; 0 ¡ ©â®¢
|
|
||||||
ld hl,page_buffer ; #C000 ®âªã¤
|
|
||||||
ld a,(file_handle) ; ¤¥áªà. ä ©«
|
|
||||||
ld c,14h ; § ¯¨áì ä ©«
|
|
||||||
rst 10h
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; „Ž‘-§ £àã§ç¨ª
|
|
||||||
code_loader: include 'dssboot.asm' ; 㨢¥àá «ìë© § £àã§ç¨ª ¤«ï áâ ண® ¨ ®¢®£® ¤®á
|
|
||||||
code_loader.size EQU $-code_loader
|
|
||||||
|
|
||||||
DISPLAY " dssboot size: ", /D,code_loader.size, " bytes. Sectors: ",code_loader.size/512
|
|
||||||
|
|
||||||
|
|
||||||
; 512 ¡ ©â, ¡ãä¥à boot-ᥪâ®à
|
|
||||||
buffer equ $
|
|
||||||
sys_disk equ buffer+513 ; ¤¨áª á¨á⥬ë
|
|
||||||
sys_path equ sys_disk+1 ; ¯ãâì á¨á⥬ë
|
|
||||||
|
|
||||||
@ -1,155 +0,0 @@
|
|||||||
;[BEGIN]
|
|
||||||
;
|
|
||||||
; BOOTNAME.EXE
|
|
||||||
;
|
|
||||||
MODULE BOOTname
|
|
||||||
|
|
||||||
ORG #8100-512
|
|
||||||
INCLUDE "dss.inc"
|
|
||||||
DB "EXE" ;EXE ID
|
|
||||||
DB #00 ;EXE VERSION
|
|
||||||
DW #0200 ;CODE OFFSET LOW
|
|
||||||
DW #0000 ;CODE OFFSET HIGH
|
|
||||||
DW #0000 ;END-BEG ;PRIMARY LOADER
|
|
||||||
DW #0000 ;
|
|
||||||
DW #0000 ;RESERVED
|
|
||||||
DW #0000 ;
|
|
||||||
DW #8100 ;LOAD ADDRESS
|
|
||||||
DW #8100 ;START ADDRESS
|
|
||||||
DW #BFFF ;STACK ADDRESS
|
|
||||||
DS 490
|
|
||||||
|
|
||||||
START
|
|
||||||
LD BC,0*256+DSS_BOOTDSK
|
|
||||||
LD C,2 ;curdisk
|
|
||||||
RST #10
|
|
||||||
JR C,NERR
|
|
||||||
ADD A,"A" ;correct to the human format
|
|
||||||
LD (BOOTDRIVE),A
|
|
||||||
LD HL,BOOTSTRING
|
|
||||||
LD BC,2*256+DSS_ENVIRON
|
|
||||||
RST #10
|
|
||||||
NERR CALL C,ERROR
|
|
||||||
LD C,DSS_EXIT
|
|
||||||
RST #10
|
|
||||||
RET
|
|
||||||
|
|
||||||
BOOTSTRING DB "BOOTDISK="
|
|
||||||
BOOTDRIVE DB "C:",0
|
|
||||||
|
|
||||||
CRLF LD A,#0D
|
|
||||||
LD C,DSS_PUTCHAR
|
|
||||||
RST #10
|
|
||||||
LD A,#0A
|
|
||||||
LD C,DSS_PUTCHAR
|
|
||||||
RST #10
|
|
||||||
RET
|
|
||||||
|
|
||||||
ERROR LD E,A
|
|
||||||
LD D,0
|
|
||||||
JP ERR_MSG
|
|
||||||
|
|
||||||
ERR_MSG CALL FMESAGE
|
|
||||||
CALL PRINTZ
|
|
||||||
CALL CRLF
|
|
||||||
CALL CRLF
|
|
||||||
RET
|
|
||||||
|
|
||||||
FMESAGE INC DE
|
|
||||||
LD HL,ERR0
|
|
||||||
LD BC,ERR1-ERR0
|
|
||||||
LCPIR XOR A
|
|
||||||
CPIR
|
|
||||||
RET PO
|
|
||||||
RET NZ
|
|
||||||
DEC DE
|
|
||||||
LD A,D
|
|
||||||
OR E
|
|
||||||
JP NZ,LCPIR
|
|
||||||
RET
|
|
||||||
|
|
||||||
PUTPRM LD BC,15
|
|
||||||
PUTPRMA LD A,(HL)
|
|
||||||
LDI
|
|
||||||
RET PO
|
|
||||||
OR A
|
|
||||||
JR NZ,PUTPRMA
|
|
||||||
RET
|
|
||||||
|
|
||||||
PRINTZ LD A,(HL)
|
|
||||||
INC HL
|
|
||||||
OR A
|
|
||||||
RET Z
|
|
||||||
CP "%"
|
|
||||||
JR NZ,PRINTZ2
|
|
||||||
LD A,(HL)
|
|
||||||
INC HL
|
|
||||||
SUB "1"
|
|
||||||
PUSH HL
|
|
||||||
LD L,A
|
|
||||||
LD H,0
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
LD BC,PRM1
|
|
||||||
ADD HL,BC
|
|
||||||
LD C,DSS_PCHARS
|
|
||||||
RST #10
|
|
||||||
POP HL
|
|
||||||
JR PRINTZ
|
|
||||||
PRINTZ2 LD C,DSS_PUTCHAR
|
|
||||||
RST #10
|
|
||||||
JP PRINTZ
|
|
||||||
|
|
||||||
PRM1 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
||||||
PRM2 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
||||||
PRM3 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
||||||
PRM4 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
||||||
PRM5 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
||||||
PRM6 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
||||||
PRM7 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
||||||
PRM8 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
||||||
PRM9 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
||||||
|
|
||||||
ERR0 DB #00
|
|
||||||
DB "Bad command or file name",0
|
|
||||||
DB "Invalid function",0
|
|
||||||
DB "Invalid drive number",0
|
|
||||||
DB "File not found",0
|
|
||||||
DB "Path not found",0
|
|
||||||
DB "Invalid handle",0
|
|
||||||
DB "Extended error 6",0
|
|
||||||
DB "File exist",0
|
|
||||||
DB "File read only",0
|
|
||||||
DB "Root overflow",0
|
|
||||||
DB "No free space",0
|
|
||||||
DB "Directory not empty",0
|
|
||||||
DB "Can't delete current directory",0
|
|
||||||
DB "Invalid media",0
|
|
||||||
DB "Unknown operation",0
|
|
||||||
DB "Directory exist",0
|
|
||||||
DB "Invalid filename",0
|
|
||||||
DB "Invalid EXE-file",0
|
|
||||||
DB "Not supported EXE-file",0
|
|
||||||
DB "Access denied",0
|
|
||||||
DB "Not ready",0
|
|
||||||
DB "Seek error",0
|
|
||||||
DB "Sector not found",0
|
|
||||||
DB "CRC error",0
|
|
||||||
DB "Write protect",0
|
|
||||||
DB "Read error",0
|
|
||||||
DB "Write error",0
|
|
||||||
DB "Drive failure",0
|
|
||||||
DB "Extended error 28",0
|
|
||||||
DB "Extended error 29",0
|
|
||||||
DB "No free memory",0
|
|
||||||
DB "Invalid memory block",0
|
|
||||||
DB "Extended error 32",0
|
|
||||||
DB "Extended error 33",0
|
|
||||||
DB "Extended error 34",0
|
|
||||||
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
|
||||||
ERR1
|
|
||||||
;
|
|
||||||
ENDMODULE
|
|
||||||
;
|
|
||||||
1938
BOOT/DSSBOOT.ASM
1938
BOOT/DSSBOOT.ASM
File diff suppressed because it is too large
Load Diff
989
BOOT/boot.asm
Normal file
989
BOOT/boot.asm
Normal file
@ -0,0 +1,989 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; CHANGELOG
|
||||||
|
; [x] - § £à㧪 á «î¡®£® primary active à §¤¥«
|
||||||
|
; [x] - ¯®¤¤¥à¦ª § £à㧪¨ á FAT32 à §¤¥«
|
||||||
|
; [x] - § £à㧪 á RAM ¤¨áª
|
||||||
|
; [x] - bug fixes and optimizations)))
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
; <20>à®£à ¬¬ § ¯¨á¨ FDD/HDD boot-§ £àã§ç¨ª ¨ ä ©«®¢ á¨á⥬ë.
|
||||||
|
;
|
||||||
|
; ‡ £à㦠¥â á¨áâ. ä ©«ë ¨§ ª®àï ¤¨áª , á ª®â®à®£® ¡ë«
|
||||||
|
; § £à㦥 á¨á⥬ .
|
||||||
|
|
||||||
|
; ”¨âç¨ ¯à®£à ¬¬ë:
|
||||||
|
; ‚ ®â«¨ç¨¥ ®â ®à¨£¨ «ì®£® boot-¨áâ ««ïâ®à , íâ ¬®¦¥â
|
||||||
|
; ¯¥à¥¯¨áë¢ âì 㦥 ãáâ ®¢«¥ë© boot-§ £àã§ç¨ª.
|
||||||
|
; ” ©«ë á¨á⥬ë (system.dos, system.exe) ¬®£ãâ ¨¬¥âì
|
||||||
|
; «î¡ë¥ à §¬¥àë.
|
||||||
|
; <20>ਠ§ £à㧪¥ ª®¬¯ìîâ¥à á ¤¨áª¥âë, § ¯à 訢 ¥âáï ®¢ ï
|
||||||
|
; ¤¨áª¥â ¤«ï á®§¤ ¨ï ¨§ ¥¥ § £à㧮箩.
|
||||||
|
;
|
||||||
|
;
|
||||||
|
STRUCT _sysFatBuffer
|
||||||
|
;.DRIVE: BYTE #FF
|
||||||
|
.FAT_TYPE: BYTE #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; fat32
|
||||||
|
.CacheBlock: WORD #0000
|
||||||
|
;.CacheUpdated: BYTE #00
|
||||||
|
;.SectorsPerBank: BYTE #00
|
||||||
|
.RootDirStartCluster_L: WORD #0000
|
||||||
|
.RootDirStartCluster_H: WORD #0000 ; fat32
|
||||||
|
.FAT1_SEC_L: WORD #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
|
||||||
|
.FAT1_SEC_H: WORD #0000 ; fat32
|
||||||
|
;.FAT2_SEC_L: WORD #0000
|
||||||
|
;.FAT2_SEC_H: WORD #0000 ; fat32
|
||||||
|
;.Number_Of_FATs BYTE #02
|
||||||
|
.SectorsPerFAT_L WORD #0000
|
||||||
|
.SectorsPerFAT_H BYTE #00
|
||||||
|
.RootDirFirstSector_L: WORD #0000 ; MSD_CAT_SEC first sector DIR
|
||||||
|
.RootDirFirstSector_H: WORD #0000 ; MSD_CAT_SEC first sector DIR
|
||||||
|
.DirSizeInSectors: BYTE #00 ; DIR_SEC_SIZE
|
||||||
|
.FirstDataSector_L: WORD #0000 ; MSD_DAT_SEC low
|
||||||
|
.FirstDataSector_H: WORD #0000 ; MSD_DAT_SEC high
|
||||||
|
.BytesPerCluster: WORD #0000 ; CLUSTER_LEN
|
||||||
|
;.END_CHAIN_CLUSTER_L: WORD #FFFF
|
||||||
|
;.END_CHAIN_CLUSTER_H: WORD #0FFF
|
||||||
|
;.MaxClusterLow: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||||
|
;.MaxClusterHigh: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||||
|
;.BytesPerSector: WORD #0000
|
||||||
|
.SectorsPerCluster: BYTE #00
|
||||||
|
;.FSINFO_Sector: WORD #01
|
||||||
|
;.BPB_SERIAL_NUMBER: DWORD #00000000
|
||||||
|
;.BPB_LABEL: BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
|
||||||
|
;.UPD_FSINFO: BYTE 0
|
||||||
|
;.FREE_CLUSTERS_COUNT_L: WORD #FFFF
|
||||||
|
;.FREE_CLUSTERS_COUNT_H: WORD #FFFF
|
||||||
|
;.FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
||||||
|
;.ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“)
|
||||||
|
;.READ_PG: BYTE #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||||
|
;.S_X_H: DWORD #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥
|
||||||
|
ENDS
|
||||||
|
includelua 'Shared_includes/lua/Functions.lua'
|
||||||
|
include 'shared_includes/constants/sp2000.inc'
|
||||||
|
include 'shared_includes/constants/bios_equ.inc'
|
||||||
|
include 'shared_includes/constants/dss_equ.inc'
|
||||||
|
include 'shared_includes/macroses/accelerator.z80'
|
||||||
|
include 'shared_includes/macroses/macros.z80'
|
||||||
|
include 'shared_includes/structures/FileSystem.inc'
|
||||||
|
;include 'DSS/structures.inc'
|
||||||
|
include '../DSS/defines.inc'
|
||||||
|
|
||||||
|
LUA PASS1
|
||||||
|
local date, month, year = Get_date_RU(sj.get_define("__DATE__"))
|
||||||
|
BuildDate = "'" .. date .. "." .. month .. "." .. year .. "'"
|
||||||
|
sj.insert_define("SYS_BUILD_DATE", BuildDate)
|
||||||
|
ENDLUA
|
||||||
|
LUA ALLPASS
|
||||||
|
sj.insert_define("SYS_BUILD_DATE", BuildDate)
|
||||||
|
ENDLUA
|
||||||
|
|
||||||
|
DEFINE EXEinfoMACRO 0
|
||||||
|
DEFINE App_EXE_Version 1
|
||||||
|
MACRO _mEXEinfo
|
||||||
|
IF EXEinfoMACRO
|
||||||
|
BLOCK 10,' ' ; ‚ëà ¢¨¢ ¨¥ ¤«ï ªà ᨢ®£® ®â®¡à ¦¥¨ï ¢ HEX
|
||||||
|
BYTE ' Bootloader '
|
||||||
|
BYTE ' installer '
|
||||||
|
BYTE ' for DSS. '
|
||||||
|
BYTE ' Vasil Ivanov, '
|
||||||
|
BYTE ' Anatoliy '
|
||||||
|
BYTE ' Belyanskiy. '
|
||||||
|
BYTE ' Sprinter Team, '
|
||||||
|
BYTE ' 2025 '
|
||||||
|
ENDIF
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
|
||||||
|
; ¢¥àá¨ï ¯à®£à ¬¬ë
|
||||||
|
major_version equ 3 ; áâ. ®¬¥à ¢¥àᨨ
|
||||||
|
minor_version equ 0 ; ¬«. ®¬¥à
|
||||||
|
;;
|
||||||
|
SECTORS_OF_LOADER EQU 4 ; ᥪâ®à®¢ § £àã§ç¨ª
|
||||||
|
.IN_BPB EQU 1
|
||||||
|
.AFTER_BPB EQU 3
|
||||||
|
|
||||||
|
org_addr EQU #8000 + CLP_Buffer
|
||||||
|
code_addr EQU BEGIN
|
||||||
|
program_start EQU BEGIN
|
||||||
|
stack_point EQU #BFFE
|
||||||
|
Loader_length EQU 0
|
||||||
|
|
||||||
|
;
|
||||||
|
page_buffer equ #C000 ; ¡ãä¥à ä ©«®¢
|
||||||
|
;;
|
||||||
|
|
||||||
|
include 'Shared_Includes/constants/EXE_Header.z80'
|
||||||
|
|
||||||
|
ORG org_addr
|
||||||
|
BEGIN: ;di
|
||||||
|
in a,(SLOT3)
|
||||||
|
ld (port),a ; á®åà. ¯®àâ
|
||||||
|
push ix
|
||||||
|
call save_path ; á®åà. ⥪. ¤¨áª ¨ ¯ãâì
|
||||||
|
ld c,Dss.Version ; ã§ âì ¢¥àá¨î „Ž‘
|
||||||
|
RST ToDSS
|
||||||
|
ex de,hl ; hl=⥪. ¢¥àá¨ï
|
||||||
|
ld de,#0146 ; 1.70.810 d=¢¥àá¨ï, e=¬®¤¨ä¨ª æ¨ï, bc - ®¬¥à ᡮન. de = #0146, bc = 810 dos ver 1.70.810
|
||||||
|
and a
|
||||||
|
sbc hl,de
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
;jr nc,version_ok
|
||||||
|
jr z,.check_build ; ¥á«¨ ®¬¥à ¢¥àᨨ 1.70
|
||||||
|
jr nc,version_ok ; ¥á«¨ ®¬¥à ¢¥àᨨ ¡®«ìè¥ 1.70
|
||||||
|
;
|
||||||
|
.old_ver: pop hl
|
||||||
|
ld a,11 ; ¨¤¥ªá áâப¨ "Error: Need DSS version 1.70..."
|
||||||
|
call print_string
|
||||||
|
ld a,DSS_Error.sys.COMMON_ERROR
|
||||||
|
jp exit
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
.check_build: ld hl,810 ; 1.70.810 d=¢¥àá¨ï, e=¬®¤¨ä¨ª æ¨ï, bc - ®¬¥à ᡮન. de = #0146, bc = 810 dos ver 1.70.810
|
||||||
|
sbc hl,bc
|
||||||
|
jr nc,BEGIN.old_ver
|
||||||
|
;
|
||||||
|
version_ok: pop hl ; ª®¬-áâப
|
||||||
|
; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
|
||||||
|
call get_drive_letter
|
||||||
|
push af
|
||||||
|
xor a ; ¨¤¥ªá áâப¨ â¨â«
|
||||||
|
call print_string
|
||||||
|
pop af
|
||||||
|
jp c,help ; ¥â ¯ à ¬¥â஢
|
||||||
|
ld (disk),a ; § ¤ ë© ®¬¥à ¤¨áª
|
||||||
|
; ã§ âì ®¬¥à boot-¤¨áª á¨á⥬ë
|
||||||
|
ld bc,Dss.BootDSK.Get
|
||||||
|
RST ToDSS
|
||||||
|
ld (boot_disk),a ; ¤¨áª (A=0,B=1,..)
|
||||||
|
; ¯à®¢¥à¨âì ᮢ¯ ¤¥¨¥ ¤¨áª®¢
|
||||||
|
same_fdd: ld hl,disk
|
||||||
|
cp (hl)
|
||||||
|
jr nz,.next
|
||||||
|
ld hl,read_sys_files.swap_flag
|
||||||
|
.flag+1: ld (hl),0 ; ãáâ. ä« £
|
||||||
|
;
|
||||||
|
; —⥨¥ ¢ ¡ ª¨ ä ©«®¢ á¨á⥬ë
|
||||||
|
;
|
||||||
|
.next: ld a,(boot_disk) ; ¤¨áª § £à㧪¨ Ž‘
|
||||||
|
ld hl,root_path ; "X:\" ª®à¥ì ¤¨áª
|
||||||
|
add a,'A'
|
||||||
|
ld (hl),a
|
||||||
|
ld c,Dss.ChDir ; ᬥ ª â «®£
|
||||||
|
RST ToDSS
|
||||||
|
;--------------------------------------------
|
||||||
|
; —⥨¥ ä ©« system.exe
|
||||||
|
;--------------------------------------------
|
||||||
|
read_sys_files: ;
|
||||||
|
.noFiles+1: ld a,0
|
||||||
|
or a
|
||||||
|
jr nz,.write_boot
|
||||||
|
;
|
||||||
|
ld hl,name2 ; ¨¬ï ä ©«
|
||||||
|
call read_file ; ¢áï à ¡®â ¯® § £à㧪¥ ä ©« ¢ áâà ¨æë
|
||||||
|
;jr nc,read_file1_ok
|
||||||
|
; ®á¢®¡. ¡«®ª ¯ ¬ïâ¨
|
||||||
|
;read_file_err: ld a,(FILE1_PARAMS.id_blck) ; ¨¤¥â¨ä. ¡«®ª ¯ ¬ïâ¨
|
||||||
|
; ld c,Dss.FreeMem
|
||||||
|
; RST ToDSS
|
||||||
|
;ld a,DSS_Error.sys.DISK_FULL ; ª®¤ ®è¨¡ª¨
|
||||||
|
jp c,exit
|
||||||
|
; á®åà. à ¡. ï祩ª¨ ä ©« system.exe
|
||||||
|
.read_file1_ok: ld hl,FILE1_PARAMS ; ®âªã¤
|
||||||
|
ld de,FILE2_PARAMS ; ªã¤
|
||||||
|
ld bc,FILE2_PARAMS.dataSize
|
||||||
|
ldir
|
||||||
|
;--------------------------------------------
|
||||||
|
; —⥨¥ ä ©« system.dos
|
||||||
|
;--------------------------------------------
|
||||||
|
ld hl,name1 ; ¨¬ï ä ©«
|
||||||
|
call read_file ; ¢áï à ¡®â ¯® § £à㧪¥ ä ©« ¢ áâà ¨æë
|
||||||
|
;jr c,read_file_err
|
||||||
|
;ld a,DSS_Error.sys.DISK_FULL; ª®¤ ®è¨¡ª¨
|
||||||
|
jp c,exit
|
||||||
|
;jr nc,read_file2_ok
|
||||||
|
; ®á¢®¡. ¡«®ª ¯ ¬ï⨠system.exe
|
||||||
|
; file_err1: ld a,(FILE2_PARAMS.id_blck); ¨¤¥â¨ä. ¡«®ª ¯ ¬ïâ¨
|
||||||
|
; ld c,Dss.FreeMem
|
||||||
|
; RST ToDSS
|
||||||
|
;jr read_file_err ; ®á¢®¡. ¡«®ª ¯ ¬ï⨠system.dos
|
||||||
|
.swap_flag+1: ld a,1
|
||||||
|
or a
|
||||||
|
jr nz,.no_confirm
|
||||||
|
ld a,(boot_disk) ; á¨áâ. ¤¨áª
|
||||||
|
cp 2
|
||||||
|
jr nc,.no_confirm ; ¥ ¤¨áª®¢®¤ë
|
||||||
|
; § ¯à®á¨âì æ¥«¥¢®© ¤¨áª
|
||||||
|
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
||||||
|
add a,'A'
|
||||||
|
ld (messages.lett2),a
|
||||||
|
ld a,5 ; ¨¤¥ªá áâப¨ "Insert destination disk..."
|
||||||
|
call print_string
|
||||||
|
ld bc,Dss.K_CLEAR + Dss.WaitKey*256; ¦¤¥¬ ¦ â¨ï ª« ¢¨è¨
|
||||||
|
RST ToDSS
|
||||||
|
;
|
||||||
|
.no_confirm: ; “áâ. 楫¥¢®© ¤¨áª/¯ãâì
|
||||||
|
ld a,(disk) ; 楫¥¢®© ¤¨áª
|
||||||
|
ld hl,root_path ; "X:\" áâப ¯ãâ¨
|
||||||
|
add a,'A'
|
||||||
|
ld (hl),a
|
||||||
|
ld c,Dss.ChDir ; ᬥ ⥪. ª â «®£
|
||||||
|
RST ToDSS
|
||||||
|
;--------------------------------------------
|
||||||
|
ld a,3 ; ¨¤¥ªá áâப¨ "Writing system files..."
|
||||||
|
call print_string
|
||||||
|
; ‡ ¯¨áì ä ©« system.dos
|
||||||
|
ld hl,name1 ; ¨¬ï ä ©«
|
||||||
|
call write_file
|
||||||
|
jr c,write_error
|
||||||
|
.ok_write1: ; ®á¢®¡®¤¨âì ¯ ¬ïâì
|
||||||
|
; ld a,(FILE1_PARAMS.id_blck) ; ¡«®ª system.dos
|
||||||
|
; ld c,Dss.FreeMem
|
||||||
|
; RST ToDSS
|
||||||
|
;
|
||||||
|
; § £à. à ¡. ï祩ª¨
|
||||||
|
ld hl,FILE2_PARAMS ; ®âªã¤
|
||||||
|
ld de,FILE1_PARAMS ; ªã¤
|
||||||
|
ld bc,FILE1_PARAMS.dataSize
|
||||||
|
ldir
|
||||||
|
; ‡ ¯¨áì ä ©« system.exe
|
||||||
|
ld hl,name2 ; ¨¬ï ä ©«
|
||||||
|
call write_file
|
||||||
|
; ®á¢®¡®¤¨âì ¯ ¬ïâì
|
||||||
|
; push af
|
||||||
|
; ld a,(FILE1_PARAMS.id_blck) ; ¡«®ª system.exe
|
||||||
|
; ld c,Dss.FreeMem
|
||||||
|
; RST ToDSS
|
||||||
|
; pop af
|
||||||
|
;
|
||||||
|
jr c,write_error
|
||||||
|
;jr c,exit ; ®è¨¡ª
|
||||||
|
;
|
||||||
|
; ‡ ¯¨á âì boot-§ £àã§ç¨ª
|
||||||
|
.write_boot: ld a,2 ; ¨¤¥ªá áâப¨ "Installing boot loader..."
|
||||||
|
call print_string
|
||||||
|
call write_boot_loader
|
||||||
|
jr c,write_error ; ®è¨¡ª à ¡®âë á ¤¥¢ ©á®¬
|
||||||
|
;
|
||||||
|
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
||||||
|
add a,'A'
|
||||||
|
ld (messages.lett1),a
|
||||||
|
ld a,1 ; ¨¤¥ªá áâப¨ "System installed on disk "
|
||||||
|
call print_string
|
||||||
|
;
|
||||||
|
ld a,(read_sys_files.swap_flag)
|
||||||
|
or a
|
||||||
|
jr nz,.not_fdd
|
||||||
|
; § ¯à®á¨âì á¨áâ¥¬ë© ¤¨áª
|
||||||
|
ld a,(boot_disk) ; á¨áâ. ¤¨áª
|
||||||
|
cp 2
|
||||||
|
jr nc,.not_fdd ; ¥ ¤¨áª®¢®¤ë
|
||||||
|
add a,'A'
|
||||||
|
ld (messages.lett3),a
|
||||||
|
ld a,6 ; ¨¤¥ªá áâப¨ "Insert system disk..."
|
||||||
|
call print_string
|
||||||
|
ld bc,Dss.K_CLEAR + Dss.WaitKey*256; ¦¤¥¬ ¦ â¨ï ª« ¢¨è¨
|
||||||
|
RST ToDSS
|
||||||
|
.not_fdd: xor a ; ª®¤ "Ok"
|
||||||
|
;
|
||||||
|
exit: push af
|
||||||
|
call restore_path ; ¢®ááâ. ⥪. ¤¨áª ¨ ¯ãâì
|
||||||
|
port+1: ld a,-1 ; á®åà. ¯®àâ
|
||||||
|
out (SLOT3),a
|
||||||
|
pop af
|
||||||
|
ld c,Dss.Exit ; ¢ë室 ¢ „Ž‘
|
||||||
|
ld b,a
|
||||||
|
RST ToDSS
|
||||||
|
jr $
|
||||||
|
;
|
||||||
|
help: ld a,8 ; ¨¤¥ªá áâப¨ "Invalid drive specification"
|
||||||
|
call print_string
|
||||||
|
ld a,4 ; ¨¤¥ªá áâப¨ åí«¯
|
||||||
|
err_mes: call print_string
|
||||||
|
ld a,DSS_Error.sys.COMMON_ERROR
|
||||||
|
jr exit
|
||||||
|
|
||||||
|
write_error: ld a,7 ; ¨¤¥ªá áâப¨ "Can't install boot on this disk"
|
||||||
|
jr err_mes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
root_path: db 'X:\',0 ; ¯ãâì
|
||||||
|
|
||||||
|
name1: db "SYSTEM.DOS",0
|
||||||
|
name2: db "SYSTEM.EXE",0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;-------------------------------------------------
|
||||||
|
; ‡ ¯¨á âì boot-§ £àã§ç¨ª FDD/HDD
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: CF - ®è¨¡ª à ¡®âë á ¤¥¢ ©á®¬
|
||||||
|
;-------------------------------------------------
|
||||||
|
write_boot_loader:
|
||||||
|
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
||||||
|
ld c,Dss.DRV.Open ; open device
|
||||||
|
rst ToDSS.DRV
|
||||||
|
ret c
|
||||||
|
ld hl,close_device ; â®çª ¢ë室
|
||||||
|
push hl
|
||||||
|
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
||||||
|
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
||||||
|
ld ix,0 ; ¬«. à §àï¤
|
||||||
|
ld de,buffer ; ªã¤
|
||||||
|
ld bc,1*256 + Dss.DRV.Read ; ¯à®ç¨â âì 1 ᥪâ®à (boot)
|
||||||
|
rst ToDSS.DRV
|
||||||
|
ret c ; ®è¨¡ª ç⥨ï
|
||||||
|
ld a,(buffer + _sBOOT_SECTOR_PARAMS.DRIVE_TYPE)
|
||||||
|
cp #F0 ; 1.44Mb
|
||||||
|
ret c ; ¥§ ª®¬ë© ä®à¬ â
|
||||||
|
jr z,write_to_floppy
|
||||||
|
cp #F9 ; 720kB
|
||||||
|
jr z,write_to_floppy
|
||||||
|
cp #FA ; RAM disk
|
||||||
|
jr z,write_to_ram_disk
|
||||||
|
cp #F8 ; ¢¨â
|
||||||
|
jp z,write_to_hard_disk
|
||||||
|
scf ; ¥§ ª®¬ë© ä®à¬ â
|
||||||
|
ret
|
||||||
|
|
||||||
|
; § ªàëâì ¤¥¢ ©á
|
||||||
|
close_device: push af ; á®åà. ä« £
|
||||||
|
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
||||||
|
ld c,Dss.DRV.Close ; close device
|
||||||
|
rst ToDSS.DRV
|
||||||
|
pop af
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;-------------------------------------------------
|
||||||
|
; ‡ ¯¨áì boot-§ £àã§ç¨ª ¤¨áª¥âã
|
||||||
|
;
|
||||||
|
; ¢å®¤: ¤ ë¥ ¨§ buffer
|
||||||
|
; ¢ë室: CF - ¯à¨ ®è¨¡ª¥ § ¯¨á¨
|
||||||
|
;-------------------------------------------------
|
||||||
|
write_to_floppy:
|
||||||
|
ld a,(buffer + BOOT_SECTOR.Number_of_FATs) ; ç¨á«® ª®¯¨© FAT-®¢
|
||||||
|
or a
|
||||||
|
scf
|
||||||
|
ret z ; ®è¨¡ª
|
||||||
|
dec a ; --ç¨á«® ª®¯¨©
|
||||||
|
jr z,overwrite_floppy ; § £àã§ç¨ª 㦥 § ¯¨á , ¯¥à¥§ ¯¨á âì ¥£®
|
||||||
|
; áâநâì ï祩ª¨ boot-ᥪâ®à
|
||||||
|
ld (buffer + BOOT_SECTOR.Number_of_FATs),a ; ç¨á«® ª®¯¨© FAT-®¢
|
||||||
|
ld hl,(buffer + BOOT_SECTOR.RESERVED_SECTORS) ; § १¥à¢. ᥪâ®à®¢
|
||||||
|
ld bc,(buffer + BOOT_SECTOR.SectorsPerFAT16) ; ᥪâ®à®¢ FAT
|
||||||
|
add hl,bc
|
||||||
|
ld (buffer + BOOT_SECTOR.RESERVED_SECTORS),hl ; § १¥à¢. ᥪâ®à®¢
|
||||||
|
dec hl
|
||||||
|
ld de,SECTORS_OF_LOADER.AFTER_BPB
|
||||||
|
and a
|
||||||
|
sbc hl,de
|
||||||
|
ret c
|
||||||
|
overwrite_floppy:
|
||||||
|
CALL SETUP_ZERO_SECTOR
|
||||||
|
;; ¯¥à¥ª¨¤ë¢ ¨¥ ç á⨠§ £àã§ç¨ª ¢ 0 ᥪâ®à
|
||||||
|
;LD HL,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.physical
|
||||||
|
;LD DE,buffer + (_sBOOT_SECTOR.PARTITION_TABLE - DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size)
|
||||||
|
;LD BC,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size
|
||||||
|
;LDIR
|
||||||
|
;;
|
||||||
|
; § ¯¨á âì boot-ᥪâ®à § ¤
|
||||||
|
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
||||||
|
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
||||||
|
ld ix,0 ; ¬«. à §àï¤
|
||||||
|
ld de,buffer ; ®âªã¤
|
||||||
|
ld bc,1*256 + Dss.DRV.Write ; § ¯¨á âì 1 ᥪâ®à
|
||||||
|
rst ToDSS.DRV
|
||||||
|
ret c ; ®è¨¡ª § ¯¨á¨
|
||||||
|
; § ¯¨á âì § £àã§ç¨ª
|
||||||
|
ld a,(disk) ; § ¤ ë© ®¬¥à ¤¨áª
|
||||||
|
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
||||||
|
ld ix,1 ; ¬«. à §àï¤
|
||||||
|
ld de,code_loader ; ®âªã¤ (ª®¤ § £àã§ç¨ª )
|
||||||
|
ld bc,SECTORS_OF_LOADER.AFTER_BPB*256+Dss.DRV.Write; § ¯¨á âì 3 ᥪâ®à (à §¬¥à § £à.)
|
||||||
|
rst ToDSS.DRV
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;-------------------------------------------------
|
||||||
|
; ‡ ¯¨áì boot-§ £àã§ç¨ª ¤à ©¢
|
||||||
|
;
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: CF-®è¨¡ª § ¯¨á¨
|
||||||
|
;-------------------------------------------------
|
||||||
|
write_to_ram_disk:
|
||||||
|
CALL write_no_BPB
|
||||||
|
RET C
|
||||||
|
; buffer = sector 0
|
||||||
|
;
|
||||||
|
JR write_to_BPB
|
||||||
|
|
||||||
|
write_to_hard_disk:
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
CALL write_no_BPB
|
||||||
|
RET C
|
||||||
|
; buffer = sector 0
|
||||||
|
;
|
||||||
|
; ¯à®¢¥àª <20>€Œ-¤¨áª (à §¤¥«ë à ¬¤¨áª¥ ¯®ª ¥ ¯®¤¤¥à¦¨¢ îâáï)
|
||||||
|
LD A,B
|
||||||
|
CP #80-1 ;!HARDCODE HDD number
|
||||||
|
JR C,write_to_BPB
|
||||||
|
;
|
||||||
|
PUSH BC
|
||||||
|
CALL Read_MBR
|
||||||
|
RET NZ
|
||||||
|
POP BC
|
||||||
|
PUSH BC
|
||||||
|
; set active in buffer
|
||||||
|
INC C
|
||||||
|
LD HL,buffer + _sBOOT_SECTOR.PARTITION_TABLE.Record_4
|
||||||
|
LD DE,_sMBR_PARTITION_RECORD ; à §¬¥à ®¤®© § ¯¨á¨ MBR
|
||||||
|
LD B,_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD; MBR: Number of entries in the partition table
|
||||||
|
.loop: XOR A
|
||||||
|
LD (HL),A
|
||||||
|
;
|
||||||
|
LD A,C
|
||||||
|
CP B
|
||||||
|
JR NZ,.next
|
||||||
|
;
|
||||||
|
LD A,#80
|
||||||
|
LD (HL),A
|
||||||
|
PUSH HL
|
||||||
|
INC HL
|
||||||
|
INC HL
|
||||||
|
INC HL
|
||||||
|
INC HL
|
||||||
|
LD A,(HL)
|
||||||
|
POP HL
|
||||||
|
CP PartitionSysTypes.FAT12
|
||||||
|
JR Z,.next
|
||||||
|
CP PartitionSysTypes.FAT16_32Mb
|
||||||
|
JR Z,.next
|
||||||
|
CP PartitionSysTypes.FAT16
|
||||||
|
JR Z,.next
|
||||||
|
CP PartitionSysTypes.FAT16_LBA
|
||||||
|
JR Z,.next
|
||||||
|
CP PartitionSysTypes.FAT32
|
||||||
|
JR Z,.next
|
||||||
|
CP PartitionSysTypes.FAT32_LBA
|
||||||
|
JR Z,.next
|
||||||
|
; NOT SUPPORTED FS
|
||||||
|
POP BC
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.next: AND A
|
||||||
|
SBC HL,DE
|
||||||
|
DJNZ .loop
|
||||||
|
;
|
||||||
|
JR write_to_BPB.no_push
|
||||||
|
write_to_BPB: PUSH BC
|
||||||
|
.no_push: CALL SETUP_ZERO_SECTOR
|
||||||
|
;; ¯¥à¥ª¨¤ë¢ ¨¥ ç á⨠§ £àã§ç¨ª ¢ 0 ᥪâ®à
|
||||||
|
;LD HL,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.physical
|
||||||
|
;LD DE,buffer + (_sBOOT_SECTOR.PARTITION_TABLE - DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size)
|
||||||
|
;LD BC,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size
|
||||||
|
;LDIR
|
||||||
|
;; § é¨â ®â ¡ ª« ¨§¬ (§ £à㧪 á í⮣® ¤¨áª PC ¯à¨¢¥¤¥â ª § ¢¨á ¨î. JMP $)
|
||||||
|
;LD HL,#FEEB ; opcode jmp $
|
||||||
|
;LD (buffer),HL
|
||||||
|
; § ¯¨áì ¢ 0 ᥪâ®à ªã᪠§ £àã§ç¨ª
|
||||||
|
pop af ; § ¤ ë© ®¬¥à ¤¨áª
|
||||||
|
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
||||||
|
ld ix,0 ; ¬«. à §àï¤
|
||||||
|
ld de,buffer ; ®âªã¤ (ª®¤ § £àã§ç¨ª )
|
||||||
|
ld bc,1*256 + BIOS.DRV_WRITE ; § ¯¨á âì 1 ᥪâ®à
|
||||||
|
RST ToBIOS
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
write_no_BPB: ld a,(disk) ; ®¬¥à § ¤ ®£® ¤¨áª
|
||||||
|
ld de,Dss.DRV.GenIOCTL.Enter
|
||||||
|
ld bc,Dss.DRV.GenIOCTL.GetParams
|
||||||
|
rst ToDSS.DRV
|
||||||
|
ex af,af'
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
ld b,a
|
||||||
|
inc c
|
||||||
|
scf
|
||||||
|
ret z
|
||||||
|
dec c
|
||||||
|
CP #80 ;!HARDCODE ⨯ ¤à ©¢ - HDD
|
||||||
|
JR NC,.skip_FAT_check
|
||||||
|
PUSH BC
|
||||||
|
; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR
|
||||||
|
; A - PHISICAL DRIVE NUMBER
|
||||||
|
; [x] 02/02/2024 ¯à®¢¥àª ¢«¥§ ¥¬®áâì § £àã§ç¨ª (ç⮡ ¥ ¯®¯®àâ¨âì ä â)
|
||||||
|
CALL Read_MBR
|
||||||
|
RET NZ
|
||||||
|
POP BC
|
||||||
|
LD HL,(buffer + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS)
|
||||||
|
; ¬¨¨¬ «ì®¥ à ááâ®ï¨¥ ¤à ©¢¥ ®â ã«¥¢®£® ᥪâ®à ¤® ä â (¤«¨ § £àã§ç¨ª + 1)
|
||||||
|
LD DE,SECTORS_OF_LOADER.AFTER_BPB + 1
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
.skip_FAT_check:;
|
||||||
|
push bc
|
||||||
|
ld a,b
|
||||||
|
ld hl,0 ; áâ. à §àï¤ «®£. ᥪâ®à
|
||||||
|
ld ix,1 ; ¬«. à §àï¤
|
||||||
|
ld de,code_loader ; ®âªã¤ (ª®¤ § £àã§ç¨ª )
|
||||||
|
ld bc,SECTORS_OF_LOADER.AFTER_BPB*256+BIOS.DRV_WRITE; § ¯¨á âì 3 ᥪâ®à (à §¬¥à § £à.)
|
||||||
|
rst ToBIOS
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
pop bc
|
||||||
|
;
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
; in: a - drive
|
||||||
|
; out CF = 1.
|
||||||
|
; ZF = 1 - OK,
|
||||||
|
; ZF = 0 - error
|
||||||
|
Read_MBR: LD HL,0
|
||||||
|
LD IX,0
|
||||||
|
LD DE,buffer
|
||||||
|
LD BC,1*256 + BIOS.DRV_READ
|
||||||
|
RST ToBIOS
|
||||||
|
LD HL,(buffer + _sBOOT_SECTOR.MBR_SIGNATURE)
|
||||||
|
LD DE,#AA55
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
SETUP_ZERO_SECTOR:
|
||||||
|
; ¯¥à¥ª¨¤ë¢ ¨¥ ç á⨠§ £àã§ç¨ª ¢ 0 ᥪâ®à
|
||||||
|
LD HL,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.physical
|
||||||
|
LD DE,buffer + (_sBOOT_SECTOR.PARTITION_TABLE - DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size)
|
||||||
|
LD BC,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size
|
||||||
|
LDIR
|
||||||
|
; § é¨â ®â ¡ ª« ¨§¬ (§ £à㧪 á í⮣® ¤¨áª PC ¯à¨¢¥¤¥â ª § ¢¨á ¨î. JMP $)
|
||||||
|
LD HL,#FEEB ; opcode jmp $
|
||||||
|
LD (buffer),HL
|
||||||
|
RET
|
||||||
|
;-------------------------------------------------
|
||||||
|
; ‚뤥«¨âì § ¤ ë© ¤¨áª ¨§ ª®¬-áâப¨
|
||||||
|
;
|
||||||
|
; ¢å®¤: hl=¡ãä¥à áâப¨
|
||||||
|
; ¢ë室: a=®¬¥à ¤¨áª
|
||||||
|
; CF-¯à¨ ®è¨¡ª¥
|
||||||
|
;-------------------------------------------------
|
||||||
|
get_drive_letter:
|
||||||
|
; § ç¨á⪠¡ãä¥à
|
||||||
|
xor a
|
||||||
|
ld (buffer+1),a
|
||||||
|
;
|
||||||
|
inc hl ; ¡ãä¥à áâப¨
|
||||||
|
ld de,buffer ; ¡ãä¥à ¤«ï ¢ë¤¥«. ¯ à ¬¥âà
|
||||||
|
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬. áâப¨
|
||||||
|
RST ToDSS
|
||||||
|
;
|
||||||
|
;rra
|
||||||
|
rl b ; ¯à¨§ ª ª®æ ¯ à ¬¥â஢
|
||||||
|
;
|
||||||
|
ld de,buffer
|
||||||
|
ld a,(de)
|
||||||
|
inc de
|
||||||
|
ld c,a ; á®åà. 'a'
|
||||||
|
ld a,(de)
|
||||||
|
cp ':'
|
||||||
|
jr nz,.get_drive_err ; ¤¨áª ¥ § ¤
|
||||||
|
inc de
|
||||||
|
ld a,(de)
|
||||||
|
or a
|
||||||
|
jr nz,.get_drive_err ; ¥¯à ¢¨«ìë¥ ¯ à ¬¥âàë
|
||||||
|
;
|
||||||
|
rr b ; ¯à¨§ ª ª®æ ¯ à ¬¥â஢
|
||||||
|
jr c,.checkChar
|
||||||
|
;
|
||||||
|
push bc
|
||||||
|
ld de,buffer ; ¡ãä¥à ¤«ï ¢ë¤¥«. ¯ à ¬¥âà
|
||||||
|
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬. áâப¨
|
||||||
|
RST ToDSS
|
||||||
|
pop bc
|
||||||
|
jr nc,.get_drive_err ; ¥¯à ¢¨«ìë¥ ¯ à ¬¥âàë
|
||||||
|
;
|
||||||
|
ld de,buffer ; ¡ãä¥à ¤«ï ¢ë¤¥«. ¯ à ¬¥âà
|
||||||
|
ld a,(de)
|
||||||
|
cp "0"
|
||||||
|
ret c ; ¥¯à ¢¨«ìë¥ ¯ à ¬¥âàë
|
||||||
|
cp "4"
|
||||||
|
jr nc,.get_drive_err ; ¥¯à ¢¨«ìë¥ ¯ à ¬¥âàë
|
||||||
|
;
|
||||||
|
ld b,a
|
||||||
|
inc de
|
||||||
|
ld a,(de)
|
||||||
|
or a
|
||||||
|
jr nz,.get_drive_err ; ¥¯à ¢¨«ìë¥ ¯ à ¬¥âàë
|
||||||
|
;
|
||||||
|
ld a,b
|
||||||
|
;0 - standart
|
||||||
|
;1 - silent
|
||||||
|
;2 - no_files
|
||||||
|
;3 - no_files+silent
|
||||||
|
sub "0"
|
||||||
|
jr z,.checkChar
|
||||||
|
rra
|
||||||
|
ld (read_sys_files.noFiles),a
|
||||||
|
ld (same_fdd.flag),a
|
||||||
|
rla
|
||||||
|
and 1
|
||||||
|
ld (print_string.silentMode),a
|
||||||
|
; ¯à®¢¥à塞 ¡ãª¢ã
|
||||||
|
.checkChar: ld a,c ; ¢®ááâ. 'a'
|
||||||
|
and %1101'1111
|
||||||
|
cp 'A'
|
||||||
|
ret c ; ®è¨¡ª
|
||||||
|
cp 'Z'+1
|
||||||
|
jr nc,.get_drive_err
|
||||||
|
sub 'A'
|
||||||
|
ret
|
||||||
|
;
|
||||||
|
.get_drive_err: scf ; ®è¨¡ª
|
||||||
|
ret
|
||||||
|
;----------------------------------------------------
|
||||||
|
; á®åà. ⥪. á¨áâ¥¬ë© ¤¨áª ¨ ¯ãâì
|
||||||
|
;----------------------------------------------------
|
||||||
|
save_path: ld c,Dss.CurDisk ; ã§ âì ¤¨áª
|
||||||
|
RST ToDSS
|
||||||
|
ld (sys_disk),a
|
||||||
|
ld hl,sys_path
|
||||||
|
ld c,Dss.CurDir ; ã§ âì ¯ãâì
|
||||||
|
RST ToDSS
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------
|
||||||
|
; ¢®ááâ. ⥪. á¨áâ¥¬ë© ¤¨áª ¨ ¯ãâì
|
||||||
|
;----------------------------------------------------
|
||||||
|
restore_path: ld a,(sys_disk)
|
||||||
|
ld c,Dss.ChDisk ; ᬥ ¤¨áª
|
||||||
|
RST ToDSS
|
||||||
|
ld hl,sys_path
|
||||||
|
ld c,Dss.ChDir ; ᬥ ¯ãâ¨
|
||||||
|
RST ToDSS
|
||||||
|
ret
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
disk: db 0 ; ®¬¥à § ¤ ®£® ¤¨áª
|
||||||
|
boot_disk: db 0 ; ®¬¥à boot-¤¨áª á¨á⥬ë
|
||||||
|
|
||||||
|
; à ¡. ï祩ª¨ ⥪. ä ©«
|
||||||
|
;
|
||||||
|
; ç⥨¥: system.exe, ¤ «¥¥ system.dos
|
||||||
|
; § ¯¨áì: system.dos, ¤ «¥¥ system.exe
|
||||||
|
FILE1_PARAMS:
|
||||||
|
.handle: db -1 ; ¤¥áªà¨¯â®à ä ©«
|
||||||
|
.id_blck: db -1 ; ¨¤¥â¨ä. ¢ë¤¥«. ¡«®ª ¯ ¬ïâ¨
|
||||||
|
;
|
||||||
|
.sizeLow: dw 0 ; ¬«.à §àï¤ à §¬¥à ä ©«
|
||||||
|
.sizeHigh: dw 0 ; áâ.à §àï¤
|
||||||
|
.dataSize EQU $-FILE1_PARAMS
|
||||||
|
|
||||||
|
; á®åà. ¤ ë¥ system.exe
|
||||||
|
FILE2_PARAMS:
|
||||||
|
.handle: db -1 ; ¤¥áªà¨¯â®à ä ©«
|
||||||
|
.id_blck: db -1 ; ¨¤¥â¨ä. ¢ë¤¥«. ¡«®ª ¯ ¬ïâ¨
|
||||||
|
;
|
||||||
|
.sizeLow: dw 0 ; ¬«.à §àï¤ à §¬¥à ä ©«
|
||||||
|
.sizeHigh: dw 0 ; áâ.à §àï¤
|
||||||
|
.dataSize EQU $-FILE2_PARAMS
|
||||||
|
|
||||||
|
ASSERT FILE1_PARAMS.dataSize = FILE2_PARAMS.dataSize, "Erorr! FILE1_PARAMS != FILE2_PARAMS"
|
||||||
|
;
|
||||||
|
;
|
||||||
|
;
|
||||||
|
;
|
||||||
|
;
|
||||||
|
; á®®¡é¥¨ï
|
||||||
|
messages: db 0
|
||||||
|
db "\r\nBoot and System files Installer v" ;0
|
||||||
|
db major_version + '0','.'
|
||||||
|
db (minor_version / 10) + '0',(minor_version % 10) + '0','.'
|
||||||
|
db "\r\nBuild date ",SYS_BUILD_DATE
|
||||||
|
;db "\r\nCopyright (c) 2006 Vasil Ivanov."
|
||||||
|
db "\r\nCopyright (c) Sprinter Team."
|
||||||
|
db "\r\n\n",0
|
||||||
|
;
|
||||||
|
db "System successfully installed on disk " ;1
|
||||||
|
.lett1: db "X:\r\n\n",0
|
||||||
|
;
|
||||||
|
db "Installing boot loader...\r\n\n",0 ;2
|
||||||
|
db "Writing system files...\r\n\n",0 ;3
|
||||||
|
;
|
||||||
|
db "Syntax: SYS X:\r\n" ;4
|
||||||
|
db " where X: - drive letter (A..Z)\r\n\n",0
|
||||||
|
;
|
||||||
|
db "Insert destination disk in drive " ;5
|
||||||
|
.lett2: db "X:\r\n"
|
||||||
|
db "and strike any key when ready ...\r\n\n",0
|
||||||
|
;
|
||||||
|
db "Insert system disk in drive " ;6
|
||||||
|
.lett3: db "X:\r\n"
|
||||||
|
db "and strike any key when ready ...\r\n\n",0
|
||||||
|
;
|
||||||
|
db "Can't install boot on this disk\r\n\n",0 ;7
|
||||||
|
db "Invalid drive specification\r\n\n",0 ;8
|
||||||
|
db " Error: Can't open file\r\n\n",0 ;9
|
||||||
|
db " Error: Can't allocate memory\r\n\n",0 ;10
|
||||||
|
db " Error: Need DOS version 1.70.811 or higher\r\n\n",0 ;11
|
||||||
|
db " Error: Reading error\r\n\n",0 ;12
|
||||||
|
db " Error: Can't create file\r\n\n",0 ;13
|
||||||
|
db " Error: Writing error\r\n\n",0 ;14
|
||||||
|
.endmess: db 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ‚뢥á⨠áâப㠯® ¨¤¥ªáã
|
||||||
|
; ¢å®¤: a=¨¤¥ªá áâப¨
|
||||||
|
print_string: call get_string ; ¯®¨áª áâப¨ ¯® ¥¥ ¨¤¥ªáã ¢ 'a'
|
||||||
|
.silentMode+1: ld a,0
|
||||||
|
or a
|
||||||
|
ret nz
|
||||||
|
ld c,Dss.PChars ; ¢ë¢®¤ áâப¨
|
||||||
|
RST ToDSS
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
; ¯®¨áª áâப¨ ¯® ¥¥ ¨¤¥ªáã ¢ 'a'
|
||||||
|
get_string: ld hl,messages ; ᯨ᮪ ¬¥áá £ ¤«ï ¨¤¥ªá. ¤®áâã¯
|
||||||
|
ld bc,messages.endmess - messages ; à §¬¥à ᯨáª
|
||||||
|
inc a
|
||||||
|
ex af,af'
|
||||||
|
xor a
|
||||||
|
ex af,af'
|
||||||
|
get_loop: ex af,af'
|
||||||
|
cpir
|
||||||
|
ret po
|
||||||
|
ret nz
|
||||||
|
ex af,af'
|
||||||
|
dec a
|
||||||
|
jr nz,get_loop
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;====================================================
|
||||||
|
; ‚áï à ¡®â ¯® § £à㧪¥ ä ©« ¢ áâà ¨æë
|
||||||
|
; ¢å®¤: hl=¨¬ï ä ©«
|
||||||
|
; ¢ë室: CF-¯à¨ ®è¨¡ª¥
|
||||||
|
;====================================================
|
||||||
|
read_file: ld a,Dss.Open.R ; ç⥨¥
|
||||||
|
ld c,Dss.Open ; ®âªàëâì ä ©«
|
||||||
|
RST ToDSS
|
||||||
|
jr nc,.ok ; ¡¥§ ®è¨¡®ª
|
||||||
|
;
|
||||||
|
push af
|
||||||
|
ld a,9 ; ¨¤¥ªá "Can't open file"
|
||||||
|
call print_string
|
||||||
|
pop af
|
||||||
|
ret
|
||||||
|
;
|
||||||
|
.ok: ld (FILE1_PARAMS.handle),a ; ¤¥áªà. ä ©«
|
||||||
|
ld hl,0
|
||||||
|
ld ix,0
|
||||||
|
ld bc,Dss.Move_FP.FrEnd ; 㪠§ â¥«ì ª®¥æ ä ©«
|
||||||
|
RST ToDSS
|
||||||
|
ld (FILE1_PARAMS.sizeHigh),hl ; áâ.à §àï¤ à §¬¥à ä ©«
|
||||||
|
ld (FILE1_PARAMS.sizeLow),ix ; ¬«.à §àï¤
|
||||||
|
call get_memory ; à áç. ¨ ¢ë¤¥«. áâà ¨æë ¯®¤ ä ©«
|
||||||
|
jr c,.not_enough ; ¥ å¢ â ¥â ¯ ¬ïâ¨
|
||||||
|
call file_to_bank ; § £à. ä ©« ¢ áâà ¨æë
|
||||||
|
.close_file: push af
|
||||||
|
ld a,(FILE1_PARAMS.handle) ; ¤¥áªà. ä ©«
|
||||||
|
ld c,Dss.Close ; § ªàëâì ä ©«
|
||||||
|
RST ToDSS
|
||||||
|
pop af
|
||||||
|
ret
|
||||||
|
;
|
||||||
|
.not_enough: push af
|
||||||
|
call .close_file
|
||||||
|
ld a,10 ; ¨¤¥ªá "Can't allocate memory"
|
||||||
|
call print_string
|
||||||
|
pop af
|
||||||
|
or a
|
||||||
|
scf
|
||||||
|
ret nz
|
||||||
|
ld a,DSS_Error.sys.NOT_ENOUGH_MEMORY
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------
|
||||||
|
; <20>® à §¬¥àã ä ©« à ááç¨â âì ¥®¡å®¤¨¬®¥
|
||||||
|
; ç¨á«® áâà ¨æ ¨ ¢ë¤¥«¨âì ¨å.
|
||||||
|
; ‚ë室: CF - ¯à¨ ¥å¢ ⪥ ¯ ¬ïâ¨
|
||||||
|
;----------------------------------------------------
|
||||||
|
get_memory: ld hl,(FILE1_PARAMS.sizeHigh) ; áâ.à §àï¤ à §¬¥à ä ©«
|
||||||
|
ld bc,(FILE1_PARAMS.sizeLow) ; ¬«.à §àï¤
|
||||||
|
ld de,#4000 ; ¤¥«¨â¥«ì (à §¬¥à áâà ¨æë)
|
||||||
|
xor a
|
||||||
|
scf
|
||||||
|
malloc1: rr d
|
||||||
|
rr e
|
||||||
|
jr c,malloc2
|
||||||
|
rr h
|
||||||
|
rr l
|
||||||
|
rr b
|
||||||
|
rr c
|
||||||
|
jr nc,malloc1
|
||||||
|
ld a,1
|
||||||
|
jr malloc1
|
||||||
|
;
|
||||||
|
malloc2: or a
|
||||||
|
jr z,$+3 ;!FIXIT $
|
||||||
|
inc bc
|
||||||
|
xor a
|
||||||
|
cp b
|
||||||
|
scf
|
||||||
|
ret nz
|
||||||
|
; ¢ë¤¥«¨âì ¡«®ª ¯ ¬ïâ¨
|
||||||
|
ld b,c ; b=ç¨á«® áâà ¨æ
|
||||||
|
ld c,Dss.GetMem
|
||||||
|
RST ToDSS
|
||||||
|
ld (FILE1_PARAMS.id_blck),a ; ¨¤¥â¨ä. ¡«®ª
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------
|
||||||
|
; ‡ £à㧨âì ä ©« ¢ áâà ¨æë
|
||||||
|
;----------------------------------------------------
|
||||||
|
file_to_bank: ld hl,0
|
||||||
|
ld ix,0
|
||||||
|
ld a,(FILE1_PARAMS.handle) ; ¤¥áªà. ä ©«
|
||||||
|
ld bc,Dss.Move_FP.FrStart ; 㪠§ ⥫ì ç «® ä ©«
|
||||||
|
RST ToDSS
|
||||||
|
ld a,(FILE1_PARAMS.id_blck) ; ¨¤¥â¨ä. ¡«®ª ¯ ¬ïâ¨
|
||||||
|
;ld b,0 ; «®£. ®¬¥à áâà ¨æë ¢ ¡«®ª¥
|
||||||
|
ld bc,0*256 + BIOS.GetMemPage; ¯®«ãç¨âì 䨧. ®¬¥à áâà ¨æë ¢ ¡«®ª¥
|
||||||
|
rst ToBIOS
|
||||||
|
ret c
|
||||||
|
.loop: push af
|
||||||
|
out (SLOT3),a
|
||||||
|
ld hl,page_buffer ; #C000 ªã¤
|
||||||
|
ld de,#4000 ; ᪮«ìª®
|
||||||
|
ld a,(FILE1_PARAMS.handle) ; ¤¥áªà. ä ©«
|
||||||
|
ld c,Dss.Read ; ç¨â âì ä ©«
|
||||||
|
RST ToDSS
|
||||||
|
pop bc
|
||||||
|
jr c,.error
|
||||||
|
; ok
|
||||||
|
cp -1 ; ¯à®ç¨â ® ¬¥ì襥 ç¨á«® ¡ ©â ?
|
||||||
|
ret z ; ¤
|
||||||
|
ld a,b ; a=䨧¨ç. áâà ¨æ
|
||||||
|
ld c,BIOS.GetMemPageNext ; ¯®«ãç¨âì ®¬¥à á«¥¤. 䨧. áâà ¨æë ¡«®ª
|
||||||
|
rst ToBIOS
|
||||||
|
ret c
|
||||||
|
cp #FF
|
||||||
|
jr nz,.loop ; ¥ ¯®á«¥¤ïï áâà ¨æ
|
||||||
|
ret
|
||||||
|
; error
|
||||||
|
.error: ld a,12 ; ¨¤¥ªá "Reading error"
|
||||||
|
call print_string
|
||||||
|
scf
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;====================================================
|
||||||
|
; ‡ ¯¨áì ä ©« ¤¨áª
|
||||||
|
; ¢å®¤: hl=¨¬ï ä ©«
|
||||||
|
; ¢ë室: CF-¯à¨ ®è¨¡ª¥
|
||||||
|
;====================================================
|
||||||
|
write_file: ld a,FAT_ATTR.ARCHIVE ; âਡãâ " à娢ë©"
|
||||||
|
ld c,Dss.Create ; á®§¤ âì ä ©«
|
||||||
|
RST ToDSS
|
||||||
|
jr nc,.create_ok ; ¡¥§ ®è¨¡®ª
|
||||||
|
push af
|
||||||
|
ld a,13 ; ¨¤¥ªá "Can't create file"
|
||||||
|
call print_string
|
||||||
|
pop af
|
||||||
|
ret
|
||||||
|
;
|
||||||
|
.create_ok: ld (FILE1_PARAMS.handle),a ; ¤¥áªà. ä ©«
|
||||||
|
ld hl,read_file.close_file ; § ªà. ä ©«
|
||||||
|
push hl ; â®çª ¢ë室
|
||||||
|
;
|
||||||
|
; ç⥨¥ ä ©« ¨§ ¡ ®ª ¨ § ¯¨áì ¤¨áª
|
||||||
|
ld a,(FILE1_PARAMS.id_blck); ¨¤¥â¨ä. ¡«®ª ¯ ¬ïâ¨
|
||||||
|
;ld b,0 ; «®£. ®¬¥à áâà ¨æë ¢ ¡«®ª¥
|
||||||
|
ld bc,BIOS.GetMemPage ; ¯®«ãç¨âì 䨧. ®¬¥à áâà ¨æë ¢ ¡«®ª¥
|
||||||
|
rst ToBIOS
|
||||||
|
ret c
|
||||||
|
.loop: push af
|
||||||
|
out (SLOT3),a
|
||||||
|
ld hl,(FILE1_PARAMS.sizeLow) ; ¬«.à §àï¤ à §¬¥à ä ©«
|
||||||
|
ld de,(FILE1_PARAMS.sizeHigh) ; áâ.à §àï¤
|
||||||
|
ld bc,#4000
|
||||||
|
xor a
|
||||||
|
sbc hl,bc
|
||||||
|
ld b,a
|
||||||
|
ex de,hl
|
||||||
|
sbc hl,bc
|
||||||
|
ex de,hl
|
||||||
|
jr c,.write_end ; § ¯¨á âì ®áâ ⮪
|
||||||
|
ld (FILE1_PARAMS.sizeLow),hl
|
||||||
|
ld (FILE1_PARAMS.sizeHigh),de
|
||||||
|
;
|
||||||
|
ld hl,page_buffer ; #C000 ®âªã¤
|
||||||
|
ld de,#4000 ; ᪮«ìª®
|
||||||
|
ld a,(FILE1_PARAMS.handle) ; ¤¥áªà. ä ©«
|
||||||
|
ld c,Dss.Write ; § ¯¨áì ä ©«
|
||||||
|
RST ToDSS
|
||||||
|
pop bc
|
||||||
|
jr c,.error
|
||||||
|
; write_ok
|
||||||
|
; [ ] Fixed 24/06/2024 ª ª®©-â® ¯¥à¥¦¨â®ª ¯à®è«®£®
|
||||||
|
;cp -1 ; § ¯¨á ® ¬¥ì襥 ç¨á«® ¡ ©â ?
|
||||||
|
;ld a,DSS_Error.sys.DISK_FULL
|
||||||
|
;scf
|
||||||
|
;jr nz,.error ; ¤ , ¤¨áª¥ ¥â ¬¥áâ
|
||||||
|
;
|
||||||
|
ld a,b ; a=䨧¨ç. áâà ¨æ
|
||||||
|
ld c,BIOS.GetMemPageNext ; ¯®«ãç¨âì ®¬¥à á«¥¤. 䨧. áâà ¨æë ¡«®ª
|
||||||
|
rst ToBIOS
|
||||||
|
ret c
|
||||||
|
cp #FF
|
||||||
|
jr nz,.loop ; ¥ ¯®á«¥¤ïï áâà ¨æ
|
||||||
|
ret
|
||||||
|
;
|
||||||
|
.write_end: pop af ; ¡ « á á⥪
|
||||||
|
ld de,(FILE1_PARAMS.sizeLow) ; ᪮«ìª®
|
||||||
|
ld a,e
|
||||||
|
or d
|
||||||
|
ret z ; 0 ¡ ©â®¢
|
||||||
|
ld hl,page_buffer ; #C000 ®âªã¤
|
||||||
|
ld a,(FILE1_PARAMS.handle) ; ¤¥áªà. ä ©«
|
||||||
|
ld c,Dss.Write ; § ¯¨áì ä ©«
|
||||||
|
RST ToDSS
|
||||||
|
ret nc
|
||||||
|
;
|
||||||
|
.error: push af
|
||||||
|
ld a,14 ; ¨¤¥ªá "Writing error"
|
||||||
|
call print_string
|
||||||
|
pop af
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; „Ž‘-§ £àã§ç¨ª
|
||||||
|
code_loader: include 'dssboot.asm' ; 㨢¥àá «ìë© § £àã§ç¨ª ¤«ï áâ ண® ¨ ®¢®£® ¤®á
|
||||||
|
code_loader.size EQU $-code_loader
|
||||||
|
ASSERT SECTORS_OF_LOADER*512 >= (code_loader.size), "incorrect value of the SECTORS_OF_LOADER variable"
|
||||||
|
|
||||||
|
|
||||||
|
DISPLAY " dssboot size: ", /D,code_loader.size, " bytes. Sectors: ",/D,(code_loader.size/512 + (code_loader.size mod 512)/(code_loader.size mod 512))
|
||||||
|
|
||||||
|
|
||||||
|
; 512 ¡ ©â, ¡ãä¥à boot-ᥪâ®à
|
||||||
|
buffer equ $
|
||||||
|
sys_disk equ buffer+512 ; ¤¨áª á¨á⥬ë
|
||||||
|
sys_path equ sys_disk+1 ; ¯ãâì á¨á⥬ë
|
||||||
|
|
||||||
2276
Console/CONSOLE.ASM
2276
Console/CONSOLE.ASM
File diff suppressed because it is too large
Load Diff
@ -1,71 +0,0 @@
|
|||||||
/*
|
|
||||||
VERSION EQU #00
|
|
||||||
CHDISK EQU #01
|
|
||||||
CURDISK EQU #02
|
|
||||||
DSKINFO EQU #03
|
|
||||||
G_ENTRY EQU #04
|
|
||||||
|
|
||||||
BOOTDSK EQU #09
|
|
||||||
CREATE EQU #0A
|
|
||||||
CREAT_N EQU #0B
|
|
||||||
ERASE EQU #0D
|
|
||||||
DELETE EQU #0E
|
|
||||||
MOVE EQU #0F
|
|
||||||
RENAME EQU #10
|
|
||||||
OPEN EQU #11
|
|
||||||
CLOSE EQU #12
|
|
||||||
READ EQU #13
|
|
||||||
WRITE EQU #14
|
|
||||||
MOVE_FP EQU #15
|
|
||||||
ATTRIB EQU #16
|
|
||||||
GET_D_T EQU #17
|
|
||||||
PUT_D_T EQU #18
|
|
||||||
F_FIRST EQU #19
|
|
||||||
F_NEXT EQU #1A
|
|
||||||
MKDIR EQU #1B
|
|
||||||
RMDIR EQU #1C
|
|
||||||
CHDIR EQU #1D
|
|
||||||
CURDIR EQU #1E
|
|
||||||
SYSTIME EQU #21
|
|
||||||
SETTIME EQU #22
|
|
||||||
|
|
||||||
WAITKEY EQU #30
|
|
||||||
SCANKEY EQU #31
|
|
||||||
ECHOKEY EQU #32
|
|
||||||
CTRLKEY EQU #33
|
|
||||||
EDIT EQU #34
|
|
||||||
K_CLEAR EQU #35
|
|
||||||
|
|
||||||
SETWIN EQU #38
|
|
||||||
SETWIN1 EQU #39
|
|
||||||
SETWIN2 EQU #3A
|
|
||||||
SETWIN3 EQU #3B
|
|
||||||
FREEMEM EQU #3C
|
|
||||||
GETMEM EQU #3D
|
|
||||||
RETMEM EQU #3E
|
|
||||||
SETMEM EQU #3F
|
|
||||||
|
|
||||||
EXEC EQU #40
|
|
||||||
EXIT EQU #41
|
|
||||||
WAIT EQU #42
|
|
||||||
|
|
||||||
GSWITCH EQU #43
|
|
||||||
DOSNAME EQU #44
|
|
||||||
|
|
||||||
SETVMOD EQU #50
|
|
||||||
GETVMOD EQU #51
|
|
||||||
LOCATE EQU #52
|
|
||||||
CURSOR EQU #53
|
|
||||||
SELPAGE EQU #54
|
|
||||||
SCROLL EQU #55
|
|
||||||
CLEAR EQU #56
|
|
||||||
RDCHAR EQU #57
|
|
||||||
WRCHAR EQU #58
|
|
||||||
WINCOPY EQU #59
|
|
||||||
WINREST EQU #5A
|
|
||||||
PUTCHAR EQU #5B
|
|
||||||
PCHARS EQU #5C
|
|
||||||
RES_PRN EQU #5D
|
|
||||||
CTRLPRN EQU #5E
|
|
||||||
PRINT EQU #5F
|
|
||||||
*/
|
|
||||||
@ -1,66 +0,0 @@
|
|||||||
No free file handles
|
|
||||||
Bad Command or file name
|
|
||||||
Access denied
|
|
||||||
Memory allocation error
|
|
||||||
Cannot load COMMAND, system halted
|
|
||||||
Cannot start COMMAND, exiting
|
|
||||||
Top level process aborted, cannot continue
|
|
||||||
Write protect error
|
|
||||||
Invalid unit
|
|
||||||
Not ready
|
|
||||||
Invalid device request
|
|
||||||
Data error
|
|
||||||
Invalid device request parameters
|
|
||||||
Seek error
|
|
||||||
Invalid media type
|
|
||||||
Sector not found
|
|
||||||
Printer out of paper error
|
|
||||||
Write fault error
|
|
||||||
Read fault error
|
|
||||||
General failure
|
|
||||||
Sharing violation
|
|
||||||
Lock violation
|
|
||||||
Invalid disk change
|
|
||||||
FCB unavailable
|
|
||||||
System resource exhausted
|
|
||||||
Code page mismatch
|
|
||||||
Out of input
|
|
||||||
Insufficient disk space
|
|
||||||
Too many parameters
|
|
||||||
Required parameter missing
|
|
||||||
Invalid switch
|
|
||||||
Invalid keyword
|
|
||||||
Parameter value not inallowed range
|
|
||||||
Parameter value not allowed
|
|
||||||
Parameter value not allowed
|
|
||||||
Parameter format not correct
|
|
||||||
Invalid parameter
|
|
||||||
Invalid parameter combination
|
|
||||||
Invalid function
|
|
||||||
File not found
|
|
||||||
Path not found
|
|
||||||
Too many open files
|
|
||||||
Access denied
|
|
||||||
Invalid handle
|
|
||||||
Memory control blocks destroyed
|
|
||||||
Insufficient memory
|
|
||||||
Invalid memory block address
|
|
||||||
Invalid Environment
|
|
||||||
Invalid format
|
|
||||||
Invalid function parameter
|
|
||||||
Invalid data
|
|
||||||
Invalid drive specification
|
|
||||||
Attempt to remove current directory
|
|
||||||
Not same device
|
|
||||||
No more files
|
|
||||||
File exists
|
|
||||||
Cannot make directory entry
|
|
||||||
Fail on INT 24
|
|
||||||
Too many redirections
|
|
||||||
Duplicate redirection
|
|
||||||
Invalid password
|
|
||||||
Invalid parameter
|
|
||||||
Network data fault
|
|
||||||
Function not supported by network
|
|
||||||
Required system component not installed
|
|
||||||
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
21-02-2003 FIX BUG WITH LINE MERGE IN BAT-FILE
|
|
||||||
14-12-2002 ADD BAT-PARAMETERS %1 %2
|
|
||||||
11-12-2002 ADD BAT-VARIABLES %VAR%
|
|
||||||
03-10-2002 FIX BUG WITH OUTPUT AT THE SCREEN IN BAT-MODE
|
|
||||||
2074
Console/SYS.old
2074
Console/SYS.old
File diff suppressed because it is too large
Load Diff
211
DSS/API.asm
Normal file
211
DSS/API.asm
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
|
||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: DOS_X
|
||||||
|
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||||||
|
;//UPDATE: 24-10-1999 DNS Restore module
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;R011 17-04-2023 BAO ‚६¥ë© ª®áâë«ì ¤«ï ¥¤®¯ã᪠¨ï ¯¥à¥¯®«¥¨ï ¡ãä¥à ¯ã⨠ª â «®£
|
||||||
|
;R010 15-04-2023 BAO FIXED BUG WITH CHANGE DISK WITHOUT CHANGE PATH
|
||||||
|
;R009 13-04-2023 BAO FIX BUG WITH PARSING DIRECTORY BUFFER
|
||||||
|
;R13 06-04-2023 BAO ”ãªæ¨î SETBOOT ¬®¦® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४â®)
|
||||||
|
;R12 03-04-2023 BAO „®¡ ¢«¥ äãªæ¨ï à¥áª ¤à ©¢®¢ LD C,8 : RST #10
|
||||||
|
;R008 15-04-2003 DNS SAVE AND RESTORE CUR-PATH MACROS
|
||||||
|
;R11 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
|
||||||
|
;R10 03-04-2003 DNS IMPROVED FN. VERSION
|
||||||
|
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
|
||||||
|
;R007 06-02-2003 DNS FIX BUG IN MASK ROUTINE, IT ALLOW NAMES WHICH BEGAN FROM "." ".NAM"
|
||||||
|
;R006 29-01-2003 DNS FIX BUG WITH SET FILE DATE AND TIME
|
||||||
|
;R005 26-11-2002 DNS FIX ERROR IN CHDIR, DON'T ALLOWED "." FOR ROOT
|
||||||
|
;R004 19-11-2002 DNS DON'T ALLOW DIR & LABEL ATTR FOR FILES
|
||||||
|
;R003 19-11-2002 DNS ADD RESET OF VOLUME LABEL ATTRIBUT
|
||||||
|
;R002 19-11-2002 DNS FIX GET/SET ATTRIBUTES
|
||||||
|
;R101 07-11-2002 DNS FIX BUG WITH SCROLLUP FN. (A=0)
|
||||||
|
;R102 07-11-2002 DNS CORRECT FN. WINCOPY & WINREST, ADD "DI+EI"
|
||||||
|
;R001 16-12-1999 DNS Y2K fix
|
||||||
|
;R06 21-11-1999 DNS FN. DISKINF SUPPORT ALL DISKS
|
||||||
|
;R05 21-11-1999 DNS BUG FIX SIGNATURE #55AA IN BOOT SECTOR
|
||||||
|
;R04 08-11-1999 DNS KILL OLD FUNCTIONS
|
||||||
|
;R03 23-11-1998 DNS BUG FIX (IX+28) -> (IY+28)
|
||||||
|
;R02 21-11-1998 DNS CHANGE FUNCTION "MAKE FAT"
|
||||||
|
;R01 20-11-1998 DNS REPAIR FUNCTION "SAVE"
|
||||||
|
;
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
; VIDEO
|
||||||
|
include 'API/Clear.asm'
|
||||||
|
include 'API/PChars.asm'
|
||||||
|
include 'API/PutChar.asm'
|
||||||
|
include 'API/Locate.asm'
|
||||||
|
include 'API/Cursor.asm'
|
||||||
|
include 'API/RdChar.asm'
|
||||||
|
include 'API/WrChar.asm'
|
||||||
|
include 'API/WinCopy.asm'
|
||||||
|
include 'API/WinRest.asm'
|
||||||
|
include 'API/Scroll.asm'
|
||||||
|
include 'API/SelPage.asm'
|
||||||
|
include 'API/GetVMod.asm'
|
||||||
|
include 'API/SetVMod.asm'
|
||||||
|
;
|
||||||
|
include 'API/Version.asm'
|
||||||
|
include 'API/bootDsk.asm'
|
||||||
|
include 'API/curDisk.asm'
|
||||||
|
include 'API/diskINF.asm'
|
||||||
|
include 'API/ScanDRV.asm'
|
||||||
|
include 'API/Attribute.asm'
|
||||||
|
include 'API/Create.asm'
|
||||||
|
include 'API/Delete.asm'
|
||||||
|
include 'API/Rename.asm'
|
||||||
|
include 'API/Open.asm'
|
||||||
|
include 'API/Close.asm'
|
||||||
|
include 'API/Find.asm'
|
||||||
|
include 'API/ChDisk.asm'
|
||||||
|
include 'API/CurrDir.asm'
|
||||||
|
include 'API/Time.asm'
|
||||||
|
include 'API/GetDateTime.asm'
|
||||||
|
include 'API/SetDateTime.asm'
|
||||||
|
include 'API/ChDir.asm'
|
||||||
|
include 'API/MkDir.asm'
|
||||||
|
include 'API/RmDir.asm'
|
||||||
|
include 'API/DosName.asm'
|
||||||
|
include 'API/Read.asm'
|
||||||
|
include 'API/Write.asm'
|
||||||
|
include 'API/FreeMem.asm'
|
||||||
|
include 'API/GetMem.asm'
|
||||||
|
include 'API/RetMem.asm'
|
||||||
|
include 'API/SetMem.asm'
|
||||||
|
include 'API/SetWin.asm'
|
||||||
|
include 'API/AppInfo.asm'
|
||||||
|
include 'API/Ex_Path.asm'
|
||||||
|
include 'API/GSwitch.asm'
|
||||||
|
include 'API/Environ.ASM'
|
||||||
|
include 'API/Lib_Sub.asm'
|
||||||
|
include "API/EXECUTE.ASM"
|
||||||
|
include "API/Print.asm"
|
||||||
|
include "API/Move_FP.asm"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;R09
|
||||||
|
;„ã¡«ì - CHDISK = OPENDSK
|
||||||
|
;CHDISK:
|
||||||
|
; PUSH AF
|
||||||
|
; LD C,Dss.DRV.Open
|
||||||
|
; RST ToDSS.DRV
|
||||||
|
; POP BC
|
||||||
|
; JP C,NDISK11
|
||||||
|
; LD A,B
|
||||||
|
; LD (CORE_BUFFERS.FS_Buffer.DRIVE),A
|
||||||
|
; CALL RD_BPB
|
||||||
|
; RET C
|
||||||
|
; LD A,(LDRIVE)
|
||||||
|
; AND A
|
||||||
|
; RET
|
||||||
|
;NDISK11:
|
||||||
|
; CP DSS_Error.sys.INVALID_DRIVE
|
||||||
|
; SCF
|
||||||
|
; RET Z
|
||||||
|
; LD A,DSS_Error.sys.NOT_READY
|
||||||
|
; RET
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
;R04
|
||||||
|
;SIZE2CL: LD DE,(B_P_C)
|
||||||
|
; XOR A
|
||||||
|
; SCF
|
||||||
|
;S2C01: RR D
|
||||||
|
; RR E
|
||||||
|
; JR C,S2C02
|
||||||
|
; RR H
|
||||||
|
; RR L
|
||||||
|
; RR B
|
||||||
|
; RR C
|
||||||
|
; JP NC,S2C01
|
||||||
|
; LD A,1
|
||||||
|
; JP S2C01
|
||||||
|
;S2C02: OR A
|
||||||
|
; RET Z
|
||||||
|
; INC BC
|
||||||
|
; RET
|
||||||
|
;L_SEC_X: DW 0
|
||||||
|
;H_SEC_X: DW 0
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
;GOD EQU 1999-1980*512
|
||||||
|
|
||||||
|
;FHAND DB " "
|
||||||
|
; DB " "
|
||||||
|
; DB #20
|
||||||
|
; DW 0,0,0,0,0
|
||||||
|
; DW #0000
|
||||||
|
; DW 5*32+19+GOD
|
||||||
|
;SAVEC DW #0000
|
||||||
|
;SIZEC DW #0000,#0000
|
||||||
|
;=============================================
|
||||||
|
;//MODULE: DOS_X
|
||||||
|
;[END]
|
||||||
|
|
||||||
|
;R11
|
||||||
|
; IF SAVE_PATH_MACRO
|
||||||
|
; SAVE_CUR_PATH
|
||||||
|
; PUSH IX
|
||||||
|
; PUSH IY
|
||||||
|
; PUSH HL
|
||||||
|
; PUSH DE
|
||||||
|
; PUSH BC
|
||||||
|
; PUSH AF
|
||||||
|
;
|
||||||
|
; SET_PAGE_X ENVPAGE
|
||||||
|
; PUSH AF
|
||||||
|
;
|
||||||
|
; CALL CURRDSK
|
||||||
|
; ADD A,"A"
|
||||||
|
; LD HL,TMP_CURDIR_AUTO
|
||||||
|
; LD (HL),A
|
||||||
|
; INC HL
|
||||||
|
; LD A,":"
|
||||||
|
; LD (HL),A
|
||||||
|
; INC HL
|
||||||
|
; CALL CURRDIR_FN
|
||||||
|
;
|
||||||
|
; POP AF
|
||||||
|
; OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
; POP AF
|
||||||
|
; POP BC
|
||||||
|
; POP DE
|
||||||
|
; POP HL
|
||||||
|
; POP IY
|
||||||
|
; POP IX
|
||||||
|
; RET
|
||||||
|
;
|
||||||
|
; BACK_CUR_PATH:
|
||||||
|
; RET NC
|
||||||
|
; .force: PUSH IY
|
||||||
|
; PUSH IX
|
||||||
|
; PUSH HL
|
||||||
|
; PUSH DE
|
||||||
|
; PUSH BC
|
||||||
|
; PUSH AF
|
||||||
|
;
|
||||||
|
; SET_PAGE_X ENVPAGE
|
||||||
|
; PUSH AF
|
||||||
|
;
|
||||||
|
; LD HL,TMP_CURDIR_AUTO
|
||||||
|
; CALL CHDIR
|
||||||
|
;
|
||||||
|
; POP AF
|
||||||
|
; OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
; POP AF
|
||||||
|
; POP BC
|
||||||
|
; POP DE
|
||||||
|
; POP HL
|
||||||
|
; POP IX
|
||||||
|
; POP IY
|
||||||
|
; RET
|
||||||
|
; ENDIF
|
||||||
|
;
|
||||||
101
DSS/API/AppInfo.asm
Normal file
101
DSS/API/AppInfo.asm
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;R10 13-04-2023 BAO FIX BUG WITH PARSING DIRECTORY BUFFER
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
; !FIXIT âãâ ®¤¨ § âã¯ë ¨ ¤¥¡¨«¨§¬
|
||||||
|
; ”ãªæ¨ï #47. <20>®«ã票¥ ¨ä®à¬ 樨 ¯à¨«®¦¥¨ï.
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - ¡ãä¥à ¤ ëå
|
||||||
|
; B - ®¬¥à ¯®¤äãªæ¨¨:
|
||||||
|
; B=0 - ¯®«ã票¥ ¯ à ¬¥â஢ ª®¬ ¤®© áâப¨
|
||||||
|
; B=1 - ¯®«ã票¥ ¯®«®£® ¯ã⨠ª ª â «®£ã ¯à®£à ¬¬ë
|
||||||
|
; B=2 - ¯®«ã票¥ ¯®«®£® ¯ã⨠¨ ¨¬¥¨ ä ©« ¯à®£à ¬¬ë
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;
|
||||||
|
; APPLICATION INFO
|
||||||
|
;====================
|
||||||
|
; B = 0 - GET APP_PARAM
|
||||||
|
; B = 1 - GET APP_PATH
|
||||||
|
; B = 2 - GET APP_FULLNAME
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
;LAST_PSP_PTR: DW 0
|
||||||
|
APPINFO: INC B
|
||||||
|
;
|
||||||
|
DJNZ .FN1
|
||||||
|
; ¯®«ã票¥ ¯ à ¬¥â஢ ª®¬ ¤®© áâப¨ EX DE,HL
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
LD HL,(.LAST_PSP_PTR)
|
||||||
|
LD C,(HL)
|
||||||
|
INC C
|
||||||
|
RET Z
|
||||||
|
INC HL
|
||||||
|
LDIR
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
.FN1: DJNZ .FN2
|
||||||
|
; ¯®«ã票¥ ¯®«®£® ¯ã⨠ª ª â «®£ã ¯à®£à ¬¬ë
|
||||||
|
EX DE,HL
|
||||||
|
.LAST_PSP_PTR+1:
|
||||||
|
LD HL,0
|
||||||
|
LD C,(HL)
|
||||||
|
INC HL
|
||||||
|
ADD HL,BC
|
||||||
|
INC HL
|
||||||
|
INC HL
|
||||||
|
PUSH HL
|
||||||
|
LD BC,#100 ;!HARDCODE ¤«¨ ª®¬¬ ¤®© áâப¨
|
||||||
|
XOR A
|
||||||
|
CPIR
|
||||||
|
DEC HL ;R10 ;[x] ¨á¯à ¢«¥ ¡ £ á ¯ àᨣ®¬ ¡ãä¥à ª â «®£
|
||||||
|
DEC HL ;R10,5 - ¥ â¥á⨫ ;!!!!!
|
||||||
|
LD BC,#100 ;R10 ;[x] ¥ ¡ë«® í⮩ ª®¬ ¤ë, CPDR ¬®£ ¥ ¯à®è¥àáâ¨âì ¢áñ ;!HARDCODE ¤«¨ ª®¬¬ ¤®© áâப¨
|
||||||
|
LD A,'\'
|
||||||
|
CPDR
|
||||||
|
INC HL
|
||||||
|
INC HL
|
||||||
|
POP BC
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
;R10 ;[x] ¬®£«® ¢áñ ¢ ª®á¬®á ã«¥â¥âì
|
||||||
|
LD A,DSS_Error.sys.COMMON_ERROR
|
||||||
|
JR C,.error
|
||||||
|
;
|
||||||
|
LD A,B ;EX HL,A,BC
|
||||||
|
LD B,H
|
||||||
|
LD H,A
|
||||||
|
LD A,C
|
||||||
|
LD C,L
|
||||||
|
LD L,A
|
||||||
|
LDIR
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.FN2: DJNZ .FN3
|
||||||
|
; ¯®«ã票¥ ¯®«®£® ¯ã⨠¨ ¨¬¥¨ ä ©«
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,(.LAST_PSP_PTR)
|
||||||
|
LD C,(HL)
|
||||||
|
INC HL
|
||||||
|
ADD HL,BC
|
||||||
|
INC HL
|
||||||
|
INC HL
|
||||||
|
;
|
||||||
|
.loop LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
JR NZ,.loop
|
||||||
|
;
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.FN3:
|
||||||
|
;
|
||||||
|
; ®è¨¡ª
|
||||||
|
LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
.error: SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
94
DSS/API/Attribute.asm
Normal file
94
DSS/API/Attribute.asm
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
|
||||||
|
; A - ATTRIB
|
||||||
|
; B - MODE
|
||||||
|
; B = #00 GET ATTRIB
|
||||||
|
; B = #01 SET ATTRIB
|
||||||
|
; OUTPUT: A - ATTRIB
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
LD C,A
|
||||||
|
;
|
||||||
|
PUSH HL
|
||||||
|
PUSH BC
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
LD A,C
|
||||||
|
;
|
||||||
|
;
|
||||||
|
INC B
|
||||||
|
DJNZ .B_1
|
||||||
|
; B = 0
|
||||||
|
.READ: ;!TEST ;[x] 16/11/23 optimize get attribute
|
||||||
|
;XOR A
|
||||||
|
;
|
||||||
|
CALL .OPENATR ;R002
|
||||||
|
RET C
|
||||||
|
;!TEST ;[x] 16/11/23 optimize get attribute
|
||||||
|
LD A,(HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT)
|
||||||
|
;LD B,(IY+_sFM.ATTRIBUT)
|
||||||
|
;PUSH BC
|
||||||
|
;CALL CLOSE
|
||||||
|
;POP BC
|
||||||
|
;RET C
|
||||||
|
;LD A,B
|
||||||
|
;
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.B_1: DJNZ .B_2
|
||||||
|
;
|
||||||
|
.WRITE_FN: AND FAT_ATTR.NoVolID ; [x] 2/12/23 ä¨ªá ¤«ï volume ID
|
||||||
|
.WRITE: PUSH AF
|
||||||
|
XOR A
|
||||||
|
;!TEST ;[x] 16/11/23 optimize get attribute
|
||||||
|
LD (OPEN_FN.TMP),A
|
||||||
|
;
|
||||||
|
CALL .OPENATR ;R002
|
||||||
|
;!TEST ;[x] 16/11/23 optimize get attribute
|
||||||
|
CALL NC,OPEN_FN.FM
|
||||||
|
;
|
||||||
|
POP BC
|
||||||
|
RET C
|
||||||
|
SET 7,(IY+_sFM.ACCESS_MODE)
|
||||||
|
;RES 3,B ;CLEAR LABEL ATTR ;R003
|
||||||
|
LD (IY+_sFM.FS_REC.ATTRIBUT),B
|
||||||
|
PUSH BC
|
||||||
|
CALL CLOSE_FN
|
||||||
|
.error: POP BC
|
||||||
|
RET C
|
||||||
|
LD A,B
|
||||||
|
RET
|
||||||
|
;R002
|
||||||
|
; ¢ë室: ¥á«¨ CF = 0, â® DE = record index
|
||||||
|
;!TEST 9/11/23 record index
|
||||||
|
.OPENATR: ;!TEST ;[x] 16/11/23 optimize get attribute
|
||||||
|
;LD (OPEN.TMP),A ; à ¡. ï祩ª (§¤¥áì âਡãâ § ¯¨á¨)
|
||||||
|
;
|
||||||
|
CALL SetPath_GetName ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||||
|
RET C
|
||||||
|
; [ ] 26/06/2024
|
||||||
|
CALL CHECK_64kb_CLUSTER
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
CALL MASK
|
||||||
|
RET C
|
||||||
|
LD A,FAT_ATTR.NoVolID
|
||||||
|
;!TEST ;[x] 16/11/23 optimize get attribute
|
||||||
|
JP SEARCH.Custom
|
||||||
|
;CALL SEARCH.Custom
|
||||||
|
;RET C ; § ¯¨áì ¥ ©¤¥
|
||||||
|
;JP OPEN.FM ; ¯®¨áª ᢮¡. ¤¥áªà¨¯â®à
|
||||||
|
;
|
||||||
|
;
|
||||||
|
; [ ] ; !TODO ¤«ï ª®¬ ¤ë LABEL ¢ Shell
|
||||||
|
; 1. ¯à®¢¥à¨âì çâ® ¢ HL 㪠§ ⮫쪮 ¬¥âª ¢ ª ¢ëçª å
|
||||||
|
; 2. ¥á«¨ ¬¥âª ¡¥§ ¥¤®¯ãá⨬ëå ᨬ¢®«®¢, â® ¤¥« ¥¬ ¥ñ ¥
|
||||||
|
; ⮫쪮 ¢ BPB, ® ¨ ª®à¥¢®¬ à §¤¥«¥, ¨ ç¥ ã¤ «ï¥¬ ª®à¥¢®¬
|
||||||
|
; 3. ®âªàë¢ ¥¬ âà¥¡ã¥¬ë© ¤¨áª ç¥à¥§ .force, ç⮡ á¡à®á¨âì ªíè¨
|
||||||
|
.B_2: DJNZ .error_fn
|
||||||
|
;
|
||||||
|
.error_fn: LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
36
DSS/API/ChDir.asm
Normal file
36
DSS/API/ChDir.asm
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #1D. ‘¬¥ ⥪ã饣® ª â «®£ .
|
||||||
|
; Œ¥ï¥â ⥪ã騩 ª â «®£ ¨ ⥪ã騩 ¤¨áª, ¥á«¨ ® 㪠§ ¢ ä ©«®¢®©
|
||||||
|
; ᯥæ¨ä¨ª 樨. …᫨ ¯ãâì ç¨ ¥âáï á "\" - íâ® ®§ ç ¥â ¯ãâì ®â
|
||||||
|
; ª®à¥¢®£® ª â «®£ , ¨ ç¥ ®â ⥪ã饣®.
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ª â «®£
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;
|
||||||
|
; INPUT: HL - "C:\DIR\DIR\DIR_NAME[\]",0
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
CHDIR_FN:
|
||||||
|
;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
;
|
||||||
|
PUSH HL
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
CALL CHDIR
|
||||||
|
; ¥á«¨ 㤠ç®, â® ª®¯¨à㥬 WorkDirectory ¢ CurrentDirectory
|
||||||
|
JP NC,DIR_PATH_CHANGE.FullCurrent
|
||||||
|
; ¥á«¨ ¥ã¤ ç®, â® ¢®§¢à é ¥¬áï â㤠®âªã¤ ¯à¨è«¨
|
||||||
|
PUSH AF
|
||||||
|
LD HL,CORE_BUFFERS.CurrentDirectory
|
||||||
|
CALL CHDIR
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
CHDIR: CALL SetPath_GetName ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||||
|
RET C
|
||||||
|
LD HL,TMPNAME
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
JP OPENDIR
|
||||||
|
;
|
||||||
24
DSS/API/ChDisk.asm
Normal file
24
DSS/API/ChDisk.asm
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
;
|
||||||
|
;
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
CHDISK_FN: CALL CHDISK
|
||||||
|
RET C
|
||||||
|
PUSH AF
|
||||||
|
CALL DIR_PATH_CHANGE.FullCurrent
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
CHDISK: ;[x] ¡®«¥¥ ª®à४â ï ᬥ ¤¨áª
|
||||||
|
CALL OPENDSK
|
||||||
|
;
|
||||||
|
;R010
|
||||||
|
RET C
|
||||||
|
LD HL,CORE_BUFFERS.WorkDirectory
|
||||||
|
LD (HL),0
|
||||||
|
PUSH AF
|
||||||
|
CALL OPENDIR
|
||||||
|
POP BC
|
||||||
|
RET C
|
||||||
|
LD A,B
|
||||||
|
RET
|
||||||
|
;
|
||||||
24
DSS/API/ChnDisk.asm
Normal file
24
DSS/API/ChnDisk.asm
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
;
|
||||||
|
;
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
CHDISK_FN: CALL CHDISK
|
||||||
|
RET C
|
||||||
|
PUSH AF
|
||||||
|
CALL DIR_PATH_CHANGE.FullCurrent
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
CHDISK: ;[x] ¡®«¥¥ ª®à४â ï ᬥ ¤¨áª
|
||||||
|
CALL OPENDSK
|
||||||
|
;
|
||||||
|
;R010
|
||||||
|
RET C
|
||||||
|
LD HL,CORE_BUFFERS.WorkDirectory
|
||||||
|
LD (HL),0
|
||||||
|
PUSH AF
|
||||||
|
CALL OPENDIR
|
||||||
|
POP BC
|
||||||
|
RET C
|
||||||
|
LD A,B
|
||||||
|
RET
|
||||||
|
;
|
||||||
20
DSS/API/Clear.asm
Normal file
20
DSS/API/Clear.asm
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #56. Žç¨áâ¨âì ®ª®.
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - áâப «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||||
|
; E - á⮫¡¥æ «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||||
|
; H - ¢ëá®â ®ª
|
||||||
|
; L - è¨à¨ ®ª
|
||||||
|
; A - ᨬ¢®« § ¯®«¨â¥«ì
|
||||||
|
; B - âਡãâ § ¯®«¨â¥«ì
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
CLEAR: LD C,A
|
||||||
|
LD A,B
|
||||||
|
LD (.shell_color),A
|
||||||
|
LD A,C
|
||||||
|
LD C,BIOS.LP_CLS_WIN2
|
||||||
|
JP ToBIOS
|
||||||
|
;
|
||||||
|
.shell_color: DB COLORS.CGA.INK.LGRAY
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
91
DSS/API/Close.asm
Normal file
91
DSS/API/Close.asm
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
; [x] fat32 ;!TEST
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
;‚å®¤ë¥ § 票ï:
|
||||||
|
; C - #12
|
||||||
|
; A - ä ©«®¢ë© ¬ ¨¯ã«ïâ®à
|
||||||
|
;‚ëå®¤ë¥ § 票ï:
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
CLOSE_FN:
|
||||||
|
;R008 ;
|
||||||
|
;CLOSE: ;
|
||||||
|
LD (.TMP),A
|
||||||
|
CALL SET_FM
|
||||||
|
RET C
|
||||||
|
LD A,(TASK)
|
||||||
|
CP (IY+_sFM.TASK_NUM)
|
||||||
|
LD A,DSS_Error.sys.ACCESS_DENIED
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
BIT 7,(IY+_sFM.ACCESS_MODE)
|
||||||
|
JR Z,.NOTMODF
|
||||||
|
;
|
||||||
|
LD E,(IY+_sFM.DIR_CLUSTER_L)
|
||||||
|
LD D,(IY+_sFM.DIR_CLUSTER_L+1)
|
||||||
|
PUSH DE
|
||||||
|
; [x] fat32
|
||||||
|
LD E,(IY+_sFM.DIR_CLUSTER_H)
|
||||||
|
LD D,(IY+_sFM.DIR_CLUSTER_H+1)
|
||||||
|
PUSH DE
|
||||||
|
;
|
||||||
|
; [x] 15/11/2023 -bug with bad clusters ;!TEST
|
||||||
|
LD A,(IY+_sFM.DRIVE)
|
||||||
|
CALL OPENDSK
|
||||||
|
JR C,.error
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
|
CALL SET_FM
|
||||||
|
; [x] fat32
|
||||||
|
POP DE
|
||||||
|
LD (IY+_sFM.DIR_CLUSTER_H),E
|
||||||
|
LD (IY+_sFM.DIR_CLUSTER_H+1),D
|
||||||
|
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H),E
|
||||||
|
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1),D
|
||||||
|
;
|
||||||
|
POP DE
|
||||||
|
LD (IY+_sFM.DIR_CLUSTER_L),E
|
||||||
|
LD (IY+_sFM.DIR_CLUSTER_L+1),D
|
||||||
|
; [x] 15/11/2023 -bug with bad clusters ;!TEST
|
||||||
|
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),E
|
||||||
|
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),D
|
||||||
|
;
|
||||||
|
CALL LOADDIR
|
||||||
|
.TMP+1: LD A,0
|
||||||
|
CALL SET_FM
|
||||||
|
;
|
||||||
|
SET_PAGE_X DIRPAGE
|
||||||
|
;
|
||||||
|
;!TEST 9/11/23 record index
|
||||||
|
; LD HL,DIR
|
||||||
|
; LD DE,FAT_DIRECTORY_RECORD
|
||||||
|
; LD C,(IY+_sFM.HANDLE)
|
||||||
|
; LD B,(IY+_sFM.HANDLE+1)
|
||||||
|
; JR .CLOSE2
|
||||||
|
; .CLOSE1:
|
||||||
|
; ADD HL,DE
|
||||||
|
; DEC BC
|
||||||
|
; .CLOSE2:
|
||||||
|
; LD A,B
|
||||||
|
; OR C
|
||||||
|
; JR NZ,.CLOSE1
|
||||||
|
LD L,(IY+_sFM.HANDLE)
|
||||||
|
LD H,(IY+_sFM.HANDLE+1)
|
||||||
|
;
|
||||||
|
LD D,YH
|
||||||
|
LD E,YL
|
||||||
|
EX DE,HL
|
||||||
|
;PUSH HL
|
||||||
|
;SET_PAGE_X DIRPAGE
|
||||||
|
;POP HL
|
||||||
|
LD BC,FAT_DIRECTORY_RECORD
|
||||||
|
LDIR
|
||||||
|
OUT (SLOT3),A
|
||||||
|
CALL SAVEDIR
|
||||||
|
.NOTMODF:
|
||||||
|
LD A,(.TMP)
|
||||||
|
JP RES_FM
|
||||||
|
;
|
||||||
|
.error: POP DE
|
||||||
|
POP DE
|
||||||
|
RET
|
||||||
|
;
|
||||||
111
DSS/API/Create.asm
Normal file
111
DSS/API/Create.asm
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
|
||||||
|
; A - File attribute
|
||||||
|
; OUTPUT: A - FM
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
CREATE: ;!TEST Current Dir ;[x] 15/10/23 ;CREATE_FN:
|
||||||
|
PUSH HL
|
||||||
|
LD C,A
|
||||||
|
;
|
||||||
|
PUSH BC
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
LD A,C
|
||||||
|
;
|
||||||
|
CALL .Prepare
|
||||||
|
RET C
|
||||||
|
CALL SEARCH.File
|
||||||
|
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
|
||||||
|
;CALL NC,DEL_FN.DELETE ;FILE EXIST RECREAT
|
||||||
|
CALL NC,.FILE_EXISTS_DEL ;FILE EXIST RECREAT
|
||||||
|
CP DSS_Error.sys.FILE_NOT_FOUND
|
||||||
|
JR Z,.DO
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
.FILE_EXISTS_DEL:
|
||||||
|
CALL DELETE_REC_FAT
|
||||||
|
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
|
||||||
|
; OUTPUT: A - FM
|
||||||
|
.NEW: ;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
PUSH HL
|
||||||
|
LD C,A
|
||||||
|
;
|
||||||
|
PUSH BC
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
LD A,C
|
||||||
|
;
|
||||||
|
CALL .Prepare
|
||||||
|
RET C
|
||||||
|
CALL SEARCH.File
|
||||||
|
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
|
||||||
|
; LD A,DSS_Error.sys.FILE_EXISTS
|
||||||
|
; CCF
|
||||||
|
; RET C
|
||||||
|
JR NC,.FILE_EXISTS
|
||||||
|
CP DSS_Error.sys.FILE_NOT_FOUND
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
;
|
||||||
|
;
|
||||||
|
;no_file_found
|
||||||
|
.DO: ; FAT_DIRECTORY_RECORD.NAME + .EXT
|
||||||
|
LD HL,MASKARE
|
||||||
|
LD DE,HANDBUF
|
||||||
|
LD BC,11
|
||||||
|
LDIR
|
||||||
|
EX DE,HL
|
||||||
|
.TMP+1: LD A,0
|
||||||
|
; FAT_DIRECTORY_RECORD.ATTRIBUT
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
LD BC,#0A00 ;!HARDCODE
|
||||||
|
; .RESERVED_NT .. .FIRST_CLUSTER_H
|
||||||
|
.loop1: LD (HL),C
|
||||||
|
INC HL
|
||||||
|
DJNZ .loop1
|
||||||
|
; .TIME .. .DATE
|
||||||
|
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
|
||||||
|
;
|
||||||
|
LD BC,#0600
|
||||||
|
;
|
||||||
|
.loop2: LD (HL),C
|
||||||
|
INC HL
|
||||||
|
DJNZ .loop2
|
||||||
|
;
|
||||||
|
CALL WRT_HND
|
||||||
|
RET C
|
||||||
|
;CALL SAVEDIR
|
||||||
|
.PATH0+1: LD HL,0
|
||||||
|
XOR A
|
||||||
|
LD (OPEN_FN.TMP),A
|
||||||
|
JP OPEN_FN.FILE ;R008
|
||||||
|
;
|
||||||
|
.Prepare: ;AND #E7 ;R004 %76A00SHR = !FAT_ATTR ;!HARDCODE
|
||||||
|
AND FAT_ATTR.NoDIRnoVolID
|
||||||
|
LD (.TMP),A
|
||||||
|
LD (.PATH0),HL
|
||||||
|
CALL SetPath_GetName
|
||||||
|
RET C
|
||||||
|
; [ ] 26/06/2024
|
||||||
|
CALL CHECK_64kb_CLUSTER
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
; [ ] 25/02/2025 - ä ©« ¥ á®§¤ áâáï, ¥á«¨ ¥â ᢮¡®¤®£® ¬ ¨¯ã«ïâ®à
|
||||||
|
CALL GET_FM
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
JP MASK
|
||||||
|
;
|
||||||
|
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
|
||||||
|
.FILE_EXISTS: LD A,DSS_Error.sys.FILE_EXISTS
|
||||||
|
CCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
24
DSS/API/CurrDir.asm
Normal file
24
DSS/API/CurrDir.asm
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #1E. ˆä®à¬ æ¨ï ® ⥪ã饬 ª â «®£¥.
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - ¡ãä¥à ¢ ¯ ¬ï⨠256 ¡ ©â
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
CURRDIR: LD DE,CORE_BUFFERS.WorkDirectory
|
||||||
|
JR CURRDIR_FN.skip
|
||||||
|
CURRDIR_FN:
|
||||||
|
LD DE,CORE_BUFFERS.CurrentDirectory
|
||||||
|
.skip: EX DE,HL
|
||||||
|
LD BC,DIRECTORY_PATH_LENGTH ;[x] 15/11/2023 ¬®£«® ¢ë©â¨ § ¯à¥¤¥«ë ¡ãä¥à
|
||||||
|
XOR A
|
||||||
|
.loop: CP (HL)
|
||||||
|
LDI
|
||||||
|
JP PO,.error ;[x] 15/11/2023 ¬®£«® ¢ë©â¨ § ¯à¥¤¥«ë ¡ãä¥à
|
||||||
|
JR NZ,.loop
|
||||||
|
RET
|
||||||
|
;[x] 15/11/2023 ¬®£«® ¢ë©â¨ § ¯à¥¤¥«ë ¡ãä¥à
|
||||||
|
.error: LD A,DSS_Error.sys.TOO_DEEP_DIR_DEPTH
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;
|
||||||
10
DSS/API/Cursor.asm
Normal file
10
DSS/API/Cursor.asm
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #53. “§ âì ¯®«®¦¥¨¥ ªãàá®à .
|
||||||
|
;
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: D - áâப ªãàá®à
|
||||||
|
; E - ª®«®ª ªãàá®à
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
CURSOR: LD C,BIOS.LP_GET_PLACE
|
||||||
|
JP ToBIOS
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
34
DSS/API/Delete.asm
Normal file
34
DSS/API/Delete.asm
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
; [x] fat32 ;!TEST
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; INPUT: HL - "c:\dir\filename.ext",#00 without simbols * ?
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
DEL_FN: ;Current Dir ;[x] 15/10/23
|
||||||
|
PUSH HL
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
CALL SetPath_GetName ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||||
|
RET C
|
||||||
|
; [ ] 26/06/2024
|
||||||
|
CALL CHECK_64kb_CLUSTER
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
CALL MASK
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
;!TEST optimization
|
||||||
|
;LD HL,MASKARE
|
||||||
|
;LD BC,11
|
||||||
|
;LD A,"?"
|
||||||
|
;CPIR
|
||||||
|
;LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
;SCF
|
||||||
|
CALL CHECK_NAME
|
||||||
|
;
|
||||||
|
RET Z
|
||||||
|
CALL LOADDIR
|
||||||
|
CALL SEARCH.File
|
||||||
|
RET C
|
||||||
|
JP DELETE_REC_FAT ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||||
|
;
|
||||||
22
DSS/API/DosName.asm
Normal file
22
DSS/API/DosName.asm
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
;‚å®¤ë¥ § 票ï:
|
||||||
|
; C - #44
|
||||||
|
; B = 0, ¯à¥®¡à §®¢ âì ¨§ 11 ᨬ¢®«ì®£® ä®à¬ â ¢ ä®à¬ â „Ž‘
|
||||||
|
; HL - 11 ᨬ¢®«®¢ ¨¬¥¨ ä ©«
|
||||||
|
; DE - ¡ãä¥à ¤«ï ¨¬¥¨ ¢ ä®à¬ ⥠„Ž‘
|
||||||
|
; B = 1, ¯à¥®¡à §®¢ âì ¨§ ä®à¬ â „Ž‘ ¢ 11 ᨬ¢®«ìë© ä®à¬ â
|
||||||
|
; HL - ¨¬ï ä ©« ¢ ä®à¬ ⥠„Ž‘
|
||||||
|
; DE - 11 ᨬ¢®«®¢ ¨¬¥¨ ä ©«
|
||||||
|
;‚ëå®¤ë¥ § 票ï:
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
DOSNAME:
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JP Z,GetName
|
||||||
|
DEC B
|
||||||
|
JP Z,MASK.custom
|
||||||
|
LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
294
DSS/API/Environ.asm
Normal file
294
DSS/API/Environ.asm
Normal file
@ -0,0 +1,294 @@
|
|||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: ENVIRON
|
||||||
|
;//CREATE: 10-11-2002 AUTHOR: Denis Parinov
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;R02 13-05-2023 BAO ˆ¨æ¨ «¨§ æ¨ï ¯¥à¥¬¥®© BOOTDSK ¯à¨ áâ àâ¥
|
||||||
|
;R03 09-03-2007 VAS ”ãªæ¨ï ENV_EX ⥯¥àì ®¡à¥§ ¥â ᫨誮¬ ¤«¨ãî áâப㠯¥à¥¤ ¢ë室®¬
|
||||||
|
;R01 19-11-2002 DNS CORRECT DE ADDRESS IN GETENV
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #46. ‘¨á⥬®¥ ®ªà㦥¨¥.
|
||||||
|
;
|
||||||
|
; ¢å®¤: B - ®¬¥à ¯®¤äãªæ¨¨:
|
||||||
|
; B=#FF, ¨¨æ¨ «¨§ æ¨ï
|
||||||
|
; B=0, ¯®«ã票¥ á¨á⥬®£® ®ªà㦥¨ï.
|
||||||
|
; HL - ¡ãä¥à
|
||||||
|
; B=1, ¯®«ãç¨âì ¯¥à¥¬¥ãî ®ªà㦥¨ï.
|
||||||
|
; HL - ¨¬ï ¯¥à¥¬¥®©
|
||||||
|
; DE - ¡ãä¥à ¤«ï § ç¥¨ï ¯¥à¥¬¥®©
|
||||||
|
; B=2, ãáâ ®¢¨âì/㤠«¨âì ¯¥à¥¬¥ãî ®ªà㦥¨ï
|
||||||
|
; HL - <20>…<EFBFBD>…Œ…<C592><E280A6>€Ÿ=‡<>€—…<E28094>ˆ…
|
||||||
|
; ‚ ª®æ¥ áâப¨ ®«ì.
|
||||||
|
|
||||||
|
; ¢ë室: A - á®áâ®ï¨¥, ¥á«¨ CF=0
|
||||||
|
; DE - 㪠§ë¢ ¥â ª®¥æ ¡ãä¥à (⮫쪮 ¤«ï B=1)
|
||||||
|
; A=#FF - ¯¥à¥¬¥ ï ®¡ à㦥
|
||||||
|
; A=0 - ¯¥à¥¬¥ ï ¥ ®¡ à㦥
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
ENVIRON:
|
||||||
|
INC B
|
||||||
|
JR Z,INITENV ; B=#FF
|
||||||
|
DEC B
|
||||||
|
JR Z,READENV ; B=0. ¯®«ãç¨âì á¨áâ. ®ªà㦥¨¥
|
||||||
|
DEC B
|
||||||
|
JP Z,GETENV ; B=1. ¯®«ãç¨âì ¯¥à¥¬. ®ªà㦥¨ï
|
||||||
|
DEC B
|
||||||
|
JP Z,SETENV ; B=2. ãáâ ®¢¨âì/㤠«¨âì ¯¥à¥¬. ®ªà㦥¨ï
|
||||||
|
LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
;-------------------------------------------------
|
||||||
|
; ˆ¨æ¨ «¨§ æ¨ï ¡ãä¥à ¯¥à¥¬¥ëå ®ªà㦥¨ï
|
||||||
|
;-------------------------------------------------
|
||||||
|
INITENV:
|
||||||
|
SET_PAGE_X ENVPAGE
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
;R02
|
||||||
|
LD A,(BOOTDSK.NUM)
|
||||||
|
ADD A,'A'
|
||||||
|
LD (DEFAULT_ENV.boot_disk),A
|
||||||
|
;
|
||||||
|
LD DE,ENVIRONMENT ; ç «® ¡ãä¥à ¯¥à¥¬¥ëå ®ªà㦥¨ï
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
LD HL,DEFAULT_ENV
|
||||||
|
LD BC,DEF_ENV_SIZE
|
||||||
|
LDIR
|
||||||
|
LD (DE),A
|
||||||
|
EX DE,HL
|
||||||
|
LD DE,ENVIRONMENT
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
LD (ENVSIZE),HL
|
||||||
|
;
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;-------------------------------------------------
|
||||||
|
; <20>®«ãç¨âì á¨áâ. ®ªà㦥¨¥
|
||||||
|
;-------------------------------------------------
|
||||||
|
READENV:
|
||||||
|
PUSH HL
|
||||||
|
|
||||||
|
SET_PAGE_X ENVPAGE
|
||||||
|
|
||||||
|
LD H,A
|
||||||
|
LD C,SLOT3
|
||||||
|
IN L,(C)
|
||||||
|
EXX
|
||||||
|
|
||||||
|
LD HL,ENVIRONMENT
|
||||||
|
INC HL
|
||||||
|
POP DE
|
||||||
|
LD BC,(ENVSIZE)
|
||||||
|
EXX
|
||||||
|
;
|
||||||
|
.loop: OUT (C),L
|
||||||
|
EXX
|
||||||
|
LD A,(HL)
|
||||||
|
EXX
|
||||||
|
OUT (C),H
|
||||||
|
EXX
|
||||||
|
LD (DE),A
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DEC BC
|
||||||
|
LD A,B
|
||||||
|
OR C
|
||||||
|
EXX
|
||||||
|
JR NZ,.loop
|
||||||
|
//XOR A
|
||||||
|
;A=0
|
||||||
|
RET
|
||||||
|
|
||||||
|
;-------------------------------------------------
|
||||||
|
; <20>®«ãç¨âì ¯¥à¥¬¥ãî ®ªà㦥¨ï
|
||||||
|
;-------------------------------------------------
|
||||||
|
GETENV: PUSH DE
|
||||||
|
CALL ENV_EX ; ᪮¯¨à. áâப㠯¥à¥¬. ®ªàã¦. ¢ ¡ãä¥àë
|
||||||
|
|
||||||
|
SET_PAGE_X ENVPAGE
|
||||||
|
EX AF,AF'
|
||||||
|
|
||||||
|
CALL F_ENV ; RET: DE - VAR VALUE; HL - VAR ADDRESS; BC - ENVIRONMENT SIZE
|
||||||
|
POP DE
|
||||||
|
LD A,0
|
||||||
|
LD (DE),A
|
||||||
|
JR NC,.exit
|
||||||
|
.loop: LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
JR NZ,.loop
|
||||||
|
DEC DE ;R01
|
||||||
|
LD A,#FF
|
||||||
|
|
||||||
|
.exit: EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
EX AF,AF'
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;-------------------------------------------------
|
||||||
|
; “áâ ®¢¨âì/“¤ «¨âì ¯¥à¥¬¥ãî ®ªà㦥¨ï
|
||||||
|
;
|
||||||
|
; ¢å®¤: hl=¨¬ï ¯¥à¥¬. ¨ § 票¥, à §¤¥«. ᨬ¢®«®¬ "="
|
||||||
|
;-------------------------------------------------
|
||||||
|
SETENV: CALL ENV_EX ; ᪮¯¨à. áâப㠯¥à¥¬. ®ªàã¦. ¢ ¡ãä¥àë
|
||||||
|
|
||||||
|
SET_PAGE_X ENVPAGE
|
||||||
|
PUSH AF
|
||||||
|
|
||||||
|
CALL F_ENV ; RET: DE - VAR VALUE; HL - VAR ADDRESS; BC - ENVIRONMENT SIZE
|
||||||
|
JR NC,PENV
|
||||||
|
XOR A
|
||||||
|
CPIR
|
||||||
|
LD A,B
|
||||||
|
OR C
|
||||||
|
JR Z,PENV
|
||||||
|
LDIR
|
||||||
|
PENV LD A,(ENVVALUE)
|
||||||
|
OR A
|
||||||
|
JR Z,CLR_ENV
|
||||||
|
LD HL,ENVNAME
|
||||||
|
F_EVN2 LD A,(HL)
|
||||||
|
LDI
|
||||||
|
CP "="
|
||||||
|
JR NZ,F_EVN2
|
||||||
|
LD HL,ENVVALUE
|
||||||
|
F_EVN3 LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
JR NZ,F_EVN3
|
||||||
|
CLR_ENV XOR A
|
||||||
|
LD (DE),A
|
||||||
|
LD HL,ENVIRONMENT
|
||||||
|
EX DE,HL
|
||||||
|
SBC HL,DE
|
||||||
|
LD (ENVSIZE),HL
|
||||||
|
;
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
; RET:
|
||||||
|
; DE - VAR VALUE
|
||||||
|
; HL - VAR ADDRESS
|
||||||
|
; BC - ENVIRONMENT SIZE
|
||||||
|
F_ENV LD HL,ENVIRONMENT
|
||||||
|
LD BC,(ENVSIZE)
|
||||||
|
PUSH HL
|
||||||
|
F_EVN0 POP DE
|
||||||
|
LD DE,ENVNAME
|
||||||
|
XOR A
|
||||||
|
CPIR
|
||||||
|
PUSH HL
|
||||||
|
F_EVN1 LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JR Z,END_OF_ENV
|
||||||
|
LD A,(DE)
|
||||||
|
CP (HL)
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DEC BC
|
||||||
|
JR NZ,F_EVN0
|
||||||
|
CP "="
|
||||||
|
JR NZ,F_EVN1
|
||||||
|
SCF
|
||||||
|
END_OF_ENV
|
||||||
|
POP DE
|
||||||
|
RET
|
||||||
|
|
||||||
|
;-----------------------------------------------------------
|
||||||
|
; ‘ª®¯¨à®¢ âì áâப㠯¥à¥¬¥®© ®ªà㦥¨ï ¢ ¡ãä¥àë
|
||||||
|
; (¨¬ï ¨ § 票¥ ¢ à §ë¥ ¡ãä¥àë)
|
||||||
|
; ¢å®¤: hl=¨¬ï ¯¥à¥¬. ¨ § 票¥, à §¤¥«. ᨬ¢®«®¬ "="
|
||||||
|
;-----------------------------------------------------------
|
||||||
|
ENV_EX: LD B,ENVIRONMENT_STRING_LENGTH ; 255 ¬ ªá. ¤«¨ áâப¨ (¨¬ï+§ ç.)
|
||||||
|
LD DE,ENVNAME ; ªã¤
|
||||||
|
ENV_E0: XOR A
|
||||||
|
LD (DE),A
|
||||||
|
LD (ENVVALUE),A
|
||||||
|
; ᪮¯¨à. ¢ "ENVNAME" ¨¬ï ¯¥à¥¬¥®©
|
||||||
|
ENV_E1: LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CP "="
|
||||||
|
JR Z,EQUAL_SG
|
||||||
|
OR A
|
||||||
|
JR Z,ENV_E3
|
||||||
|
CALL UPPER
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
DJNZ ENV_E1
|
||||||
|
;R03
|
||||||
|
; ᫨誮¬ ¤«¨ ï áâப
|
||||||
|
ld a,b
|
||||||
|
ld (de),a ; ®¡à¥§ âì ᫨誮¬ ¤«¨ãî áâபã
|
||||||
|
inc de
|
||||||
|
;
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
; § 票¥ ¥ § ¤ ®
|
||||||
|
ENV_E3: LD A,"="
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
RET
|
||||||
|
; § 票¥ § ¤ ®
|
||||||
|
EQUAL_SG: LD (DE),A ; á®åà. "="
|
||||||
|
INC DE
|
||||||
|
XOR A
|
||||||
|
LD (DE),A ; ¢ ª®¥æ ¨¬¥¨ ¯¥à¥¬.
|
||||||
|
; ᪮¯¨à. ¢ "ENVVALUE" § 票¥ ¯¥à¥¬¥®© (áâப㠯ã⥩)
|
||||||
|
LD DE,ENVVALUE ; 512 ¡ ©â, ¡ãä¥à
|
||||||
|
LD (DE),A
|
||||||
|
LD C,#FF ; ç⮡ë "ldi" ¥ ¯®à⨫ "b"
|
||||||
|
ENV_E2 LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
RET Z ; ª®¥æ áâப¨ § ç. ¯¥à¥¬¥®©
|
||||||
|
DJNZ ENV_E2
|
||||||
|
;R03
|
||||||
|
; ᫨誮¬ ¤«¨ ï áâப
|
||||||
|
ld a,b
|
||||||
|
ld (de),a ; ®¡à¥§ âì ᫨誮¬ ¤«¨ãî áâபã
|
||||||
|
inc de
|
||||||
|
;
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
ENVNAME EQU CORE_BUFFERS.EXEBUFF ;DS 32
|
||||||
|
ENVVALUE EQU CORE_BUFFERS.BUFFER //#3800 ; BUFFER ;DS 128
|
||||||
|
|
||||||
|
ENVSIZE DW DEF_ENV_SIZE ;E_END-ENVIRONMENT ;160
|
||||||
|
|
||||||
|
ENVIRONMENT EQU ENVADDR
|
||||||
|
|
||||||
|
DEFAULT_ENV: DB 'BOOTDSK=' ;R02
|
||||||
|
.boot_disk: DB 'X:',0 ;R02
|
||||||
|
; DB 'SYSTEM=C:\system.exe',0
|
||||||
|
; DB 'PATH=\SYSTEM\;\COMMAND\;',0
|
||||||
|
DEF_ENV_SIZE EQU $-DEFAULT_ENV ;R02
|
||||||
|
|
||||||
|
|
||||||
|
; DB 'SYSTEM=C:\system.exe',0
|
||||||
|
; DB 'PATH=\SYSTEM\;\COMMAND\;',0
|
||||||
|
; DB 0
|
||||||
|
; DB 'SYSTEM=C:\system.exe',0
|
||||||
|
; DB 'PATH=C:\;\FN\;',0
|
||||||
|
; DB 'OS=ESTEX',0
|
||||||
|
; DB 'VAR1=000',0
|
||||||
|
; DB 'OSNAME=ESTEX 2002',0
|
||||||
|
; DB 0
|
||||||
240
DSS/API/Ex_Path.asm
Normal file
240
DSS/API/Ex_Path.asm
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #45. <20> §¡®à ª®¬ ¤®© áâப¨.
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ â¥«ì ª®¬ ¤®© áâப¨
|
||||||
|
; DE - 㪠§ â¥«ì ¡ãä¥à ¯®«ì§®¢ ⥫ï
|
||||||
|
; B - ®¬¥à ¯®¤äãªæ¨¨:
|
||||||
|
; 0 - <20> §®¡à âì áâபã
|
||||||
|
; 1 - ‚뤥«¨âì ¨¬ï ¤¨áª
|
||||||
|
; 2 - ‚뤥«¨âì ¤¨à¥ªâ®à¨î
|
||||||
|
; 3 - ‚뤥«¨âì ¨¬ï ä ©«
|
||||||
|
; 4 - ‚뤥«¨âì à áè¨à¥¨¥ ä ©«
|
||||||
|
; 5 - ‚뤥«¨âì ¨¬ï ¤¨áª , ¯ãâì ª ä ©«ã, ¨¬ï ä ©« ¨ à áè. ä ©«
|
||||||
|
; 6 - ‡ १¥à¢¨à®¢ ® ;!TODO ¯à¥®¡à §®¢ âì ®â®á¨â¥«ìë© ¯ãâì ¢ ¯®«ë© ; [ ]
|
||||||
|
; 7 - ‚뤥«¨âì ¯ à ¬¥âà ª®¬ ¤®© áâப¨
|
||||||
|
; 8 - <20>८¡à §®¢ âì ¨§ 11 ᨬ¢®«ì®£® ä®à¬ â ¢ ä®à¬ â „Ž‘
|
||||||
|
; 9 - <20>८¡à §®¢ âì ¨§ ä®à¬ â „Ž‘ ¢ 11 ᨬ¢®«ìë© ä®à¬ â
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
GLOB_PR EQU 7 ;%10000000
|
||||||
|
DRIV_PR EQU 3 ;%00001000
|
||||||
|
PATH_PR EQU 2 ;%00000100
|
||||||
|
EXTN_PR EQU 1 ;%00000010
|
||||||
|
NAM_PR EQU 0 ;%00000001
|
||||||
|
|
||||||
|
EX_PATH: EXX
|
||||||
|
LD HL,NM_PATH_A ;BUILT-IN BUFFER FOR PATH ;!!!!! ¨á¯®«ì§ã¥âáï ®¡é¨© ¡ãä¥à
|
||||||
|
LD (NM_PATH),HL
|
||||||
|
LD HL,NM_NAME_A
|
||||||
|
LD (NM_NAME),HL
|
||||||
|
LD HL,NM_EXTN_A
|
||||||
|
LD (NM_EXTN),HL
|
||||||
|
LD HL,NM_DRIVE_A
|
||||||
|
LD (NM_DRIVE),HL
|
||||||
|
EXX
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JR Z,.FULL ;0 ; à §®¡à âì áâபã
|
||||||
|
DEC B
|
||||||
|
JR Z,.GET_DRIVE ;1 ; ¢ë¤¥«¨âì ¨¬ï ¤¨áª
|
||||||
|
DEC B
|
||||||
|
JR Z,.GET_PATH ;2 ; ¢ë¤¥«¨âì ¤¨à¥ªâ®à¨î
|
||||||
|
DEC B
|
||||||
|
JR Z,.GET_NAME ;3 ; ¢ë¤¥«¨âì ¨¬ï ä ©«
|
||||||
|
DEC B
|
||||||
|
JR Z,.GET_TYPE ;4 ; ¢ë¤¥«¨âì à áè¨à¥¨¥ ä ©«
|
||||||
|
DEC B
|
||||||
|
JR Z,.GET_ALL_EX ;5 ; ¢ë¤¥«¨âì ¤¨áª, ¯ãâì, ä ©« ¨ à áè.
|
||||||
|
DEC B
|
||||||
|
JR Z,.EX_RESR ;6 ; § १¥à¢¨à®¢ ®
|
||||||
|
DEC B
|
||||||
|
JP Z,GSWITCH ;7 ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
|
||||||
|
DEC B
|
||||||
|
JP Z,GetName ;8 ; ¯à¥®¡à. ¨¬ï 11 -> 8.3 ä®à¬ â
|
||||||
|
DEC B
|
||||||
|
JP Z,MASK.custom ;9 ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â
|
||||||
|
.EX_RESR: LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
; ‚뤥«¨âì ¨¬ï ¤¨áª
|
||||||
|
.GET_DRIVE: LD (NM_DRIVE),DE
|
||||||
|
CALL .FULL
|
||||||
|
RET C
|
||||||
|
LD DE,(NM_DRIVE)
|
||||||
|
LD A,(DE)
|
||||||
|
DEC A
|
||||||
|
CP #FF
|
||||||
|
RET Z
|
||||||
|
CP "A"-1
|
||||||
|
JR C,.GD_error
|
||||||
|
CP "Z"
|
||||||
|
JR NC,.GD_error
|
||||||
|
SUB "A"-1
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.GD_error: LD A,DSS_Error.sys.INVALID_DRIVE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
; ‚뤥«¨âì ¤¨à¥ªâ®à¨î
|
||||||
|
.GET_PATH: LD (NM_PATH),DE
|
||||||
|
JR .FULL
|
||||||
|
|
||||||
|
; ‚뤥«¨âì ¨¬ï ä ©«
|
||||||
|
.GET_NAME: LD (NM_NAME),DE
|
||||||
|
JR .FULL
|
||||||
|
|
||||||
|
; ‚뤥«¨âì à áè¨à¥¨¥ ä ©«
|
||||||
|
.GET_TYPE: LD (NM_EXTN),DE
|
||||||
|
JR .FULL
|
||||||
|
; ‚뤥«¨âì ¤¨áª, ¯ãâì, ä ©« ¨ à áè.
|
||||||
|
.GET_ALL_EX: EX DE,HL
|
||||||
|
LD C,(HL)
|
||||||
|
INC HL
|
||||||
|
LD B,(HL)
|
||||||
|
INC HL
|
||||||
|
LD (NM_DRIVE),BC
|
||||||
|
LD C,(HL)
|
||||||
|
INC HL
|
||||||
|
LD B,(HL)
|
||||||
|
INC HL
|
||||||
|
LD (NM_PATH),BC
|
||||||
|
LD C,(HL)
|
||||||
|
INC HL
|
||||||
|
LD B,(HL)
|
||||||
|
INC HL
|
||||||
|
LD (NM_NAME),BC
|
||||||
|
LD C,(HL)
|
||||||
|
INC HL
|
||||||
|
LD B,(HL)
|
||||||
|
LD (NM_EXTN),BC
|
||||||
|
EX DE,HL
|
||||||
|
;JR EX_FULL
|
||||||
|
; <20> §®¡à âì áâபã
|
||||||
|
.FULL: EX AF,AF'
|
||||||
|
EXX
|
||||||
|
XOR A
|
||||||
|
LD HL,(NM_PATH)
|
||||||
|
LD (HL),A
|
||||||
|
LD HL,(NM_NAME) ; ¤à¥á ¡ãä¥à ¯®¤ ¨¬ï ä ©«
|
||||||
|
LD (HL),A
|
||||||
|
LD HL,(NM_EXTN)
|
||||||
|
LD (HL),A
|
||||||
|
LD HL,(NM_DRIVE)
|
||||||
|
LD (HL),A
|
||||||
|
EXX
|
||||||
|
EX AF,AF'
|
||||||
|
.PAT0: LD DE,TMPBUF
|
||||||
|
LD BC,#0D01 ;!HARDCODE áç¥â稪¨
|
||||||
|
.PAT1: LD A,(HL)
|
||||||
|
CALL UPPER ; a..z -> A..Z
|
||||||
|
LD (DE),A
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
INC C ; ++áç¥â稪
|
||||||
|
CP '\'
|
||||||
|
JR Z,.PATH_YEP
|
||||||
|
CP ":"
|
||||||
|
JR Z,.DRIVE_YEP
|
||||||
|
CP "!"
|
||||||
|
JR C,.NAME_YEP
|
||||||
|
CP "?"
|
||||||
|
JR Z,.GLOBP1
|
||||||
|
CP "*"
|
||||||
|
JR Z,.GLOBP1
|
||||||
|
.PAT2: DJNZ .PAT1
|
||||||
|
LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.GLOBP1: EX AF,AF'
|
||||||
|
SET GLOB_PR,A
|
||||||
|
EX AF,AF'
|
||||||
|
JR .PAT2
|
||||||
|
;
|
||||||
|
.NAME_YEP: LD A,2
|
||||||
|
CP C
|
||||||
|
JR Z,.NOFNAME
|
||||||
|
PUSH HL
|
||||||
|
LD HL,TMPBUF
|
||||||
|
LD DE,(NM_NAME) ; ¤à¥á ¡ãä¥à ¯®¤ ¨¬ï ä ©«
|
||||||
|
LD B,0
|
||||||
|
DEC C
|
||||||
|
DEC C
|
||||||
|
LD A,C
|
||||||
|
LDIR
|
||||||
|
LD C,A
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
LD HL,(NM_NAME)
|
||||||
|
LD A,"."
|
||||||
|
CPIR
|
||||||
|
JR NZ,.NOEXTN
|
||||||
|
LD C,3
|
||||||
|
LD DE,(NM_EXTN)
|
||||||
|
.EXTSK0: LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JR NZ,.EXTSK1
|
||||||
|
LD A,' '
|
||||||
|
DEC HL
|
||||||
|
.EXTSK1: LD (DE),A
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DEC C
|
||||||
|
JR NZ,.EXTSK0
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
EX AF,AF'
|
||||||
|
SET EXTN_PR,A ; 㪠§ ® à áè. ä ©«
|
||||||
|
EX AF,AF'
|
||||||
|
.NOEXTN: EX AF,AF'
|
||||||
|
SET NAM_PR,A ; 㪠§ ® ¨¬ï ä ©«
|
||||||
|
EX AF,AF'
|
||||||
|
POP HL
|
||||||
|
.NOFNAME: EX AF,AF'
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.DRIVE_YEP: XOR A
|
||||||
|
LD (DE),A
|
||||||
|
PUSH HL
|
||||||
|
LD HL,TMPBUF
|
||||||
|
LD DE,(NM_DRIVE)
|
||||||
|
LD B,0
|
||||||
|
LDIR
|
||||||
|
POP HL
|
||||||
|
EX AF,AF'
|
||||||
|
SET DRIV_PR,A ; 㪠§ ® ¨¬ï ¤¨áª
|
||||||
|
EX AF,AF'
|
||||||
|
JP .PAT0
|
||||||
|
;
|
||||||
|
.PATH_YEP: XOR A
|
||||||
|
LD (DE),A
|
||||||
|
PUSH HL
|
||||||
|
PUSH BC
|
||||||
|
LD HL,(NM_PATH)
|
||||||
|
LD BC,#00FF ; !FIXIT £«ã¡¨ ¡ãä¥à ¥ § ¢¨á¨â ®â CurrentDirectory.DEPTH
|
||||||
|
CPIR
|
||||||
|
DEC HL
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,TMPBUF ; 12 ¯à®¡¥«®¢
|
||||||
|
POP BC
|
||||||
|
LD B,0
|
||||||
|
LDIR
|
||||||
|
POP HL
|
||||||
|
EX AF,AF'
|
||||||
|
SET PATH_PR,A
|
||||||
|
EX AF,AF'
|
||||||
|
JP .PAT0
|
||||||
|
;!TODO ¯¥à¥¥áâ¨/§ ¬¥¨âì ®¡é¨©
|
||||||
|
TMPBUF: DB " ",#00 ; 12 ¯à®¡¥«®¢
|
||||||
|
NM_DRIVE: DW NM_DRIVE_A
|
||||||
|
NM_NAME: DW NM_NAME_A
|
||||||
|
NM_EXTN: DW NM_EXTN_A
|
||||||
|
NM_PATH: DW NM_PATH_A
|
||||||
|
NM_DRIVE_A: BLOCK 9,0
|
||||||
|
NM_NAME_A: DB " ",#00 ; 12 ¯à®¡¥«®¢
|
||||||
|
NM_EXTN_A: DB " ",0
|
||||||
|
NM_PATH_A EQU CORE_BUFFERS.BUFFER ;DS 256 ;!!!!! shared buffer
|
||||||
|
|
||||||
|
|
||||||
791
DSS/API/Execute.ASM
Normal file
791
DSS/API/Execute.ASM
Normal file
@ -0,0 +1,791 @@
|
|||||||
|
|
||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: EXECUTE
|
||||||
|
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||||||
|
;//UPDATE: 24-10-1999 DNS Restore module
|
||||||
|
;-------------------------------------------------------------------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;-------------------------------------------------------------------------------------------------------------------------
|
||||||
|
;R12 20-07-2023 BAO <20>ਠ§ ¢¥à襨¨ ¯à¨«®¦¥¨ï " ¢ ਩®" ¢ ¢®§¢à é ¥¬®¥ ¯à¨«®¦¥¨¥ ¯¥à¥¤ ñâáï ª®¤ ®è¨¡ª¨ ¨ ä« £ CF=1
|
||||||
|
;R11 17-04-2023 BAO OPTIMIZED BUFFERS, FREED UP 768 BYTES FOR CODE
|
||||||
|
;R09 -- 14-04-2003 DNS NOW EXEC DON'T FOLLOW TO PROGRAM'S DIR
|
||||||
|
;R08 05-12-2002 DNS FIX BUG WITH INCREMENT TASK ID AND OPEN *.EXE ERROR
|
||||||
|
;R07 05-12-2002 DNS FIX FOR EXECUTING IN CURRENT DIR WITHOUT PATH
|
||||||
|
;R06 02-12-2002 DNS FIX BUG WITH NULL-TERMINATED STRING
|
||||||
|
;R05 02-12-2002 DNS ADD APP_PATH TO THE PROGRAM PREFIX
|
||||||
|
;R04 26-11-2002 DNS TRY TO FIX EXEC WITH PATH
|
||||||
|
;R03 19-11-2002 DNS CHECK SUBFN. FOR FN. EXEC
|
||||||
|
;R02 24-05-1999 DNS FIX CREATE PSP AND
|
||||||
|
; MOVE EXEC STACK
|
||||||
|
; 14-05-1999 DNS DECREASE HEADER SIZE FOR EXE-FILE
|
||||||
|
;-------------------------------------------------------------------------------------------------------------------------
|
||||||
|
RELATIVE_DIR EQU 0
|
||||||
|
ABSOLUTE_DIR EQU 1
|
||||||
|
|
||||||
|
MACRO _mINCTASK
|
||||||
|
LD HL,TASK ;R08
|
||||||
|
INC (HL) ;R08
|
||||||
|
ENDM
|
||||||
|
;
|
||||||
|
MACRO _mDECTASK
|
||||||
|
LD HL,TASK ;R08
|
||||||
|
DEC (HL) ;R08
|
||||||
|
ENDM
|
||||||
|
;-------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;TMP_CURDIR_AUTO EQU #FB00
|
||||||
|
; ¥ 㦮 ¥á«¨ SAVE_PATH_MACRO = 1
|
||||||
|
; TMP_CURDIR EQU #FD00
|
||||||
|
|
||||||
|
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #40. ‚믮«¨âì ä ©«.
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ä ©«
|
||||||
|
; B=0 - § £à㧨âì ¨ ¢ë¯®«¨âì ¯à®£à ¬¬ã á ª®à®âª¨¬ ¨¬¥¥¬ (¡¥§ ¯®«®£® ¯ã⨠¤® ¯à®£à ¬¬ë)
|
||||||
|
; B=1 - § £à㧨âì ¨ ¢ë¯®«¨âì ¯à®£à ¬¬ã á ¯®«ë¬ ¯ãâñ¬ ¤® ¯à®£à ¬¬ë
|
||||||
|
; ¢ë室: A - ª®¤ § ¢¥à襨ï, ¥á«¨ CF=0
|
||||||
|
; ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
; ‡ £à㧨âì ¨ ¢ë¯®«¨âì ¯à®£à ¬¬ã.
|
||||||
|
; äãª. #40, B=0.
|
||||||
|
;
|
||||||
|
; 1) Žâªàë¢ ¥â exe-ä ©« ç⥨¥;
|
||||||
|
; 2) ‘ç¨âë¢ ¥â ¢ à ¡®çãî ®¡« áâì ¯à¥ä¨ªá exe-ä ©« ;
|
||||||
|
; 3) ‚뤥«ï¥â ¡«®ª ¯ ¬ïâ¨, âà¥¡ã¥¬ë© ¤«ï § £à㧪¨ ¢á¥£® ä ©« ¨«¨ ¯¥à¢¨ç®£®
|
||||||
|
; § £àã§ç¨ª , ¥á«¨ ¥£® à §¬¥à ¥ à ¢¥ ã«î;
|
||||||
|
; 4) ‘®åà ï¥â á⥪;
|
||||||
|
; 5) <20>®¤ª«îç ¥â áâà ¨æë ¨§ ¢ë¤¥«¥®£® ¡«®ª ;
|
||||||
|
; 6) ‘âந⠯à¥ä¨ªá § ¯ã᪠¯à®£à ¬¬ë ¨ ãáâ ¢«¨¢ ¥â ¥£® ॣ¨áâà IX;
|
||||||
|
; 7) ‘ç¨âë¢ ¥â ä ©« ¯® ¤à¥áã 㪠§ ®¬ã ¢ ᬥ饨¨ 16 (€¤à¥á à ᯮ«®¦¥¨ï
|
||||||
|
; ª®¤ ¢ ¯ ¬ïâ¨);
|
||||||
|
; 8) ‡ ªàë¢ ¥â exe-ä ©«, ¥á«¨ íâ® ¥ ¯¥à¢¨çë© § £àã§ç¨ª;
|
||||||
|
; 9) “áâ ¢«¨¢ ¥â á⥪ à ¢ë¬ § ç¥¨î ¨§ ᬥ饨ï 20 (€¤à¥á à á¯. á⥪ );
|
||||||
|
; 10) <20>¥à¥¤ ¥â ã¯à ¢«¥¨¥ ¯® ¤à¥áã 㪠§ ®¬ã ¢ ᬥ饨¨ 18 (€¤à¥á § ¯ã᪠);
|
||||||
|
;
|
||||||
|
; <20>à¥ä¨ªá § ¯ãáª ä ©« :
|
||||||
|
;
|
||||||
|
; -03 1 db ? ; „¥áªà¨¯â®à ä ©« , ¥á«¨ exe-ä ©« á ¯¥à¢¨çë¬ § £àã§ç¨ª®¬
|
||||||
|
; -02 1 db ? ; ˆ¤¥â¨ä¨ª â®à ¡«®ª ¯ ¬ïâ¨
|
||||||
|
; -01 1 db ? ; “஢¥ì ⥪ã饩 ¯à®£à ¬¬ë
|
||||||
|
; +00 1 db ? ; „«¨ ª®¬-áâப¨
|
||||||
|
; +01 127 ds ? ; <20> à ¬¥âàë ª®¬-áâப¨, § ª 稢 ¥âáï ã«¥¬
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
EXEC: LD (CMDLINE),HL
|
||||||
|
INC B ;R03
|
||||||
|
DEC B ;R03
|
||||||
|
JR Z,.VAR_1 ;R03
|
||||||
|
DEC B ;R03
|
||||||
|
JR Z,.VAR_2 ;R03
|
||||||
|
LD A,DSS_Error.sys.INVALID_FUNCTION ;R03
|
||||||
|
SCF ;R03
|
||||||
|
RET ;R03
|
||||||
|
;
|
||||||
|
.VAR_1: ;LD (CMDLINE),HL
|
||||||
|
CALL CHECKPATH ;CHECK FOR '\' - SHORT/FULL NAME
|
||||||
|
;LD HL,(CMDLINE)
|
||||||
|
JR C,EXEC0_SHORT
|
||||||
|
.VAR_2: CALL EXEC_1
|
||||||
|
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
||||||
|
SCF
|
||||||
|
RET ; File not found - exit
|
||||||
|
|
||||||
|
; ¯à¨ ¢ë室¥ á ®è¨¡ª®©, ¢ ॣ¨áâॠ€ - ª®¤ ®è¨¡ª¨
|
||||||
|
EXEC_1: ;LD (CMDLINE),HL
|
||||||
|
LD HL,(CMDLINE)
|
||||||
|
LD A,FAT_ATTR.READ_ONLY
|
||||||
|
LD (OPEN_FN.TMP),A
|
||||||
|
CALL SetPath_GetName
|
||||||
|
RET C
|
||||||
|
; LD HL,TMPNAME
|
||||||
|
; LD DE,MASKARE
|
||||||
|
CALL MASK
|
||||||
|
RET C
|
||||||
|
CALL TST_EXT
|
||||||
|
RET C
|
||||||
|
_mINCTASK ;R08
|
||||||
|
CALL OPEN_FN.FILE
|
||||||
|
JR C,.Error
|
||||||
|
POP HL ; ã¡¨à ¥¬ «¨è¨© ¤à¥á_¢®§¢à â _¢_¢ë§¢ ¢èãî_¯à®æ¥¤ãàã
|
||||||
|
JP EXEC02 ;R07 CONTINUE EXECUTING PROGRAM
|
||||||
|
.Error: _mDECTASK ;R08
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;JR NC,.noError
|
||||||
|
;_mDECTASK ;R08
|
||||||
|
;AND A
|
||||||
|
;RET
|
||||||
|
;
|
||||||
|
;.noError:
|
||||||
|
;POP HL ; ã¡¨à ¥¬ «¨è¨© ¤à¥á_¢®§¢à â _¢_¢ë§¢ ¢èãî_¯à®æ¥¤ãàã
|
||||||
|
;JP EXEC02 ;R07 CONTINUE EXECUTING PROGRAM
|
||||||
|
;
|
||||||
|
;SHORT NAME
|
||||||
|
;TRY TO FIND IN CURRENT DIRECTORY
|
||||||
|
EXEC0_SHORT: ; ¥á«¨ ã¡à âì, â® ¡ã¤¥â ª ª ¢ linux - ª®à®âª®¥ ¨¬ï § ¯ã᪠¥â EXE ⮫쪮 ¨§ ¯à®¯¨á ëå ¤¨à¥ªâ®à¨©,
|
||||||
|
; ¥á«¨ 㦮 § ¯ãáâ¨âì ä ©« ¨§ ⥪ã饩 ¤¨à¥ªâ®à¨¨, â® â ª: ".\run.exe"
|
||||||
|
CALL EXEC_1
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
;FILE NOT FOUND, SEARCHING IN PATH
|
||||||
|
; GET PATH AND ETC.
|
||||||
|
LD HL,ENVPATH
|
||||||
|
LD DE,ENVPAGE.ENVTEMP
|
||||||
|
LD B,high Dss.Environ.Get
|
||||||
|
CALL ENVIRON
|
||||||
|
LD HL,(CMDLINE)
|
||||||
|
LD DE,CORE_BUFFERS.EXEBUFF
|
||||||
|
COPYEXN: LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
JR NZ,COPYEXN
|
||||||
|
|
||||||
|
CALL FINDPATH
|
||||||
|
;[x] 1/10/2023
|
||||||
|
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
LD HL,(CMDLINE)
|
||||||
|
JR EXEC.VAR_2
|
||||||
|
;
|
||||||
|
EXEC02: LD (EXE_FM),A
|
||||||
|
LD HL,CORE_BUFFERS.EXEBUFF
|
||||||
|
LD DE,_sEXE_HEADER.UnUsedPoint ; #0080 ;!#0200(512) ;R02
|
||||||
|
LD A,(EXE_FM)
|
||||||
|
CALL READ
|
||||||
|
JP C,ERREXE
|
||||||
|
LD IX,CORE_BUFFERS.EXEBUFF
|
||||||
|
LD HL,(CORE_BUFFERS.EXEBUFF.EXE_EXT)
|
||||||
|
LD DE,'E'+'X'*256
|
||||||
|
;AND A - ¥ 㦮, ¥á«¨ ¡ë ¡ë« CF=1, â® çãâì ¢ëè¥ ¬ë ¡ë ã諨 JP C,ERREXE
|
||||||
|
SBC HL,DE
|
||||||
|
LD A,DSS_Error.sys.INVALID_EXE
|
||||||
|
SCF
|
||||||
|
JP NZ,ERREXE
|
||||||
|
;
|
||||||
|
LD A,MINIMUM_EXE_VERSION
|
||||||
|
CP (IX + _sEXE_HEADER.VERSION)
|
||||||
|
LD A,DSS_Error.sys.UNKNOWN_EXE
|
||||||
|
JP C,ERREXE
|
||||||
|
;
|
||||||
|
LD DE,(CORE_BUFFERS.EXEBUFF.LOADER)
|
||||||
|
LD A,E
|
||||||
|
OR D
|
||||||
|
JP NZ,PRELOAD
|
||||||
|
; A=0
|
||||||
|
LD H,A
|
||||||
|
LD L,A
|
||||||
|
LD XL,A
|
||||||
|
LD XH,A
|
||||||
|
;
|
||||||
|
LD B,high Dss.Move_FP.FrEnd
|
||||||
|
LD A,(EXE_FM)
|
||||||
|
CALL MOVE_FP
|
||||||
|
LD DE,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
|
||||||
|
LD A,D
|
||||||
|
AND #3F
|
||||||
|
LD D,A
|
||||||
|
ADD IX,DE
|
||||||
|
;!TEST
|
||||||
|
JR NC,.no_inc_hl
|
||||||
|
INC HL
|
||||||
|
;LD DE,#0000
|
||||||
|
;ADC HL,DE
|
||||||
|
;
|
||||||
|
.no_inc_hl: LD A,XH
|
||||||
|
SLA A
|
||||||
|
RL L
|
||||||
|
RL H
|
||||||
|
SLA A
|
||||||
|
RL L
|
||||||
|
RL H
|
||||||
|
OR XL
|
||||||
|
JR Z,.NOINK
|
||||||
|
INC HL
|
||||||
|
.NOINK: LD A,H
|
||||||
|
OR A
|
||||||
|
JP NZ,ERREXE0
|
||||||
|
LD B,L
|
||||||
|
|
||||||
|
LD HL,.RET_1
|
||||||
|
LD (_ret),HL
|
||||||
|
JP _TST_PROC
|
||||||
|
;
|
||||||
|
; ‡ ¯ã᪠¡¥§ § £àã§ç¨ª
|
||||||
|
.RET_1: LD DE,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
|
||||||
|
XOR A
|
||||||
|
LD H,A
|
||||||
|
LD L,A
|
||||||
|
SBC HL,DE
|
||||||
|
EX DE,HL ; de=ç¨á«® ç¨â. ¡ ©â
|
||||||
|
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR) ; ¡ãä¥à
|
||||||
|
LD A,(EXE_FM) ; ¤¥áªà. ä ©«
|
||||||
|
CALL READ ; ç⥨¥ ¨§ ä ©«
|
||||||
|
LD A,(EXE_FM) ; ¤¥áªà. ä ©«
|
||||||
|
CALL CLOSE_FN ; § ªàëâì ä ©«
|
||||||
|
;
|
||||||
|
JP _TST_PROC_2
|
||||||
|
;
|
||||||
|
RETFAR: LD B,DSS_Error.sys.UNEXPECTED_APP_TRMN
|
||||||
|
JP LEAVE ; § ¢¥àè¨âì ¯à®£à ¬¬ã (¯à®æ¥áá)
|
||||||
|
|
||||||
|
;-------------------------------------------------
|
||||||
|
; …᫨ à áè. ä ©« ¥ § ¤ ®, § ¤ âì "exe".
|
||||||
|
; …᫨ à áè. ä ©« § ¤ ®, áà ¢¨âì ¥£® á "exe".
|
||||||
|
;-------------------------------------------------
|
||||||
|
TST_EXT: LD HL,EXE_EXT ; "EXE"
|
||||||
|
LD DE,MASKARE+8
|
||||||
|
LD B,3
|
||||||
|
LD A,(DE)
|
||||||
|
CP ' '
|
||||||
|
JR NZ,.loop ; § ¤ ® à áè.
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
; áà ¢¨âì à áè. á "EXE"
|
||||||
|
.loop: LD A,(DE)
|
||||||
|
CP (HL)
|
||||||
|
SCF
|
||||||
|
RET NZ ; ¥ ᮢ¯ ¤ ¥â
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DJNZ .loop
|
||||||
|
XOR A ; Ok
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
ERREXE0: LD A,DSS_Error.sys.NOT_ENOUGH_MEMORY
|
||||||
|
ERREXE: PUSH AF
|
||||||
|
LD A,(EXE_FM)
|
||||||
|
CALL CLOSE_FN
|
||||||
|
_mDECTASK
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
;!TODO áà ¢¨âì á EXEC02
|
||||||
|
PRELOAD: EX DE,HL
|
||||||
|
LD DE,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
|
||||||
|
LD A,D
|
||||||
|
AND #3F
|
||||||
|
LD D,A
|
||||||
|
ADD HL,DE
|
||||||
|
XOR A
|
||||||
|
SLA H
|
||||||
|
RLA
|
||||||
|
SLA H
|
||||||
|
RLA
|
||||||
|
LD B,A
|
||||||
|
LD A,H
|
||||||
|
OR L
|
||||||
|
JR Z,NOINK2
|
||||||
|
INC B
|
||||||
|
NOINK2: LD HL,_RET_2
|
||||||
|
LD (_ret),HL
|
||||||
|
JR _TST_PROC
|
||||||
|
;
|
||||||
|
; ‡ ¯ãáª á § £àã§ç¨ª®¬
|
||||||
|
_RET_2: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR) ; ¡ãä¥à
|
||||||
|
LD DE,(CORE_BUFFERS.EXEBUFF.LOADER) ; ç¨á«® ç¨â. ¡ ©â
|
||||||
|
LD A,(EXE_FM) ; ¤¥áªà. ä ©«
|
||||||
|
CALL READ ; ç⥨¥ ¨§ ä ©«
|
||||||
|
JP _TST_PROC_2
|
||||||
|
;-------------------------------------------------------------------;[ ]
|
||||||
|
_TST_PROC: CALL GETMEM
|
||||||
|
JP C,ERREXE0
|
||||||
|
LD (EXE_MEM),A
|
||||||
|
EXX
|
||||||
|
POP DE ;ᨬ ¥¬ á® á⥪ ¤à¥á ¢®§¢à â
|
||||||
|
LD HL,#0000
|
||||||
|
ADD HL,SP
|
||||||
|
LD SP,(EXSTACK)
|
||||||
|
; ! „ «¥¥ á⥪ ¢ ã«¥¢®© áâà ¨æ¥! BIOS ¨ ¥ DSS-MAIN ¥ ¢ë§ë¢ âì
|
||||||
|
PUSH HL ; +2 EXSTACK size for 1 task
|
||||||
|
PUSH DE ; +2
|
||||||
|
;
|
||||||
|
IN A,(SLOT3)
|
||||||
|
LD D,A
|
||||||
|
IN A,(SLOT2)
|
||||||
|
LD E,A
|
||||||
|
IN A,(SLOT1)
|
||||||
|
PUSH DE ; +2
|
||||||
|
PUSH AF ; +2
|
||||||
|
LD (EXSTACK),SP
|
||||||
|
LD SP,HL
|
||||||
|
; ;
|
||||||
|
EXX
|
||||||
|
;
|
||||||
|
;!TEST 27/03/2024
|
||||||
|
LD DE,RAMMAP+3
|
||||||
|
LD A,(EXE_MEM)
|
||||||
|
LD BC,4*256 + BIOS.GetMemPage
|
||||||
|
.mem_loop: PUSH AF
|
||||||
|
PUSH BC
|
||||||
|
DEC B
|
||||||
|
RST ToBIOS
|
||||||
|
LD (DE),A
|
||||||
|
DEC DE
|
||||||
|
POP BC
|
||||||
|
POP AF
|
||||||
|
DJNZ .mem_loop
|
||||||
|
;
|
||||||
|
; LD DE,RAMMAP
|
||||||
|
; ;
|
||||||
|
; LD A,(EXE_MEM)
|
||||||
|
; LD BC,0*256 + BIOS.GetMemPage
|
||||||
|
; RST ToBIOS
|
||||||
|
; LD (DE),A
|
||||||
|
; INC DE
|
||||||
|
; ;
|
||||||
|
; LD A,(EXE_MEM)
|
||||||
|
; LD BC,1*256 + BIOS.GetMemPage
|
||||||
|
; RST ToBIOS
|
||||||
|
; LD (DE),A
|
||||||
|
; INC DE
|
||||||
|
; ;
|
||||||
|
; LD A,(EXE_MEM)
|
||||||
|
; LD BC,2*256 + BIOS.GetMemPage
|
||||||
|
; RST ToBIOS
|
||||||
|
; LD (DE),A
|
||||||
|
; INC DE
|
||||||
|
; ;
|
||||||
|
; LD A,(EXE_MEM)
|
||||||
|
; LD BC,3*256 + BIOS.GetMemPage
|
||||||
|
; RST ToBIOS
|
||||||
|
; LD (DE),A
|
||||||
|
;
|
||||||
|
;
|
||||||
|
LD HL,(CMDLINE)
|
||||||
|
LD DE,CORE_BUFFERS.BUFFER+1
|
||||||
|
CALL SCOPYS
|
||||||
|
LD A,#80 ;!HARDCODE cmd line size
|
||||||
|
SUB B
|
||||||
|
LD (CORE_BUFFERS.BUFFER),A
|
||||||
|
;
|
||||||
|
LD SP,CORE_BUFFERS.EXEBUFF + _sEXE_HEADER ;R02
|
||||||
|
; ! „ «¥¥ á⥪ ¢ ã«¥¢®© áâà ¨æ¥! BIOS ¨ ¥ DSS-MAIN ¥ ¢ë§ë¢ âì
|
||||||
|
LD A,SHARED_PAGE
|
||||||
|
OUT (SLOT1),A
|
||||||
|
OUT (SLOT2),A
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
|
||||||
|
LD DE,RAMMAP
|
||||||
|
LD A,H
|
||||||
|
AND #C0
|
||||||
|
;!TEST
|
||||||
|
CP #80
|
||||||
|
JR Z,FR8000
|
||||||
|
JR NC,FRC000
|
||||||
|
;
|
||||||
|
FR4000: LD A,(DE)
|
||||||
|
OUT (SLOT1),A
|
||||||
|
INC DE
|
||||||
|
FR8000: LD A,(DE)
|
||||||
|
OUT (SLOT2),A
|
||||||
|
INC DE
|
||||||
|
FRC000: LD A,(DE)
|
||||||
|
OUT (SLOT3),A
|
||||||
|
CALL M_PSP
|
||||||
|
;
|
||||||
|
LD HL,(CORE_BUFFERS.EXEBUFF.OFFCOD2)
|
||||||
|
LD IX,(CORE_BUFFERS.EXEBUFF.OFFCOD1)
|
||||||
|
LD B,high Dss.Move_FP.FrStart
|
||||||
|
LD A,(EXE_FM)
|
||||||
|
CALL MOVE_FP
|
||||||
|
;
|
||||||
|
LD SP,#403F ;R02 ;!HARDCODE STACK before start EXE. “áâ ¢«¨¢ ¥âáï ª®£¤ ¢®âªãâë SHARED_PAGE
|
||||||
|
_ret+1: JP 0 ;EXEC02.RET1 ¨«¨ _RET_2
|
||||||
|
|
||||||
|
_TST_PROC_2: LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG)
|
||||||
|
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
|
||||||
|
LD DE,#0080 ;!HARDCODE CLP_Buffer
|
||||||
|
XOR A
|
||||||
|
SBC HL,DE
|
||||||
|
EX DE,HL
|
||||||
|
LD XH,D
|
||||||
|
LD XL,E
|
||||||
|
LD HL,(CORE_BUFFERS.EXEBUFF.PC_REG)
|
||||||
|
LD DE,RETFAR ; ¤à¥á ¯/¯ "¥®¦¨¤ ®¥ § ¢¥à襨¥ ¯à®æ¥áá "
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
PUSH IX
|
||||||
|
LD HL,CORE_BUFFERS.CurrentPath
|
||||||
|
LD A,(CORE_BUFFERS.EXEBUFF.VERSION)
|
||||||
|
;
|
||||||
|
OR A
|
||||||
|
JR NZ,.set_path
|
||||||
|
CALL DIR_PATH_CHANGE.FullCurrent
|
||||||
|
LD HL,CORE_BUFFERS.CurrentPath
|
||||||
|
.set_path: CALL CHDIR_FN
|
||||||
|
POP IX
|
||||||
|
;
|
||||||
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
; ! ¢ë§ë¢ ¥âáï ª®£¤ á⥪ ¢ ã«¥¢®© áâà ¨æ¥!
|
||||||
|
M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
|
||||||
|
DEC H
|
||||||
|
LD D,H
|
||||||
|
LD E,L
|
||||||
|
INC DE
|
||||||
|
LD BC,#00FF ;!HARDCODE
|
||||||
|
LD (HL),B
|
||||||
|
LDIR
|
||||||
|
EX DE,HL
|
||||||
|
DEC H
|
||||||
|
LD DE,#0080
|
||||||
|
ADD HL,DE
|
||||||
|
EX DE,HL
|
||||||
|
LD XH,D
|
||||||
|
LD XL,E
|
||||||
|
LD HL,CORE_BUFFERS.BUFFER
|
||||||
|
LD C,(HL)
|
||||||
|
INC C
|
||||||
|
LDIR
|
||||||
|
EX DE,HL ;R06
|
||||||
|
LD (HL),B
|
||||||
|
LD A,(TASK)
|
||||||
|
LD (IX-1),A
|
||||||
|
LD A,(EXE_MEM)
|
||||||
|
LD (IX-2),A
|
||||||
|
LD A,(EXE_FM)
|
||||||
|
LD (IX-3),A
|
||||||
|
;R05
|
||||||
|
INC HL
|
||||||
|
LD (HL),B
|
||||||
|
INC HL
|
||||||
|
;!FIXIT âãâ ¢®ááâ ¢«¨¢ âì ¯à ¢¨«ìë© ª â «®£
|
||||||
|
CALL CURDISK
|
||||||
|
ADD A,'A'
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
LD A,':'
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
PUSH HL
|
||||||
|
CALL CURRDIR
|
||||||
|
;
|
||||||
|
POP HL
|
||||||
|
XOR A
|
||||||
|
LD BC,#0100 ;!FIXIT ¥â ¯à¨¢ï§ª¨ ª CurrentDirectory.DEPTH
|
||||||
|
CPIR ;!FIXIT ¥â ¯à®¢¥àª¨ ¢ë室 ¯® BC=0
|
||||||
|
DEC HL
|
||||||
|
DEC HL
|
||||||
|
LD A,'\' ;
|
||||||
|
CP (HL)
|
||||||
|
INC HL
|
||||||
|
JR Z,.YP_ESLA
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
.YP_ESLA: EX DE,HL
|
||||||
|
LD HL,TMPNAME
|
||||||
|
.loop: LD A,(HL)
|
||||||
|
LDI
|
||||||
|
CP ' '+1
|
||||||
|
JR NC,.loop
|
||||||
|
DEC DE
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
LD (APPINFO.LAST_PSP_PTR),IX
|
||||||
|
;
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
SCOPYS: LD BC,#80*256 + ' '+1 ;!HARDCODE cmd line size
|
||||||
|
.loop: LD A,(HL)
|
||||||
|
CP C
|
||||||
|
JR C,.copy
|
||||||
|
INC HL
|
||||||
|
DJNZ .loop
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
LD B,#80
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.copy: LD BC,#80*256 + ' ' ;!HARDCODE cmd line size
|
||||||
|
.loop2: LD A,(HL)
|
||||||
|
LD (DE),A
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
CP C
|
||||||
|
RET C
|
||||||
|
DJNZ .loop2
|
||||||
|
RET
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
ENVPATH: DB "PATH=",0
|
||||||
|
EXE_EXT: DB "EXE"
|
||||||
|
TASK: DB #01 ; ã஢¥ì ⥪ã饩 ¯à®£à ¬¬ë
|
||||||
|
;
|
||||||
|
RAMMAP: DB #00,#00,#00,#00
|
||||||
|
ErrorLevel: DB #00 ; ª®¤ § ¢¥àè¥¨ï ¯à®£à ¬¬ë (¯à®æ¥áá )
|
||||||
|
EXE_FM: DB #00 ; ¤¥áªà. ä ©«
|
||||||
|
EXE_MEM: DB #00 ; ¨¤¥â¨ä¨ª â®à ¡«®ª ¯ ¬ïâ¨
|
||||||
|
CMDLINE: DW #0000
|
||||||
|
EXSTACK: DW CORE_BUFFERS.XSTACK.Spoint ; ¤à¥á á⥪
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #41. ‡ ¢¥àè¨âì ¯à®£à ¬¬ã (¯à®æ¥áá).
|
||||||
|
;
|
||||||
|
; ¢å®¤: B - ª®¤ § ¢¥à襨ï
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;
|
||||||
|
; ‚ë室 ¨§ EXE-ä ©« :
|
||||||
|
;
|
||||||
|
; 1) Žá¢®¡®¦¤ îâáï ¢á¥ ¡«®ª¨ ¯ ¬ï⨠ª®â®àë¥ ¢ë¤¥«ï«¨áì ¤ ®¬ã ¯à¨«®¦¥¨î.
|
||||||
|
; 2) ‡ ªàë¢ îâáï ¢á¥ ä ©«ë ®âªàëâë¥ ¯à¨«®¦¥¨¥¬
|
||||||
|
; 3) ‚®ááâ ¢«¨¢ îâáï áâà ¨æë ª®â®àë¥ ¡ë«¨ ¯®¤ª«îç¥ë ¤® § ¯ã᪠EXE-ä ©« .
|
||||||
|
; 4) ‚ᯮ¬¨ ¥âáï á⥪.
|
||||||
|
; 5) ‚ ॣ¨áâà A ¯®¬¥é ¥âáï ª®¤ ¢®§¢à â ¨ ¢ë¯®«ï¥âáï RET.
|
||||||
|
;
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
LEAVE: LD A,R
|
||||||
|
PUSH AF ; INT ON/OFF
|
||||||
|
DI
|
||||||
|
;
|
||||||
|
LD A,B
|
||||||
|
LD (ErrorLevel),A
|
||||||
|
CALL FREE_PROCESS_MEMORY
|
||||||
|
;[x] 10/12/23 close EXE FMs
|
||||||
|
CALL FREE_PROCESS_FMs
|
||||||
|
;
|
||||||
|
_mDECTASK
|
||||||
|
;
|
||||||
|
POP DE ; INT ON/OFF
|
||||||
|
LD SP,(EXSTACK)
|
||||||
|
; âãâ á⥪ ¢ ã«¥¢®© áâà ¨æ¥!
|
||||||
|
POP AF ; -2 EXSTACK size for 1 task
|
||||||
|
POP HL ; -2
|
||||||
|
OUT (SLOT1),A
|
||||||
|
LD A,L
|
||||||
|
OUT (SLOT2),A
|
||||||
|
LD A,H
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
LD A,E ; INT ON/OFF
|
||||||
|
POP DE ; -2
|
||||||
|
POP HL ; -2
|
||||||
|
LD (EXSTACK),SP
|
||||||
|
LD SP,HL
|
||||||
|
;
|
||||||
|
;!TEST
|
||||||
|
AND %0000'0100 ; PO/PE flag
|
||||||
|
JR Z,.no_ei
|
||||||
|
EI
|
||||||
|
.no_ei: ;
|
||||||
|
EX DE,HL
|
||||||
|
LD A,(ErrorLevel)
|
||||||
|
;R12
|
||||||
|
CP DSS_Error.sys.UNEXPECTED_APP_TRMN
|
||||||
|
JR Z,.error_exit
|
||||||
|
CP DSS_Error.sys.USER_ABORT
|
||||||
|
JR NZ,.norm_exit
|
||||||
|
.error_exit: SCF
|
||||||
|
JP (HL)
|
||||||
|
;
|
||||||
|
.norm_exit: AND A
|
||||||
|
JP (HL)
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #42. <20>®«ãç¨âì ª®¤ § ¢¥àè¥¨ï ¯à®£à ¬¬ë.
|
||||||
|
;
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: A - ª®¤ § ¢¥à襨ï
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
GET_ERR: LD A,(ErrorLevel)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
FREE_PROCESS_MEMORY:
|
||||||
|
;LD HL,MEMTAB
|
||||||
|
LD HL,CORE_BUFFERS.MemoryTable ; ¬ áᨢ ᯨ᪠¢ë¤¥«. áâà ¨æ
|
||||||
|
LD BC,256 ;!HARDCODE à §¬¥à ¡«®ª áâà ¨æ Ž‡“
|
||||||
|
.loop: LD A,(TASK)
|
||||||
|
CPIR
|
||||||
|
RET NZ
|
||||||
|
PUSH HL
|
||||||
|
PUSH BC
|
||||||
|
DEC HL
|
||||||
|
AND A
|
||||||
|
;LD DE,MEMTAB
|
||||||
|
LD DE,CORE_BUFFERS.MemoryTable ; ¬ áᨢ ᯨ᪠¢ë¤¥«. áâà ¨æ
|
||||||
|
SBC HL,DE
|
||||||
|
LD A,L
|
||||||
|
CALL RETMEM ; ®á¢®¡. ¡«®ª ¯ ¬ïâ¨
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
JP .loop
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
FREE_PROCESS_FMs:
|
||||||
|
LD IY,CORE_BUFFERS.FM_BUF - CORE_BUFFERS.FM_BUF.Size
|
||||||
|
LD DE,CORE_BUFFERS.FM_BUF.Size
|
||||||
|
LD B,FMCOUNT+1
|
||||||
|
LD A,(TASK)
|
||||||
|
.loop: ADD IY,DE
|
||||||
|
CP (IY+_sFM.TASK_NUM)
|
||||||
|
JR NZ,.next
|
||||||
|
; close fm
|
||||||
|
PUSH AF
|
||||||
|
XOR A
|
||||||
|
OR (IY+_sFM.TASK_NUM)
|
||||||
|
JR Z,.skip
|
||||||
|
PUSH IY
|
||||||
|
PUSH DE
|
||||||
|
LD A,FMCOUNT+1
|
||||||
|
SUB B
|
||||||
|
PUSH BC
|
||||||
|
CALL CLOSE_FN
|
||||||
|
POP BC
|
||||||
|
POP DE
|
||||||
|
POP IY
|
||||||
|
.skip: POP AF
|
||||||
|
;
|
||||||
|
.next: DJNZ .loop
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
CHECKPATH: ; !TODO ᤥ« âì ¯à®¢¥àªã ª®«¨ç¥á⢮ 横«®¢
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CP '\'
|
||||||
|
RET Z
|
||||||
|
; CP '/' ;ALT SLASH
|
||||||
|
; RET Z
|
||||||
|
CP " "+1
|
||||||
|
JR NC,CHECKPATH
|
||||||
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
FINDPATH:
|
||||||
|
SET_PAGE_X ENVPAGE
|
||||||
|
PUSH AF
|
||||||
|
;!TEST
|
||||||
|
;CALL CURRDSK_FN
|
||||||
|
;ADD A,"A"
|
||||||
|
;LD HL,TMP_CURDIR
|
||||||
|
;LD (HL),A
|
||||||
|
;INC HL
|
||||||
|
;LD A,":"
|
||||||
|
;LD (HL),A
|
||||||
|
;INC HL
|
||||||
|
;CALL CURRDIR_FN
|
||||||
|
;
|
||||||
|
CALL .MAKE_PATH_ARRAY
|
||||||
|
LD HL,ENVPAGE.PATH_PNT_ARRAY
|
||||||
|
.NEXTPATHI:
|
||||||
|
LD E,(HL)
|
||||||
|
INC HL
|
||||||
|
LD D,(HL)
|
||||||
|
INC HL
|
||||||
|
BIT ABSOLUTE_DIR,(HL)
|
||||||
|
INC HL
|
||||||
|
PUSH HL
|
||||||
|
PUSH BC
|
||||||
|
EX DE,HL
|
||||||
|
CALL Z,.GOTO_CURDIR
|
||||||
|
CALL NZ,CHDIR
|
||||||
|
JR C,.BADPATH
|
||||||
|
LD HL,CORE_BUFFERS.EXEBUFF
|
||||||
|
CALL MASK.name
|
||||||
|
JR C,.BADPATH
|
||||||
|
CALL TST_EXT
|
||||||
|
JR C,.BADPATH
|
||||||
|
CALL SEARCH.File
|
||||||
|
.BADPATH:
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
JR NC,.PATHFOUND
|
||||||
|
DJNZ .NEXTPATHI
|
||||||
|
SCF
|
||||||
|
.PATHFOUND:
|
||||||
|
POP BC
|
||||||
|
LD A,B
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||||||
|
RET
|
||||||
|
.GOTO_CURDIR:
|
||||||
|
PUSH AF
|
||||||
|
PUSH HL
|
||||||
|
LD HL,CORE_BUFFERS.CurrentDirectory
|
||||||
|
CALL CHDIR
|
||||||
|
POP HL
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
.MAKE_PATH_ARRAY:
|
||||||
|
LD HL,ENVPAGE.PATH_PNT_ARRAY-1 ;R04 -1
|
||||||
|
LD DE,ENVPAGE.ENVTEMP-1
|
||||||
|
LD B,#00
|
||||||
|
.NEXTAR:
|
||||||
|
LD (HL),C ;R04
|
||||||
|
INC HL ;R04
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
LD C,A
|
||||||
|
INC DE
|
||||||
|
LD (HL),E
|
||||||
|
INC HL
|
||||||
|
LD (HL),D
|
||||||
|
INC HL
|
||||||
|
;R04 LD (HL),C
|
||||||
|
;R04 INC HL
|
||||||
|
INC B
|
||||||
|
.NEXTRT:
|
||||||
|
LD A,(DE)
|
||||||
|
CP '\'
|
||||||
|
JR NZ,.NEXTCH
|
||||||
|
.NEXTDR:
|
||||||
|
SET ABSOLUTE_DIR,C
|
||||||
|
.NEXTRL:
|
||||||
|
;SET RELATIVE_DIR,C ;!TODO ????
|
||||||
|
.NEXTCH:
|
||||||
|
LD A,(DE)
|
||||||
|
CP ";"
|
||||||
|
JR Z,.NEXTAR
|
||||||
|
INC DE
|
||||||
|
; CP "."
|
||||||
|
; JR Z,NEXTRL
|
||||||
|
CP ":"
|
||||||
|
JR Z,.NEXTRT
|
||||||
|
OR A
|
||||||
|
JR NZ,.NEXTCH
|
||||||
|
LD (HL),C ;R04
|
||||||
|
INC HL ;R04
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
LD (HL),A
|
||||||
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
;R11 \\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||||
|
;;
|
||||||
|
; EXEBUFF:
|
||||||
|
; DB "EXE"
|
||||||
|
; DB #00
|
||||||
|
; OFFCOD1 DW #0000
|
||||||
|
; OFFCOD2 DW #0000
|
||||||
|
; LOADER DW #0000
|
||||||
|
; DW #0000
|
||||||
|
; DW #0000
|
||||||
|
; DW #0000
|
||||||
|
; LD_ADDR DW #0000
|
||||||
|
; PC_REG DW #0000
|
||||||
|
; SP_REG DW #0000
|
||||||
|
; BLOCK 512-($-EXEBUFF),0
|
||||||
|
; ;(!!!HERE STACK FOR EXEC!!!)
|
||||||
|
; BLOCK 255,0
|
||||||
|
; XSTACK DB #00
|
||||||
|
;R11 ////////////////////////////
|
||||||
|
;
|
||||||
121
DSS/API/Find.asm
Normal file
121
DSS/API/Find.asm
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
;‚å®¤ë¥ § 票ï:
|
||||||
|
; C - #19
|
||||||
|
; HL - 㪠§ ⥫ì ä ©«®¢ãî ᯥæ¨ä¨ª æ¨î
|
||||||
|
; DE - à ¡®ç¨© ¡ãä¥à 44 ¡ ©â , ¥á«¨ B=0, ¨ ç¥ 256 ¡ ©â
|
||||||
|
; A - âਡãâë, ¨á¯®«ì§ã¥¬ë¥ ¯à¨ ¯®¨áª¥
|
||||||
|
; B = #00 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠11 ¡ ©â "FilenameExt"
|
||||||
|
; B = #01 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠DOS "filename.ext",0
|
||||||
|
; ¯®¨áª ¡¥§ ®£à ¨ç¥¨¥ à §¬¥à ª â «®£ :
|
||||||
|
; !TODO B = #02 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠DOS + LFN
|
||||||
|
; !TODO B = #80 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠11 ¡ ©â "FilenameExt"
|
||||||
|
; !TODO B = #81 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠DOS "filename.ext",0
|
||||||
|
;‚ëå®¤ë¥ § 票ï:
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
F_FIRST_FN: CALL F_FIRST.INIT_VARS
|
||||||
|
PUSH HL
|
||||||
|
;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
JR F_FIRST.begin
|
||||||
|
;
|
||||||
|
F_FIRST: CALL .INIT_VARS
|
||||||
|
.begin: CALL SetPath_GetName
|
||||||
|
;CALL LOADDIR
|
||||||
|
RET C
|
||||||
|
CALL MASK
|
||||||
|
RET C
|
||||||
|
LD A,(.SEARCH_ATTRIBUT)
|
||||||
|
CALL SEARCH.Custom
|
||||||
|
RET C
|
||||||
|
LD HL,MASKARE
|
||||||
|
.DTABUF+1: LD DE,0
|
||||||
|
LD BC,FAT_DIRECTORY_RECORD.ATTRIBUT ; ª®¯¨à㥬 .NAME ¨ .EXT
|
||||||
|
LDIR
|
||||||
|
.SEARCH_ATTRIBUT+1:
|
||||||
|
LD A,0 ; DSS_FCB_MAIN.SEARCH_ATTRIBUT
|
||||||
|
LD (DE),A
|
||||||
|
.FIND_S: INC DE
|
||||||
|
;!TODO «ãçè¥ âã⠨ᯮ«ì§®¢ âì ª ª ¢ record index ¤«ï ¯¥à¥¡®à ª â «®£ > #4000 bytes
|
||||||
|
LD BC,FAT_DIRECTORY_RECORD
|
||||||
|
ADD IX,BC
|
||||||
|
LD (F_NEXT.CURHND),IX
|
||||||
|
LD HL,HANDBUF + FAT_DIRECTORY_RECORD.RESERVED_NT
|
||||||
|
LD BC,HANDBUF.SIZE - FAT_DIRECTORY_RECORD.RESERVED_NT
|
||||||
|
LDIR
|
||||||
|
LD A,(HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT)
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
LD HL,HANDBUF
|
||||||
|
.FNDMODE+1: LD A,0
|
||||||
|
OR A
|
||||||
|
JR NZ,.FIND_M2
|
||||||
|
LD BC,11 ;!HARDCODE
|
||||||
|
LDIR
|
||||||
|
.exit: LD A,F_NEXT.NO_NEXT.NO
|
||||||
|
LD (F_NEXT.NO_NEXT),A
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
.FIND_M2: ;!TODO LFN
|
||||||
|
;CP 2
|
||||||
|
;CALL NC,GetName_LFN
|
||||||
|
;CALL C,GetName
|
||||||
|
;
|
||||||
|
CALL GetName
|
||||||
|
JR .exit
|
||||||
|
;
|
||||||
|
.INIT_VARS: LD (.SEARCH_ATTRIBUT),A
|
||||||
|
LD (.DTABUF),DE
|
||||||
|
LD A,B
|
||||||
|
LD (.FNDMODE),A
|
||||||
|
RET
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
;
|
||||||
|
;
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
F_NEXT:
|
||||||
|
.NO_NEXT.YES EQU 0
|
||||||
|
.NO_NEXT.NO EQU #FF
|
||||||
|
.NO_NEXT+1:
|
||||||
|
LD A,0
|
||||||
|
OR A
|
||||||
|
LD A,DSS_Error.sys.INVALID_ACCESS
|
||||||
|
SCF
|
||||||
|
RET Z
|
||||||
|
LD (F_FIRST.DTABUF),DE
|
||||||
|
EX DE,HL
|
||||||
|
LD DE,MASKARE
|
||||||
|
LD BC,11 ;!HARDCODE
|
||||||
|
LDIR
|
||||||
|
|
||||||
|
XOR A ; F_NEXT.NO_NEXT.YES
|
||||||
|
LD (F_NEXT.NO_NEXT),A
|
||||||
|
|
||||||
|
LD A,(HL)
|
||||||
|
PUSH HL
|
||||||
|
CALL .NSEARCH
|
||||||
|
POP DE
|
||||||
|
RET C
|
||||||
|
JP F_FIRST.FIND_S
|
||||||
|
.NSEARCH:
|
||||||
|
EX AF,AF'
|
||||||
|
SET_PAGE_X DIRPAGE
|
||||||
|
;PUSH AF
|
||||||
|
EX AF,AF'
|
||||||
|
CPL
|
||||||
|
LD C,A
|
||||||
|
;!TEST 9/11/23 record index
|
||||||
|
; EXX
|
||||||
|
; LD DE,0
|
||||||
|
; EXX
|
||||||
|
;
|
||||||
|
.CURHND+2:
|
||||||
|
LD IX,0
|
||||||
|
LD A,XH
|
||||||
|
OR XL
|
||||||
|
JP Z,SEARCH.error_too_many_files
|
||||||
|
JP SEARCH.loop
|
||||||
|
;
|
||||||
10
DSS/API/FreeMem.asm
Normal file
10
DSS/API/FreeMem.asm
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #3C. ˆä®à¬ æ¨ï ® ¯ ¬ïâ¨.
|
||||||
|
;
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: HL - ®¡é¥¥ ª®«-¢® áâà ¨æ
|
||||||
|
; BC - ª®«-¢® ᢮¡. áâà ¨æ
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
FREEMEM: LD C,BIOS.GetMemSize
|
||||||
|
JP ToBIOS
|
||||||
|
;
|
||||||
31
DSS/API/GSwitch.asm
Normal file
31
DSS/API/GSwitch.asm
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #43. ‚뤥«¨âì ¯ à ¬¥âà ª®¬ ¤®© áâப¨.
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ â¥«ì ª®¬ ¤®© áâப¨
|
||||||
|
; DE - ¡ãä¥à ¤«ï ¢ë¤¥«. ¯ à ¬¥âà
|
||||||
|
; ¢ë室: HL - 㪠§ ⥫ì á«¥¤. ¯ à ¬¥âà ª®¬-áâப¨
|
||||||
|
; CF=0 - ª®¥æ áâப¨ ¥ ¤®á⨣ãâ (¥áâì ¤à㣨¥ ¯ à ¬¥âàë)
|
||||||
|
; CF=1 - ª®¥æ áâப¨ (¢ ¡ãä¥à ¯¥à¥¥áñ ¯®á«¥¤¨© ¯ à ¬¥âà ¨«¨ ®«ì)
|
||||||
|
;
|
||||||
|
;ENTRY: HL - COMMAND LINE
|
||||||
|
; DE - SWITCH BUFFER
|
||||||
|
;EXIT: BUFFER
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
GSWITCH: XOR A
|
||||||
|
LD (DE),A
|
||||||
|
.loop1: LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CP " "
|
||||||
|
RET C
|
||||||
|
JR Z,.loop1
|
||||||
|
.loop2: LD (DE),A
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
CP " "+1
|
||||||
|
JR NC,.loop2
|
||||||
|
CP " "
|
||||||
|
LD A,0
|
||||||
|
LD (DE),A
|
||||||
|
RET
|
||||||
|
;
|
||||||
24
DSS/API/GetDateTime.asm
Normal file
24
DSS/API/GetDateTime.asm
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #17. ˆä®à¬ æ¨ï ® ¤ ⥠¨ ¢à¥¬¥¨ ä ©« .
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ¤¥áªà¨¯â®à ä ©«
|
||||||
|
; ¢ë室: D - ¤¥ì
|
||||||
|
; E - ¬¥áïæ
|
||||||
|
; IX - £®¤
|
||||||
|
; H - ç á
|
||||||
|
; L - ¬¨ãâë
|
||||||
|
; B - ᥪã¤ë
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
GET_D_T:
|
||||||
|
CALL SET_FM
|
||||||
|
RET C
|
||||||
|
; ¢à¥¬ï/¤ âã ¨§ áâàãªâãàë ¤¥áªà.
|
||||||
|
LD E,(IY+_sFM.FS_REC.TIME) ; ¢à¥¬ï
|
||||||
|
LD D,(IY+_sFM.FS_REC.TIME+1) ;
|
||||||
|
LD C,(IY+_sFM.FS_REC.DATE) ; ¤ â
|
||||||
|
LD B,(IY+_sFM.FS_REC.DATE+1) ;
|
||||||
|
CALL RMKTIME ; à ᪮¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
19
DSS/API/GetMem.asm
Normal file
19
DSS/API/GetMem.asm
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #3D. ‚뤥«¥¨¥ ¡«®ª ¯ ¬ïâ¨.
|
||||||
|
;
|
||||||
|
; ¢å®¤: B - à §¬¥à ¡«®ª ¢ áâà ¨æ å ¯® 16kB
|
||||||
|
; ¢ë室: A - ¨¤¥â¨ä¨ª â®à ¡«®ª ¯ ¬ïâ¨, ¥á«¨ CF=0
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
GETMEM: LD C,BIOS.GetMem
|
||||||
|
RST ToBIOS
|
||||||
|
LD E,A
|
||||||
|
LD A,DSS_Error.sys.NOT_ENOUGH_MEMORY
|
||||||
|
RET C
|
||||||
|
LD D,#00
|
||||||
|
LD HL,CORE_BUFFERS.MemoryTable ; ¬ áᨢ ᯨ᪠¢ë¤¥«. áâà ¨æ
|
||||||
|
ADD HL,DE
|
||||||
|
LD A,(TASK) ; ã஢¥ì ⥪ã饩 ¯à®£à ¬¬ë
|
||||||
|
LD (HL),A
|
||||||
|
LD A,E
|
||||||
|
RET
|
||||||
14
DSS/API/GetVMod.asm
Normal file
14
DSS/API/GetVMod.asm
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #51. <20>®«ãç¨âì ⥪ã騩 ०¨¬ íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: A - ⥪ã騩 ०¨¬ íªà
|
||||||
|
; B - áâà ¨æ íªà 0/1
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
GETVMOD:
|
||||||
|
IN A,(SCREEN_SWITCH)
|
||||||
|
LD B,A
|
||||||
|
LD A,(VMODE)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
14
DSS/API/Lib_Sub.asm
Normal file
14
DSS/API/Lib_Sub.asm
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
;[ ] 11/02/2024 - ”γ<CEB3>ζ¨ο α ―®―®«ο¥¬λ¬¨ ―®¤δγ<CEB3>ζ¨ο¬¨)))
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; B = 1 ‚λ§®Ά δγ<CEB3>樨 SETUP_CURSORS ¤«ο Ά®ααβ ®Ά«¥¨ο α¨α⥬λε θΰ¨δβ®Ά DSS ;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
LIB_SUB:
|
||||||
|
DJNZ .B_2
|
||||||
|
; func B = 1
|
||||||
|
JP SETUP_CURSORS
|
||||||
|
;
|
||||||
|
.B_2: ; func B > 1 or 0
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;
|
||||||
10
DSS/API/Locate.asm
Normal file
10
DSS/API/Locate.asm
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #52. “áâ ®¢¨âì ¯®«®¦¥¨¥ ªãàá®à .
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - áâப ªãàá®à
|
||||||
|
; E - ª®«®ª ªãàá®à
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
LOCATE: LD C,BIOS.LP_SET_PLACE
|
||||||
|
JP ToBIOS
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
197
DSS/API/MkDir.asm
Normal file
197
DSS/API/MkDir.asm
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
; [x] fat32 ;!TEST
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #1B. ‘®§¤ ¨¥ ª â «®£ .
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ª â «®£
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;
|
||||||
|
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
MKDIR:
|
||||||
|
;error
|
||||||
|
.DIR_EXISTS: LD A,DSS_Error.sys.DIR_EXISTS
|
||||||
|
CCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
; Entry point ;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
.B: PUSH HL
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
CALL .START
|
||||||
|
PUSH AF
|
||||||
|
LD HL,CORE_BUFFERS.CurrentDirectory
|
||||||
|
CALL CHDIR
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.START: CALL SetPath_GetName ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||||
|
RET C
|
||||||
|
; [ ] 26/06/2024
|
||||||
|
CALL CHECK_64kb_CLUSTER
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
CALL MASK
|
||||||
|
RET C
|
||||||
|
;!TEST optimization à ¥¥ SetPath_GetName 㦥 § £à㧨« ¤¨à¥ªâ®à¨î
|
||||||
|
;CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£
|
||||||
|
;
|
||||||
|
CALL SEARCH.Dir ; ¯®¨áª § ¯¨á¨ ª â «®£ ¢ ᯨ᪥ ¤¨áª
|
||||||
|
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
|
||||||
|
; LD A,DSS_Error.sys.DIR_EXISTS
|
||||||
|
; CCF
|
||||||
|
; RET C ; ª â «®£ ©¤¥
|
||||||
|
JR NC,.DIR_EXISTS
|
||||||
|
CP DSS_Error.sys.FILE_NOT_FOUND
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
;
|
||||||
|
CALL G_CLUST
|
||||||
|
RET C
|
||||||
|
; fat32
|
||||||
|
PUSH HL ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
||||||
|
EXX
|
||||||
|
PUSH HL ; áâ à訩 ®¬¥à ᥪâ®à
|
||||||
|
EXX
|
||||||
|
;
|
||||||
|
XOR A ; 㬥ìè¨âì
|
||||||
|
CALL SET_NEW_FREE_CLUSTERS ; [ ] free clusters for FSInfo
|
||||||
|
;
|
||||||
|
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||||
|
CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||||
|
LD HL,MASKARE
|
||||||
|
LD DE,HANDBUF
|
||||||
|
LD BC,11
|
||||||
|
LDIR
|
||||||
|
EX DE,HL
|
||||||
|
LD A,FAT_ATTR.DIRECTORY ; âਡãâ § ¯¨á¨ ª â «®£
|
||||||
|
; FAT_DIRECTORY_RECORD.ATTRIBUT
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
LD BC,#0800 ; b=áç¥â稪
|
||||||
|
;
|
||||||
|
.loop1: LD (HL),C
|
||||||
|
INC HL
|
||||||
|
DJNZ .loop1
|
||||||
|
; FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H
|
||||||
|
; fat32 § ¯¨áì áâ à襣® ®¬¥à ª« áâ¥à .FIRST_CLUSTER_H
|
||||||
|
POP DE
|
||||||
|
PUSH DE ; áâ à訩 ®¬¥à ᥪâ®à
|
||||||
|
LD (HL),E
|
||||||
|
INC HL
|
||||||
|
LD (HL),D
|
||||||
|
INC HL
|
||||||
|
;
|
||||||
|
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
|
||||||
|
; § ¯¨áì ¬« ¤è¥£® ®¬¥à ª« áâ¥à .FIRST_CLUSTER_L
|
||||||
|
POP BC ; áâ à訩 ®¬¥à ᥪâ®à
|
||||||
|
POP DE ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
||||||
|
PUSH DE
|
||||||
|
PUSH BC
|
||||||
|
; FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L
|
||||||
|
LD (HL),E
|
||||||
|
INC HL
|
||||||
|
LD (HL),D
|
||||||
|
INC HL
|
||||||
|
; FAT_DIRECTORY_RECORD.F_SIZE
|
||||||
|
LD BC,#0400 ; b=áç¥â稪
|
||||||
|
.loop2: LD (HL),C
|
||||||
|
INC HL
|
||||||
|
DJNZ .loop2
|
||||||
|
;
|
||||||
|
CALL WRT_HND ; ᪮¯¨à. ®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª (ª â «®£ )
|
||||||
|
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||||
|
;
|
||||||
|
; á®§¤ ñ¬ á«ã¦¥¡ë¥ ª â «®£¨ "." ¨ ".." ¢ á®§¤ ®¬ ª â «®£¥
|
||||||
|
; Š€’€‹Žƒ "."
|
||||||
|
LD HL,CORE_BUFFERS.SECTOR_BUFFER ; ¡ãä¥à
|
||||||
|
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£
|
||||||
|
LD BC,10*256 + ' ' ; !HARDCODE b=áç¥â稪, c=¯à®¡¥«
|
||||||
|
;
|
||||||
|
.loop3: INC HL
|
||||||
|
LD (HL),C
|
||||||
|
DJNZ .loop3
|
||||||
|
; ᪮¯¨à®¢ âì ¡ ©âë 11..31 FAT_DIRECTORY_RECORD
|
||||||
|
INC HL
|
||||||
|
LD DE,HANDBUF+FAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª âਡã⮢ ä ©«
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,21 ; !HARDCODE
|
||||||
|
LDIR
|
||||||
|
; Š€’€‹Žƒ ".."
|
||||||
|
EX DE,HL
|
||||||
|
LD (HL),"." ; § ¯¨áì த¨â. ª â «®£
|
||||||
|
INC HL
|
||||||
|
LD (HL),"."
|
||||||
|
LD BC,9*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
|
||||||
|
.loop4: INC HL
|
||||||
|
LD (HL),C
|
||||||
|
DJNZ .loop4
|
||||||
|
;
|
||||||
|
INC HL
|
||||||
|
SET_PAGE_X DIRPAGE
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
LD DE,DIRPAGE.buffer + FAT_DIRECTORY_RECORD.ATTRIBUT ; âਡãâë § ¯¨á¨
|
||||||
|
;
|
||||||
|
LD A,(DIRPAGE.buffer)
|
||||||
|
CP "."
|
||||||
|
JR Z,.copy_dir_record
|
||||||
|
;
|
||||||
|
;LD IX,HANDBUF
|
||||||
|
XOR A
|
||||||
|
LD (HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),A
|
||||||
|
LD (HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1),A
|
||||||
|
LD (HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H),A
|
||||||
|
LD (HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1),A
|
||||||
|
LD DE,HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª âਡã⮢ ä ©«
|
||||||
|
.copy_dir_record:
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,HANDBUF.SIZE - FAT_DIRECTORY_RECORD.ATTRIBUT ; 21
|
||||||
|
LDIR
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;
|
||||||
|
EX DE,HL
|
||||||
|
LD D,H
|
||||||
|
LD E,L
|
||||||
|
INC DE
|
||||||
|
LD (HL),0
|
||||||
|
LD BC,512-65 ;!HARDCODE ;!FIXIT ; [ ] sector size
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
POP HL ; áâ à訩 ®¬¥à ᥪâ®à
|
||||||
|
EXX
|
||||||
|
POP HL ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
||||||
|
CALL CLUSTER_TO_SECTOR
|
||||||
|
LD A,(CORE_BUFFERS.FS_Buffer.SectorsPerCluster) ; ᥪâ®à®¢ ª« áâ¥à
|
||||||
|
.MKD12: PUSH AF
|
||||||
|
PUSH HL ; áâ. à §àï¤
|
||||||
|
PUSH IX ; ®¬¥à «®£. ᥪâ®à
|
||||||
|
;
|
||||||
|
CALL WRITE_SECTOR
|
||||||
|
; !FIXIT ¥â ¯à®¢¥àª¨ ®è¨¡ªã
|
||||||
|
;
|
||||||
|
LD HL,CORE_BUFFERS.SECTOR_BUFFER
|
||||||
|
; [x] optimization
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JR Z,.skip_clean
|
||||||
|
;
|
||||||
|
LD DE,CORE_BUFFERS.SECTOR_BUFFER+1
|
||||||
|
LD BC,511 ;!HARDCODE ;!FIXIT ; [ ] sector size
|
||||||
|
LD (HL),0
|
||||||
|
LDIR
|
||||||
|
.skip_clean: ;
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
INC IX
|
||||||
|
LD A,XH
|
||||||
|
OR XL
|
||||||
|
JR NZ,.MKD11
|
||||||
|
INC HL
|
||||||
|
.MKD11 POP AF
|
||||||
|
DEC A
|
||||||
|
JR NZ,.MKD12
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
41
DSS/API/Move_FP.asm
Normal file
41
DSS/API/Move_FP.asm
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
; HL:IX - OFFSET POINTER
|
||||||
|
; A - FILE MANIPULATOR
|
||||||
|
MOVE_FP: CALL SET_FM
|
||||||
|
RET C
|
||||||
|
INC B
|
||||||
|
DJNZ .B_1
|
||||||
|
;from Start File
|
||||||
|
; B=0
|
||||||
|
.F_start: LD C,B
|
||||||
|
LD D,B
|
||||||
|
LD E,B
|
||||||
|
JP .DO
|
||||||
|
;
|
||||||
|
.B_1: DJNZ .B_2
|
||||||
|
;from Current Position
|
||||||
|
.F_current: LD C,(IY+_sFM.F_POSITION)
|
||||||
|
LD B,(IY+_sFM.F_POSITION+1)
|
||||||
|
LD E,(IY+_sFM.F_POSITION+2)
|
||||||
|
LD D,(IY+_sFM.F_POSITION+3)
|
||||||
|
.DO: ADD IX,BC
|
||||||
|
ADC HL,DE
|
||||||
|
LD D,XH
|
||||||
|
LD E,XL
|
||||||
|
LD (IY+_sFM.F_POSITION),E
|
||||||
|
LD (IY+_sFM.F_POSITION+1),D
|
||||||
|
LD (IY+_sFM.F_POSITION+2),L
|
||||||
|
LD (IY+_sFM.F_POSITION+3),H
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.B_2: DJNZ .error
|
||||||
|
;from End File
|
||||||
|
.B_end: LD C,(IY + _sFM.FS_REC.F_SIZE)
|
||||||
|
LD B,(IY + _sFM.FS_REC.F_SIZE+1)
|
||||||
|
LD E,(IY + _sFM.FS_REC.F_SIZE+2)
|
||||||
|
LD D,(IY + _sFM.FS_REC.F_SIZE+3)
|
||||||
|
JP .DO
|
||||||
|
; B > 2
|
||||||
|
.error: LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
91
DSS/API/Open.asm
Normal file
91
DSS/API/Open.asm
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
; [x] fat32 ;!TEST
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #11. Žâªàë⨥ ä ©« .
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ä ©«
|
||||||
|
; A - ०¨¬ ¤®áâ㯠:
|
||||||
|
; A=0 ç⥨¥/§ ¯¨áì
|
||||||
|
; A=1 ç⥨¥
|
||||||
|
; A=2 § ¯¨áì
|
||||||
|
; ;!TODO A=3 § ¯¨áì ¡¥§ «¨è¨å á®åà ¥¨© ªíè FAT
|
||||||
|
; ;!TODO A=4 § ¯¨á âì ªíè FAT
|
||||||
|
; ¢ë室: CF=0, A - ¤¥áªà¨¯â®à ä ©« .
|
||||||
|
; CF=1, A - ª®¤ ®è¨¡ª¨.
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
;AND #7F ; ACCESS_MODE bit7 - ¤«ï ¢ãâ॥£® ¨á¯®«ì§®¢ ¨ï))) ;!TODO
|
||||||
|
LD (.TMP),A
|
||||||
|
PUSH HL
|
||||||
|
CALL DIR_PATH_CHECK.forceCheck
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir?
|
||||||
|
;R008 ;
|
||||||
|
;.start: ;
|
||||||
|
CALL SetPath_GetName
|
||||||
|
RET C
|
||||||
|
CALL MASK
|
||||||
|
RET C
|
||||||
|
.FILE: CALL SEARCH.File ; enter point from EXEC, CREATE
|
||||||
|
RET C
|
||||||
|
;R002 ;!TEST 9/11/23 record index
|
||||||
|
.FM: PUSH DE ; á®åà 塞 㪠§ â¥«ì § ¯¨áì ¢ ª â «®£¥ FS (¯®«ãç¥ ¨§ SEARCH)
|
||||||
|
;
|
||||||
|
CALL GET_FM ; enter point from ATTRIB
|
||||||
|
RET C
|
||||||
|
LD A,C
|
||||||
|
EX AF,AF'
|
||||||
|
;!TEST 9/11/23 record index 㪠§ â¥«ì § ¯¨áì ¢ ª â «®£¥ FS
|
||||||
|
POP DE
|
||||||
|
; EXX
|
||||||
|
LD (IY+_sFM.HANDLE),E
|
||||||
|
LD (IY+_sFM.HANDLE+1),D
|
||||||
|
; EXX
|
||||||
|
;
|
||||||
|
LD D,YH
|
||||||
|
LD E,YL
|
||||||
|
LD HL,HANDBUF
|
||||||
|
LD BC,HANDBUF.SIZE
|
||||||
|
LDIR
|
||||||
|
.TMP+1: LD A,0
|
||||||
|
LD (IY+_sFM.ACCESS_MODE),A
|
||||||
|
LD A,(TASK)
|
||||||
|
LD (IY+_sFM.TASK_NUM),A
|
||||||
|
;!FIXIT ®¯â¨¬¨§ãâì âãâ § ã«¥¨¥
|
||||||
|
XOR A
|
||||||
|
LD (IY+_sFM.OptimizedClusters),A
|
||||||
|
LD (IY+_sFM.KnownCluster_L),A
|
||||||
|
LD (IY+_sFM.KnownCluster_L+1),A
|
||||||
|
LD (IY+_sFM.KnownOffset_L),A
|
||||||
|
LD (IY+_sFM.KnownOffset_L+1),A
|
||||||
|
; fat32
|
||||||
|
LD (IY+_sFM.KnownCluster_H),A
|
||||||
|
LD (IY+_sFM.KnownCluster_H+1),A
|
||||||
|
LD (IY+_sFM.KnownOffset_H),A
|
||||||
|
LD (IY+_sFM.KnownOffset_H+1),A
|
||||||
|
;
|
||||||
|
LD (IY+_sFM.F_POSITION),A
|
||||||
|
LD (IY+_sFM.F_POSITION+1),A
|
||||||
|
LD (IY+_sFM.F_POSITION+2),A
|
||||||
|
LD (IY+_sFM.F_POSITION+3),A
|
||||||
|
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
|
||||||
|
LD (IY+_sFM.DRIVE),A
|
||||||
|
; fat32
|
||||||
|
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_H
|
||||||
|
LD E,(HL)
|
||||||
|
INC HL
|
||||||
|
LD D,(HL)
|
||||||
|
LD (IY+_sFM.DIR_CLUSTER_H),E
|
||||||
|
LD (IY+_sFM.DIR_CLUSTER_H+1),D
|
||||||
|
;
|
||||||
|
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_L ; work directory FM
|
||||||
|
LD E,(HL)
|
||||||
|
INC HL
|
||||||
|
LD D,(HL)
|
||||||
|
LD (IY+_sFM.DIR_CLUSTER_L),E
|
||||||
|
LD (IY+_sFM.DIR_CLUSTER_L+1),D
|
||||||
|
;
|
||||||
|
EX AF,AF'
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
30
DSS/API/PChars.asm
Normal file
30
DSS/API/PChars.asm
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #5C. ‚뢮¤ áâப¨ íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ ⥫ì áâபã ᨬ¢®«®¢
|
||||||
|
; ¢ë室: HL - 㪠§ ⥫ì á«¥¤ãîéãî áâபã ᨬ¢®«®¢
|
||||||
|
; PRINT NULL-TERMINATED CHARS STRING
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; PCHARS: LD A,(HL)
|
||||||
|
; INC HL
|
||||||
|
; OR A
|
||||||
|
; RET Z
|
||||||
|
; CALL PUTCHAR
|
||||||
|
; JP PCHARS
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
PCHARS: XOR A ; no attr-mode
|
||||||
|
LD A,(CLEAR.shell_color)
|
||||||
|
LD B,A
|
||||||
|
EX AF,AF'
|
||||||
|
XOR A ; no XY-mode
|
||||||
|
LD C,BIOS.LP_PR_LINE_DIR
|
||||||
|
LD IY,0 ; YH = YL = B
|
||||||
|
JP ToBIOS
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; A - âਡãâë ¢ë¢®¤¨¬®£® ᨬ¢®« ¥á«¨ CF'
|
||||||
|
; CF - XY-mode
|
||||||
|
; DE - ¬¥á⮠ᨬ¢®« ¢ ®ª¥, ¥á«¨ CF=1
|
||||||
|
; HL - ¤à¥á á ¢ë¢®¤¨¬®© áâப®©
|
||||||
|
; B - 梥⠪®á®«¨ (¨á¯®«ì§ã¥âáï ¯à¨ áªà®««¥ ¨ ®ç¨á⪥ ®ª )
|
||||||
|
; IY - ¤¢ ᯥæ.ᨬ¢®« ¤«ï ¢ë室 á CF=1. „®«¦ë ¡ëâì à ¢ë B, ¥á«¨ ¥ ã¦ë
|
||||||
|
; CF' - ¢ë¢®¤¨âì ᨬ¢®« á âਡãâ ¬¨
|
||||||
74
DSS/API/Print.asm
Normal file
74
DSS/API/Print.asm
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #5F. ‚뢮¤ ᨬ¢®« ¯à¨â¥à ¡¥§ ®¦¨¤ ¨ï.
|
||||||
|
;
|
||||||
|
; ˆâ¥à¯à¥â æ¨ï ¡ ©â á®áâ®ï¨ï ¯à¨â¥à :
|
||||||
|
; 0..2 - ¥ ¨á¯®«ì§ãîâáï, ®¡ëç® ãáâ. ¢ "1"
|
||||||
|
; 3 - ®è¨¡ª ¯à¨â¥à - ¥áâì/¥â (1/0)
|
||||||
|
; 4 - ¯à¨â¥à ¯®¤ª«îç¥/¥ ¯®¤ª«îç¥ (1/0)
|
||||||
|
; 5 - ¡ã¬ £¨ ¥â/¥áâì (1/0)
|
||||||
|
; 6 - ¯à¨â¥à £®â®¢/¢ë¢®¤¨â ®ç¥à¥¤®© ᨬ¢®« (1/0)
|
||||||
|
; 7 - ¯à¨â¥à ᢮¡®¤¥/§ ïâ (1/0)
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ᨬ¢®«
|
||||||
|
; ¢ë室: B - ᨬ¢®«
|
||||||
|
; CF - ®è¨¡ª , A=¡ ©â á®áâ®ï¨ï (¡¨âë 7..3)
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
Z84_SP:
|
||||||
|
.LPT_A EQU Z84.SIO.Ch_B.Ctrl
|
||||||
|
.LPT_B EQU Z84.PIO.Port_A.Data
|
||||||
|
.LPT1_C EQU Z84.PIO.Port_A.Command
|
||||||
|
.LPT2_D EQU Z84.PIO.Port_B.Data
|
||||||
|
.LPT2_C EQU Z84.PIO.Port_B.Command
|
||||||
|
;
|
||||||
|
PRINT: AND A
|
||||||
|
LD B,A ; á®åà 塞 ᨬ¢®«
|
||||||
|
;
|
||||||
|
LD A,R
|
||||||
|
DI
|
||||||
|
PUSH AF
|
||||||
|
; reg 0
|
||||||
|
XOR A
|
||||||
|
OUT (Z84_SP.LPT_A),A
|
||||||
|
LD A,%0001'0000 ; Reset EXT/STATUS interrupts
|
||||||
|
OUT (Z84_SP.LPT_A),A
|
||||||
|
XOR A
|
||||||
|
OUT (Z84_SP.LPT_A),A
|
||||||
|
IN A,(Z84_SP.LPT_A) ; IN (1Bh): bit 5 - busy, Bit 3 - Ack
|
||||||
|
LD C,A
|
||||||
|
BIT 5,A ; IN (19h): bit 5 - Paper Enable, Bit 3 - Select
|
||||||
|
JR NZ,.LPTBUSY
|
||||||
|
AND %11011000
|
||||||
|
JR Z,.LPTBUSY
|
||||||
|
LD A,B ; ¢®ááâ ¢«¨¢ ¥¬ ᨬ¢®«
|
||||||
|
OUT (Z84_SP.LPT_B),A
|
||||||
|
POP AF
|
||||||
|
RET PO
|
||||||
|
EI
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.LPTBUSY: POP AF
|
||||||
|
LD A,C
|
||||||
|
SCF
|
||||||
|
RET PO
|
||||||
|
EI
|
||||||
|
RET
|
||||||
|
; ; ;
|
||||||
|
|
||||||
|
; B - SYMBOL
|
||||||
|
; CF = 1 - PRINTER BUSY
|
||||||
|
PRINT_INIT: DI
|
||||||
|
LD A,#CF
|
||||||
|
; port #1F ⮫쪮 ç¥p¥§ LD BC,1F : Out (BC),reg (¢ «ìâ¥à¥ ¨¤ñâ ¯¥à¥å¢ â í⮣® ¯®àâ ¯à®æ , ¥á«¨ ® ¢ ª®¬ ¤¥  㪠§ )
|
||||||
|
LD BC,Z84_SP.LPT2_C
|
||||||
|
OUT (C),A
|
||||||
|
;[x] 29/9/23
|
||||||
|
;LD A,#63
|
||||||
|
LD A,63
|
||||||
|
;
|
||||||
|
OUT (C),A
|
||||||
|
LD A,#C0 ; Bit 7 - Select (1), Bit 6 - Auto_Line_Feed (1)
|
||||||
|
OUT (Z84_SP.LPT2_D),A
|
||||||
|
LD A,#0F ; Init printer port for Out
|
||||||
|
OUT (Z84_SP.LPT1_C),A
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
127
DSS/API/PutChar.asm
Normal file
127
DSS/API/PutChar.asm
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #5B. ‚뢮¤ ᨬ¢®« íªà ¢ ⥪. ¯®§¨æ¨¨.
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ᨬ¢®«
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; PUTCHAR: ;CALL .NO_SCROLL
|
||||||
|
; CP #0E
|
||||||
|
; JR C,.control_characters
|
||||||
|
; ;
|
||||||
|
; LD BC,1*256 + BIOS.LP_PRINT_SYM
|
||||||
|
; ;[x] CR+LF+SCROLL
|
||||||
|
; RST ToBIOS
|
||||||
|
; ;
|
||||||
|
; ; ¯à®¢¥àª ¯¥à¥å®¤ ªãàá®à ¢ á ¬®¥ ç «® (X:Y == 0:0)
|
||||||
|
; CALL CURSOR
|
||||||
|
; LD A,D
|
||||||
|
; OR E
|
||||||
|
; RET NZ
|
||||||
|
; ;
|
||||||
|
; .LFF: PUSH HL
|
||||||
|
; LD BC,1*256 + BIOS.LP_SCROLL_UD
|
||||||
|
; LD DE,#0020
|
||||||
|
; RST ToBIOS
|
||||||
|
; LD DE,#1F00
|
||||||
|
; CALL LOCATE
|
||||||
|
; LD A,' '
|
||||||
|
; LD BC,#50*256 + BIOS.LP_PRINT_SYM
|
||||||
|
; RST ToBIOS
|
||||||
|
; LD DE,#1F00
|
||||||
|
; CALL LOCATE
|
||||||
|
; POP HL
|
||||||
|
; RET
|
||||||
|
; .TB_: CALL CURSOR
|
||||||
|
; IF TABisSPACES
|
||||||
|
; LD B,E
|
||||||
|
; LD A,E
|
||||||
|
; AND #F8
|
||||||
|
; ADD A,8
|
||||||
|
; SUB B
|
||||||
|
; LD B,A
|
||||||
|
; LD A,' '
|
||||||
|
; LD C,BIOS.LP_PRINT_SYM
|
||||||
|
; JP ToBIOS
|
||||||
|
; ELSE
|
||||||
|
; LD A,E
|
||||||
|
; ADD A,8
|
||||||
|
; AND #78 ;????? £«ïãâì, çâ® ¡ã¤¥â ¥á«¨ ª®®à¤¨ âë ªãàá®à ¢ ª®æ¥ áâப¨ ¯®çâ¨
|
||||||
|
; LD E,A
|
||||||
|
; JP LOCATE
|
||||||
|
; ENDIF
|
||||||
|
; .BK_: CALL CURSOR
|
||||||
|
; XOR A
|
||||||
|
; CP E
|
||||||
|
; RET Z
|
||||||
|
; DEC E
|
||||||
|
; JP LOCATE
|
||||||
|
; ;
|
||||||
|
; .LF_: CALL CURSOR
|
||||||
|
; LD A,D
|
||||||
|
; CP #1F
|
||||||
|
; JR NC,.LFF
|
||||||
|
; INC D
|
||||||
|
; IFN EnoughtOnly_LF
|
||||||
|
; JP LOCATE
|
||||||
|
; ELSE
|
||||||
|
; CALL LOCATE
|
||||||
|
; ; !!!! <20>… à §àë¢ âì LF_ ¨ CR_ !!!!
|
||||||
|
; ENDIF
|
||||||
|
; .CR_: CALL CURSOR
|
||||||
|
; LD E,0
|
||||||
|
; JP LOCATE
|
||||||
|
; ;
|
||||||
|
; .control_characters:
|
||||||
|
; CP "\r"
|
||||||
|
; JR Z,.CR_
|
||||||
|
; CP "\n"
|
||||||
|
; JR Z,.LF_
|
||||||
|
; CP "\t" ; tab
|
||||||
|
; JR Z,.TB_
|
||||||
|
; CP "\b" ; backspace
|
||||||
|
; JR Z,.BK_
|
||||||
|
; CP "\a" ; [x] Beep in PChars/PUTCHAR
|
||||||
|
; RET NZ
|
||||||
|
; ; [x] Beep in PChars/PUTCHAR
|
||||||
|
; .BELL: LD DE,1200
|
||||||
|
; PUSH HL
|
||||||
|
; LD HL,4
|
||||||
|
; CALL BEEP
|
||||||
|
; POP HL
|
||||||
|
; RET
|
||||||
|
; ;
|
||||||
|
; ; [x] -bug with Vasil's version of cursor
|
||||||
|
; .NO_SCROLL: CP #0E
|
||||||
|
; JR C,.control_characters
|
||||||
|
; LD BC,1*256 + BIOS.LP_PRINT_SYM
|
||||||
|
; JP ToBIOS
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
PUTCHAR: PUSH HL
|
||||||
|
;
|
||||||
|
LD L,A
|
||||||
|
XOR A ; no attr-mode
|
||||||
|
LD H,A
|
||||||
|
PUSH HL ; ª« ¤ñ¬ á⥪ ¯¥ç â ¥¬ë© ᨬ¢®«
|
||||||
|
LD L,A
|
||||||
|
ADD HL,SP
|
||||||
|
;
|
||||||
|
LD A,(CLEAR.shell_color)
|
||||||
|
LD B,A
|
||||||
|
EX AF,AF'
|
||||||
|
XOR A ; no XY-mode
|
||||||
|
LD C,BIOS.LP_PR_LINE_DIR
|
||||||
|
LD IY,0 ; YH = YL = B
|
||||||
|
RST ToBIOS
|
||||||
|
POP HL ; ¢®ááâ ¢«¨¢ ¥¬ á⥪
|
||||||
|
;
|
||||||
|
POP HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
; .NO_SCROLL:
|
||||||
|
|
||||||
|
; .CHAR: DZ "X"
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
15
DSS/API/RdChar.asm
Normal file
15
DSS/API/RdChar.asm
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #57. <20>à®ç¨â âì ᨬ¢®« á íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - áâப
|
||||||
|
; E - ª®«®ª
|
||||||
|
; ¢ë室: A - ᨬ¢®«
|
||||||
|
; B - âਡãâ
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
RDCHAR: XOR A
|
||||||
|
LD C,BIOS.WIN_GET_SYM
|
||||||
|
RST ToBIOS
|
||||||
|
LD A,L
|
||||||
|
LD B,H
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
173
DSS/API/Read.asm
Normal file
173
DSS/API/Read.asm
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
; HL - BUFFER ADDRESS
|
||||||
|
; DE - BLOCK SIZE
|
||||||
|
; A - FM
|
||||||
|
READ: LD (.R_POINT),HL
|
||||||
|
LD (.S_POINT),HL
|
||||||
|
CALL SET_FM
|
||||||
|
RET C
|
||||||
|
CALL .TEST_SIZE
|
||||||
|
;
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JP Z,.NOREAD
|
||||||
|
;
|
||||||
|
PUSH DE
|
||||||
|
LD A,(IY+_sFM.DRIVE)
|
||||||
|
CALL OPENDSK
|
||||||
|
JP C,.ERR_1
|
||||||
|
CALL GET_OFFSET_IN_SECTORS
|
||||||
|
;
|
||||||
|
JP NZ,.ROV1
|
||||||
|
.ROV4: POP BC
|
||||||
|
PUSH BC
|
||||||
|
SRL B
|
||||||
|
JR Z,.ROV2
|
||||||
|
; ç⥨¥ áà §ã ¢ ¡ãä¥à ¯®«ì§®¢ ⥫ï
|
||||||
|
LD (.SECTORH),HL
|
||||||
|
LD (.SECTORL),DE
|
||||||
|
.R_POINT+2: LD IX,0
|
||||||
|
CALL BLOCK_READ
|
||||||
|
JP C,.ERR_1
|
||||||
|
LD DE,(.R_POINT)
|
||||||
|
.PointerOnBuffer+1:
|
||||||
|
LD HL,0 // LD HL,(READMEM)
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
LD C,H
|
||||||
|
LD B,0
|
||||||
|
ADD HL,DE
|
||||||
|
LD (.R_POINT),HL
|
||||||
|
SRL C
|
||||||
|
.SECTORL+1: LD HL,0 // LD HL,(SECTORL)
|
||||||
|
ADD HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
.SECTORH+1: LD HL,0 // LD HL,(SECTORH)
|
||||||
|
LD C,B
|
||||||
|
ADC HL,BC
|
||||||
|
.ROV2: POP BC
|
||||||
|
LD A,B
|
||||||
|
AND #01
|
||||||
|
LD B,A
|
||||||
|
OR C
|
||||||
|
JP Z,.ROV6
|
||||||
|
; ç⥨¥ ç¥à¥§ ¡ãä¥à DSS, ¥á«¨ à §¬¥à ¤ ëå < 512
|
||||||
|
PUSH BC
|
||||||
|
LD IX,CORE_BUFFERS.BUFFER+#C000
|
||||||
|
LD B,1
|
||||||
|
IN A,(SLOT3)
|
||||||
|
PUSH AF
|
||||||
|
IN A,(SLOT0)
|
||||||
|
OUT (SLOT3),A
|
||||||
|
CALL BLOCK_READ
|
||||||
|
POP BC
|
||||||
|
LD C,SLOT3
|
||||||
|
OUT (C),B
|
||||||
|
JP C,.ERR_1
|
||||||
|
LD HL,CORE_BUFFERS.BUFFER
|
||||||
|
LD DE,(.R_POINT)
|
||||||
|
POP BC
|
||||||
|
LDIR
|
||||||
|
LD (.R_POINT),DE
|
||||||
|
.ROV6: LD HL,(.R_POINT)
|
||||||
|
.S_POINT+1: LD DE,0
|
||||||
|
;EX DE,HL
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
PUSH HL
|
||||||
|
EX DE,HL
|
||||||
|
LD XH,D
|
||||||
|
LD XL,E
|
||||||
|
LD HL,0
|
||||||
|
CALL MOVE_FP.F_current
|
||||||
|
POP DE
|
||||||
|
.NOREAD: ;
|
||||||
|
.COD+1: LD A,0
|
||||||
|
OR A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.ROV1: PUSH BC
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
LD IX,CORE_BUFFERS.BUFFER+#C000
|
||||||
|
LD B,1
|
||||||
|
IN A,(SLOT3)
|
||||||
|
PUSH AF
|
||||||
|
IN A,(SLOT0)
|
||||||
|
OUT (SLOT3),A
|
||||||
|
CALL BLOCK_READ
|
||||||
|
POP BC
|
||||||
|
LD C,SLOT3
|
||||||
|
OUT (C),B
|
||||||
|
POP HL
|
||||||
|
JP C,.ERR_3
|
||||||
|
; inc HL:DE
|
||||||
|
LD BC,1
|
||||||
|
ADD HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
POP HL
|
||||||
|
LD C,B
|
||||||
|
ADC HL,BC
|
||||||
|
;
|
||||||
|
EXX
|
||||||
|
POP DE
|
||||||
|
LD HL,512 ;!HARDCODE ;!FIXIT ; [ ] sector size
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
POP HL
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
JR NC,.ROV3
|
||||||
|
ADD HL,BC
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
LD HL,0 ;!TODO ¬®¦® âãâ ã¯à®áâ¨âì ¤ «ì¥©èãî ¢¥âªã?
|
||||||
|
.ROV3: PUSH HL
|
||||||
|
LD HL,CORE_BUFFERS.BUFFER
|
||||||
|
ADD HL,DE
|
||||||
|
LD DE,(.R_POINT)
|
||||||
|
LDIR
|
||||||
|
LD (.R_POINT),DE
|
||||||
|
EXX
|
||||||
|
JP .ROV4
|
||||||
|
;
|
||||||
|
.ERR_3: POP HL
|
||||||
|
POP HL
|
||||||
|
.ERR_1: POP BC
|
||||||
|
;SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.TEST_SIZE: XOR A
|
||||||
|
LD (READ.COD),A
|
||||||
|
LD L,(IY+_sFM.F_POSITION) ;FP LOW
|
||||||
|
LD H,(IY+_sFM.F_POSITION+1)
|
||||||
|
ADD HL,DE
|
||||||
|
;
|
||||||
|
EXX
|
||||||
|
;LD DE,0 ;!TEST
|
||||||
|
LD L,(IY+_sFM.F_POSITION+2) ;FP HIGH
|
||||||
|
LD H,(IY+_sFM.F_POSITION+3)
|
||||||
|
;!TEST
|
||||||
|
JR NC,.no_inc_hl
|
||||||
|
INC HL
|
||||||
|
;ADC HL,DE
|
||||||
|
;
|
||||||
|
.no_inc_hl: EXX ;HL':HL - NEW FP
|
||||||
|
;
|
||||||
|
LD C,(IY+_sFM.FS_REC.F_SIZE)
|
||||||
|
LD B,(IY+_sFM.FS_REC.F_SIZE+1) ;SIZE LOW
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
EXX
|
||||||
|
LD C,(IY+_sFM.FS_REC.F_SIZE+2) ;SIZE HIGH
|
||||||
|
LD B,(IY+_sFM.FS_REC.F_SIZE+3)
|
||||||
|
SBC HL,BC
|
||||||
|
EXX
|
||||||
|
RET C ;OK READ ALL
|
||||||
|
EX DE,HL
|
||||||
|
SBC HL,DE ;VERY BIG
|
||||||
|
EX DE,HL
|
||||||
|
LD A,#FF
|
||||||
|
LD (READ.COD),A
|
||||||
|
RET
|
||||||
85
DSS/API/Rename.asm
Normal file
85
DSS/API/Rename.asm
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #10. <20>¥à¥¨¬¥®¢ ¨¥ ä ©« .
|
||||||
|
; ƒ«®¡ «ìë¥ á¨¬¢®«ë * ¨ ? ¢ ¨¬¥ å ä ©«®¢ ¥ ¤®¯ã᪠îâáï.
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ ⥫ì áâ ஥ ¨¬ï ä ©«
|
||||||
|
; DE - 㪠§ â¥«ì ®¢®¥ ¨¬ï ä ©«
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;
|
||||||
|
; INPUT: HL - "old_name.ext",#00 without simbols * ?
|
||||||
|
; DE - "new_name.ext",#00 without simbols * ?
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
RENAME: ;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
CALL DIR_PATH_CHECK.forceCheck
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
; !TODO ¢®âªãâì âãâ SetPath_GetName, ç⮡ ¬®¦® ¡ë«® 㤠«ïâì ¯® ®â®á¨â¥«ìë¬ ¯ãâï¬?
|
||||||
|
;
|
||||||
|
; [ ] 26/06/2024
|
||||||
|
PUSH HL
|
||||||
|
CALL CHECK_64kb_CLUSTER
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
|
||||||
|
;
|
||||||
|
PUSH DE
|
||||||
|
CALL MASK.name
|
||||||
|
POP DE
|
||||||
|
RET C
|
||||||
|
;!TEST optimization
|
||||||
|
;LD HL,MASKARE
|
||||||
|
;LD BC,11
|
||||||
|
;LD A,"?"
|
||||||
|
;CPIR
|
||||||
|
;LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
;SCF
|
||||||
|
CALL CHECK_NAME
|
||||||
|
;
|
||||||
|
RET Z
|
||||||
|
PUSH DE
|
||||||
|
CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£
|
||||||
|
;LD A,#33
|
||||||
|
LD A,FAT_ATTR.NoSYSnoVolID
|
||||||
|
CALL SEARCH.Custom ; ¯®¨áª § ¯¨á¨ ¢ ᯨ᪥ ¤¨áª
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
;LD DE,MASKARE
|
||||||
|
CALL MASK.name
|
||||||
|
RET C
|
||||||
|
;!TEST optimization
|
||||||
|
;LD HL,MASKARE
|
||||||
|
;LD BC,11
|
||||||
|
;LD A,"?"
|
||||||
|
;CPIR
|
||||||
|
;LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
;SCF
|
||||||
|
CALL CHECK_NAME
|
||||||
|
;
|
||||||
|
RET Z
|
||||||
|
PUSH IX
|
||||||
|
LD A,FAT_ATTR.NoSYSnoVolID
|
||||||
|
CALL SEARCH.Custom ; ¯®¨áª § ¯¨á¨ ¢ ᯨ᪥ ¤¨áª
|
||||||
|
POP IX
|
||||||
|
LD A,DSS_Error.sys.FILE_EXISTS
|
||||||
|
CCF
|
||||||
|
RET C
|
||||||
|
|
||||||
|
SET_PAGE_X DIRPAGE
|
||||||
|
EX AF,AF'
|
||||||
|
;
|
||||||
|
LD HL,MASKARE
|
||||||
|
LD D,XH
|
||||||
|
LD E,XL
|
||||||
|
LD BC,11
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
CALL DELETE_LFN_RECORDS ; [ ] 㤠«¥¨¥ § ¯¨á¨ LFN
|
||||||
|
;
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
JP SAVEDIR
|
||||||
|
; ; ;
|
||||||
29
DSS/API/RetMem.asm
Normal file
29
DSS/API/RetMem.asm
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #3E. Žá¢®¡®¦¤¥¨¥ ¡«®ª ¯ ¬ïâ¨.
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ¨¤¥â¨ä¨ª â®à ¡«®ª ¯ ¬ïâ¨
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
RETMEM: LD E,A
|
||||||
|
LD D,#00
|
||||||
|
;LD HL,MEMTAB ; ¬ áᨢ ᯨ᪠¢ë¤¥«. áâà ¨æ
|
||||||
|
LD HL,CORE_BUFFERS.MemoryTable ; ¬ áᨢ ᯨ᪠¢ë¤¥«. áâà ¨æ
|
||||||
|
ADD HL,DE
|
||||||
|
LD A,(TASK) ; ã஢¥ì ⥪ã饩 ¯à®£à ¬¬ë
|
||||||
|
CP (HL)
|
||||||
|
LD A,DSS_Error.sys.INVALID_MEMORY_HND
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
;PUSH DE
|
||||||
|
LD A,E
|
||||||
|
LD C,BIOS.FreeMem
|
||||||
|
RST ToBIOS
|
||||||
|
;POP DE
|
||||||
|
LD A,DSS_Error.sys.INVALID_MEMORY_HND
|
||||||
|
RET C
|
||||||
|
;LD HL,MEMTAB
|
||||||
|
LD HL,CORE_BUFFERS.MemoryTable
|
||||||
|
ADD HL,DE
|
||||||
|
XOR A
|
||||||
|
LD (HL),A
|
||||||
|
RET
|
||||||
125
DSS/API/RmDir.asm
Normal file
125
DSS/API/RmDir.asm
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
; [x] fat32 ;!TEST
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #1C. “¤ «¥¨¥ ª â «®£ .
|
||||||
|
; Œ®¦® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
|
||||||
|
;
|
||||||
|
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ª â «®£
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;
|
||||||
|
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
PUSH HL
|
||||||
|
CALL DIR_PATH_CHECK
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
CALL .START
|
||||||
|
PUSH AF
|
||||||
|
LD HL,CORE_BUFFERS.CurrentDirectory
|
||||||
|
CALL CHDIR
|
||||||
|
CALL DIR_PATH_CHANGE.Current
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.START: CALL SetPath_GetName
|
||||||
|
RET C
|
||||||
|
; [ ] 26/06/2024
|
||||||
|
CALL CHECK_64kb_CLUSTER
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
CALL MASK
|
||||||
|
RET C
|
||||||
|
;!TEST optimization
|
||||||
|
;LD HL,MASKARE
|
||||||
|
;LD BC,11
|
||||||
|
;LD A,"?"
|
||||||
|
;CPIR
|
||||||
|
;LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
;SCF
|
||||||
|
CALL CHECK_NAME
|
||||||
|
;
|
||||||
|
RET Z
|
||||||
|
CALL LOADDIR
|
||||||
|
CALL SEARCH.Dir
|
||||||
|
RET C
|
||||||
|
; fat32
|
||||||
|
LD HL,(HANDBUF+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
|
||||||
|
EXX
|
||||||
|
LD HL,(HANDBUF+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
|
||||||
|
PUSH IX ;!TODO record index. ¢®§¬®¦®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ¨æë
|
||||||
|
;
|
||||||
|
;!TODO <20>à®æ¥¤ãà ¯®«®£® ¢ëç¨âë¢ ¨ï ª â «®£ (¢á¥ ª« áâ¥àë). Œ®¦® § ¤¥©á⢮¢ âì ¢ ¤àã£¨å ¬¥áâ å
|
||||||
|
.read_dir_big_loop:
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
CALL CLUSTER_TO_SECTOR
|
||||||
|
LD A,(CORE_BUFFERS.FS_Buffer.SectorsPerCluster)
|
||||||
|
LD B,A
|
||||||
|
; ç¨ ¥¬ ¢ëç¨âë¢ âì ᮤ¥à¦¨¬®¥ ª â «®£ ¯®á¥ªâ®à®
|
||||||
|
.read_dir_loop: ;PUSH AF
|
||||||
|
PUSH BC
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
CALL READ_SECTOR
|
||||||
|
; !FIXIT ¥â ¯à®¢¥àª¨ ®è¨¡ªã
|
||||||
|
;
|
||||||
|
;!HARDCODE sector size. 16 * 32 = 512; 32 - à §¬¥à § ¯¨á¨, 512 - à §¬¥à áç¨â ®£® ᥪâ®à
|
||||||
|
LD B,16
|
||||||
|
LD HL,CORE_BUFFERS.SECTOR_BUFFER
|
||||||
|
.check_dir_loop:;
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JP Z,.dir_empty
|
||||||
|
CP "."
|
||||||
|
JR Z,.next_record
|
||||||
|
CP #E5 ;!HARDCODE ¡ ©â 㤠«¥¨ï ä ©«
|
||||||
|
JR Z,.next_record
|
||||||
|
LD DE,FAT_DIRECTORY_RECORD.ATTRIBUT ; ᬥé. ¤® ¡ ©â âਡã⮢
|
||||||
|
ADD HL,DE
|
||||||
|
LD A,(HL)
|
||||||
|
SBC HL,DE
|
||||||
|
AND FAT_ATTR.VOLUME_ID
|
||||||
|
SCF
|
||||||
|
JP Z,.error ;DIR NOT EMPTY
|
||||||
|
.next_record: LD DE,FAT_DIRECTORY_RECORD
|
||||||
|
ADD HL,DE
|
||||||
|
DJNZ .check_dir_loop
|
||||||
|
;
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
INC IX
|
||||||
|
LD A,XH
|
||||||
|
OR XL
|
||||||
|
JR NZ,.no_inc_hl
|
||||||
|
INC HL
|
||||||
|
.no_inc_hl: POP BC
|
||||||
|
DJNZ .read_dir_loop
|
||||||
|
; fat32
|
||||||
|
EXX
|
||||||
|
POP HL ; ®¬¥à ª« áâ¥à
|
||||||
|
EXX
|
||||||
|
POP HL ; ®¬¥à ª« áâ¥à
|
||||||
|
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||||
|
EX DE,HL ; hl=®¬¥à á«¥¤. ª« áâ¥à
|
||||||
|
EXX
|
||||||
|
EX DE,HL ; hl=®¬¥à á«¥¤. ª« áâ¥à
|
||||||
|
EXX
|
||||||
|
JR NC,.read_dir_big_loop ; ¥ ª®¥æ 楯®çª¨
|
||||||
|
;
|
||||||
|
.delete: POP IX
|
||||||
|
JP DELETE_REC_FAT ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||||
|
;
|
||||||
|
.dir_empty: ; CF = 0
|
||||||
|
.error: ; CF = 1
|
||||||
|
POP HL
|
||||||
|
POP HL
|
||||||
|
POP HL
|
||||||
|
POP HL
|
||||||
|
POP HL
|
||||||
|
JR NC,.delete
|
||||||
|
POP HL
|
||||||
|
LD A,DSS_Error.sys.DIR_NOT_EMPTY
|
||||||
|
RET
|
||||||
|
;
|
||||||
62
DSS/API/ScanDRV.asm
Normal file
62
DSS/API/ScanDRV.asm
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
;R12
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #08 (DSS_RESCAN). <20>¥à¥áª ¨à®¢ âì ¤¥¢ ©áë á¨á⥬ë.
|
||||||
|
;
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: A - ®¬¥à ¯®á«¥¤¥£® «®£. ¤¨áª ¢ á¨á⥬¥
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; INCLUDE 'ScanDRV.asm'
|
||||||
|
;!TODO ª®¤ ¤¨ª® ª®áâë«ìë© ¨ ¡ã¤¥â ¯¥à¥¤¥« ¢¬¥áâ¥ á ¯à®æ¥¤ãன INITDVC
|
||||||
|
SCANDRV:
|
||||||
|
; 1. § ¯®¬¨ ¥¬ á®áâ®ï¨¥ ¯à¥àë¢ ¨©
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
LD A,R
|
||||||
|
DI
|
||||||
|
PUSH AF
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
; 2. ã§ ñ¬ ¡ãª¢ã ¡ãâ-¤¨áª
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
LD A,(BOOTDSK.NUM)
|
||||||
|
;CALL BOOTDSK.GET
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
; 3. ¢ë§ë¢ ¥¬ à¥áª
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
; A = Boot disk
|
||||||
|
LD B,A
|
||||||
|
LD A,Dss.DRV.RescanDRV
|
||||||
|
LD C,Dss.DRV.RescanDRV
|
||||||
|
RST ToDSS.DRV
|
||||||
|
; ¯à®¢¥àª ®è¨¡ªã boot disk lost
|
||||||
|
LD HL,.BOOT_DSK_LOST
|
||||||
|
LD E, +(80-.BOOT_DSK_LOST.size)/2 ; coord X
|
||||||
|
LD BC,.BOOT_DSK_LOST.size
|
||||||
|
JP C,KERNEL_PANIC
|
||||||
|
;
|
||||||
|
LD (LDRIVE),A
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
; 4. ¢á直© á«ãç © ¯¥à¥ç¨âë¢ ¥¬ ¤¨à४â®à¨î
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
LD A,(CORE_BUFFERS.CurrentPath)
|
||||||
|
SUB 'A'
|
||||||
|
CALL OPENDSK.open
|
||||||
|
JR NC,.disk_norm
|
||||||
|
LD A,(BOOTDSK.NUM)
|
||||||
|
CALL OPENDSK.open
|
||||||
|
;
|
||||||
|
.disk_norm: LD HL,CORE_BUFFERS.CurrentDirectory
|
||||||
|
CALL CHDIR
|
||||||
|
JR NC,.exit
|
||||||
|
LD HL,CORE_BUFFERS.CurrentDirectory
|
||||||
|
LD (HL),0
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
; 5. ¢ë室
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
.exit: POP AF
|
||||||
|
RET PO
|
||||||
|
EI
|
||||||
|
RET
|
||||||
|
|
||||||
|
.BOOT_DSK_LOST: DZ "Boot drive lost o_O"
|
||||||
|
.BOOT_DSK_LOST.size EQU $-.BOOT_DSK_LOST
|
||||||
|
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
105
DSS/API/Scroll.asm
Normal file
105
DSS/API/Scroll.asm
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #55. ‘ªà®««¨£ íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - áâப «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||||
|
; E - ª®«®ª «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||||
|
; H - ¢ëá®â ®ª
|
||||||
|
; L - è¨à¨ ®ª
|
||||||
|
; B = 1 - ¯à®ªàã⪠¢¢¥àå
|
||||||
|
; B = 2 - ¯à®ªàã⪠¢¨§
|
||||||
|
; A = 0 - ®ç¨é âì áâபã
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
SCROLL: DJNZ .SCR_DW ;!TODO § ¬¥¨âì BIOS.LP_SCROLL_UD ¨ ¯®á¬®âà¥âì, çâ® èãáâ॥
|
||||||
|
;[x] 04/04/23
|
||||||
|
;LD B,A
|
||||||
|
;LD C,H
|
||||||
|
;PUSH BC
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
LD XH,D
|
||||||
|
LD XL,E
|
||||||
|
INC D
|
||||||
|
DEC H
|
||||||
|
LD C,BIOS.WIN_MOVE
|
||||||
|
;[x] 29/9/23
|
||||||
|
LD A,R
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
|
DI ;[x] 29/9/23
|
||||||
|
RST ToBIOS
|
||||||
|
;[x] 29/9/23
|
||||||
|
POP AF
|
||||||
|
JP PO,.skip_EI
|
||||||
|
EI
|
||||||
|
.skip_EI:
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
;[x] 04/04/23
|
||||||
|
;POP BC
|
||||||
|
POP AF
|
||||||
|
;XOR A
|
||||||
|
;CP B
|
||||||
|
AND A
|
||||||
|
;
|
||||||
|
RET NZ
|
||||||
|
LD A,D
|
||||||
|
ADD A,H
|
||||||
|
DEC A ;R101
|
||||||
|
LD D,A
|
||||||
|
.print: PUSH DE ;R101
|
||||||
|
CALL LOCATE
|
||||||
|
LD A,' '
|
||||||
|
LD B,L
|
||||||
|
LD C,BIOS.LP_PRINT_SYM
|
||||||
|
RST ToBIOS
|
||||||
|
POP DE ;R101
|
||||||
|
JP LOCATE ;R101
|
||||||
|
;AND A
|
||||||
|
;RET
|
||||||
|
.SCR_DW:
|
||||||
|
DJNZ .SCR_ERR
|
||||||
|
;[x] 04/04/23
|
||||||
|
;LD B,A
|
||||||
|
;LD C,H
|
||||||
|
;PUSH BC
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
LD XH,D
|
||||||
|
LD XL,E
|
||||||
|
INC XH
|
||||||
|
DEC H
|
||||||
|
LD C,BIOS.WIN_MOVE
|
||||||
|
;[x] 29/9/23
|
||||||
|
LD A,R
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
|
DI ;[x] 29/9/23
|
||||||
|
RST ToBIOS
|
||||||
|
; [x] 29/9/23
|
||||||
|
POP AF
|
||||||
|
JP PO,.skip2_EI:
|
||||||
|
EI
|
||||||
|
.skip2_EI:
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
;[x] 29/9/23
|
||||||
|
;POP BC
|
||||||
|
POP AF
|
||||||
|
;XOR A
|
||||||
|
;CP B
|
||||||
|
AND A
|
||||||
|
;
|
||||||
|
RET NZ
|
||||||
|
JP SCROLL.print
|
||||||
|
.SCR_ERR:
|
||||||
|
LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
20
DSS/API/SelPage.asm
Normal file
20
DSS/API/SelPage.asm
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #54. ‚ë¡à âì ªâ¨¢ãî áâà ¨æã íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: B - áâà ¨æ íªà 0/1
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
SELPAGE:
|
||||||
|
LD A,(VMODE)
|
||||||
|
;BIT 7,A
|
||||||
|
CP %1000'0000
|
||||||
|
JR NC,.SEL2
|
||||||
|
PUSH BC
|
||||||
|
LD C,A
|
||||||
|
CALL SETVMOD.TEXT_M
|
||||||
|
POP BC
|
||||||
|
.SEL2: LD A,B
|
||||||
|
AND #01
|
||||||
|
OUT (SCREEN_SWITCH),A
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
32
DSS/API/SetDateTime.asm
Normal file
32
DSS/API/SetDateTime.asm
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #18. ˆ§¬¥¥¨¥ ¤ âë ¨ ¢à¥¬¥¨ ä ©« .
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ¤¥áªà¨¯â®à ä ©«
|
||||||
|
; D - ¤¥ì
|
||||||
|
; E - ¬¥áïæ
|
||||||
|
; IX - £®¤
|
||||||
|
; H - ç á
|
||||||
|
; L - ¬¨ãâë
|
||||||
|
; B - ᥪã¤ë
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
;!FIXIT ¤®? CHECK_64kb_CLUSTER
|
||||||
|
PUT_D_T: PUSH AF
|
||||||
|
CALL MK_TIME ; § ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||||||
|
POP AF ; ¤¥áªà¨¯â®à
|
||||||
|
PUSH DE
|
||||||
|
PUSH BC
|
||||||
|
CALL SET_FM
|
||||||
|
POP BC
|
||||||
|
POP DE
|
||||||
|
RET C
|
||||||
|
; [ ] VFAT
|
||||||
|
LD (IY + _sFM.FS_REC.TIME),E
|
||||||
|
LD (IY + _sFM.FS_REC.TIME+1),D
|
||||||
|
LD (IY + _sFM.FS_REC.DATE),C
|
||||||
|
LD (IY + _sFM.FS_REC.DATE+1),B
|
||||||
|
SET 7,(IY + _sFM.ACCESS_MODE) ;R006 ; ãáâ. ¯à¨§ ª ¨§¬¥¥¨ï ä ©«
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
73
DSS/API/SetMem.asm
Normal file
73
DSS/API/SetMem.asm
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #3F. ˆ§¬¥¥¨¥ ¡«®ª ¯ ¬ïâ¨.
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ¨¤¥â¨ä¨ª â®à ¡«®ª ¯ ¬ïâ¨
|
||||||
|
; B - ®¢ë© à §¬¥à ¡«®ª
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
SETMEM: LD E,A
|
||||||
|
LD D,#00
|
||||||
|
;LD HL,MEMTAB
|
||||||
|
LD HL,CORE_BUFFERS.MemoryTable ; ¬ áᨢ ᯨ᪠¢ë¤¥«. áâà ¨æ
|
||||||
|
ADD HL,DE
|
||||||
|
LD A,(TASK)
|
||||||
|
CP (HL)
|
||||||
|
LD A,DSS_Error.sys.INVALID_MEMORY_HND
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
LD D,B
|
||||||
|
PUSH DE
|
||||||
|
LD A,E
|
||||||
|
CALL .SIZEBLK
|
||||||
|
POP DE
|
||||||
|
LD A,DSS_Error.sys.INVALID_MEMORY_HND
|
||||||
|
RET C
|
||||||
|
LD A,B
|
||||||
|
CP D
|
||||||
|
RET Z
|
||||||
|
JR C,.INCMEM
|
||||||
|
; DECMEM
|
||||||
|
LD B,D
|
||||||
|
LD A,E
|
||||||
|
LD C,BIOS.DivMemBlocks
|
||||||
|
RST ToBIOS
|
||||||
|
LD A,B
|
||||||
|
LD C,BIOS.FreeMem
|
||||||
|
RST ToBIOS
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
; „®¡ ¢¨âì áâà ¨æ ¯ ¬ï⨠ª ¡«®ªã
|
||||||
|
.INCMEM:
|
||||||
|
LD A,D
|
||||||
|
SUB B
|
||||||
|
LD B,A
|
||||||
|
LD C,E
|
||||||
|
PUSH BC
|
||||||
|
LD C,BIOS.GetMem
|
||||||
|
RST ToBIOS
|
||||||
|
POP BC
|
||||||
|
LD B,A
|
||||||
|
LD A,DSS_Error.sys.NOT_ENOUGH_MEMORY
|
||||||
|
RET C
|
||||||
|
LD A,C
|
||||||
|
LD C,BIOS.MergeMemBlocks
|
||||||
|
RST ToBIOS
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.SIZEBLK:
|
||||||
|
LD B,#FF
|
||||||
|
LD C,A
|
||||||
|
.loop: INC B
|
||||||
|
PUSH BC
|
||||||
|
LD A,C
|
||||||
|
LD C,BIOS.GetMemPage
|
||||||
|
RST ToBIOS
|
||||||
|
POP BC
|
||||||
|
JR NC,.loop
|
||||||
|
OR A
|
||||||
|
SCF
|
||||||
|
RET Z
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
;
|
||||||
256
DSS/API/SetVMod.asm
Normal file
256
DSS/API/SetVMod.asm
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #50. ‚ë¡®à ०¨¬ íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ०¨¬ íªà
|
||||||
|
; #02 - ⥪áâ®¢ë© 40x32x16 梥⮢
|
||||||
|
; #03 - ⥪áâ®¢ë© 80x32x16 梥⮢
|
||||||
|
; #81 - £à ä¨ç¥áª¨© 320x256x256 梥⮢
|
||||||
|
; #82 - £à ä¨ç¥áª¨© 640x256x16 梥⮢
|
||||||
|
; B - áâà ¨æ íªà 0/1
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
SETVMOD: CP %1000'0000
|
||||||
|
LD C,A
|
||||||
|
JR NC,.GRAPH
|
||||||
|
.TEXT_M: LD IX,BACKTXT
|
||||||
|
PUSH IX
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,(VMODE)
|
||||||
|
LD (BACKTXT.VMODE),A
|
||||||
|
EX AF,AF'
|
||||||
|
OR A
|
||||||
|
JR Z,.NOMODE
|
||||||
|
DEC A
|
||||||
|
JR Z,.NOMODE
|
||||||
|
DEC A
|
||||||
|
LD HL,TAB_40x32
|
||||||
|
JR Z,.SET_TXT_MODE
|
||||||
|
DEC A
|
||||||
|
LD HL,TAB_80x32
|
||||||
|
JR Z,.SET_TXT_MODE
|
||||||
|
.NOMODE: POP IX
|
||||||
|
LD A,DSS_Error.sys.INVALID_VIDEO_MODE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
; “áâ ®¢ª £à ä. ०¨¬®¢
|
||||||
|
.GRAPH: CALL SAVETXT
|
||||||
|
AND #7F
|
||||||
|
JR Z,.G320_16c ; !TODO § ¬¥¨âì áãé¥áâ¢ãî騩 ०¨¬
|
||||||
|
DEC A
|
||||||
|
JR Z,.G320_256c
|
||||||
|
DEC A
|
||||||
|
JR Z,.G640_16c
|
||||||
|
;DEC A
|
||||||
|
;JP Z,.G640_256c ; !TODO § ¬¥¨âì áãé¥áâ¢ãî騩 ०¨¬
|
||||||
|
.G320_16c: LD A,DSS_Error.sys.INVALID_VIDEO_MODE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.SET_TXT_MODE: PUSH BC
|
||||||
|
LD A,B
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
OR B
|
||||||
|
AND #11
|
||||||
|
XOR #10
|
||||||
|
LD E,A
|
||||||
|
.SETMODE_END: CALL SETMODE
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
LD (VMODE),A
|
||||||
|
LD A,B
|
||||||
|
AND #01
|
||||||
|
OUT (SCREEN_SWITCH),A
|
||||||
|
LD A,(VMODE)
|
||||||
|
LD C,Dss.Mouse.SetVideoMode
|
||||||
|
RST ToDSS.Mouse
|
||||||
|
SAFE_PORTY
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.G320_256c: PUSH BC
|
||||||
|
LD HL,TAB_320x256_0
|
||||||
|
LD E,#11
|
||||||
|
CALL SETMODE
|
||||||
|
LD HL,TAB_320x256_1
|
||||||
|
LD E,#00
|
||||||
|
JP .SETMODE_END
|
||||||
|
;
|
||||||
|
.G640_16c: PUSH BC
|
||||||
|
LD HL,TAB_640x256_0
|
||||||
|
LD E,#11
|
||||||
|
CALL SETMODE
|
||||||
|
LD HL,TAB_640x256_1
|
||||||
|
LD E,#00
|
||||||
|
JP .SETMODE_END
|
||||||
|
;
|
||||||
|
VMODE: DB #03
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
; Žâªàëâì ®ª®
|
||||||
|
; ¢å®¤: hl=®¯¨á â¥«ì ®ª
|
||||||
|
; e=ä« £¨ ®ª
|
||||||
|
;
|
||||||
|
;02h - TEXT 40 x 32 (16 colors)
|
||||||
|
;03h - TEXT 80 x 32 (16 colors)
|
||||||
|
;80h - GRAF 320 x 256 (16 colors) ;!TODO § ïâì ¤à㣨¬
|
||||||
|
;81h - GRAF 320 x 256 (256 colors)
|
||||||
|
;82h - GRAF 640 x 256 (16 colors)
|
||||||
|
;83h - GRAF 640 x 256 (256 colors) ;!TODO § ïâì ¤à㣨¬
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
SETMODE: PUSH DE
|
||||||
|
LD DE,SYS_PAGE.SHARED_BUFFER_32b ; £àï§ë© å ª. ª¨¤ ¥â ¤ ë¥ ¢ ¡ãä¥à á«ã¦¥¡®© áâà ¨æë ¡¨®á .
|
||||||
|
LD BC,ScreenDescriptorTable.Size ; <20>ˆŽ‘ ¯à¨ ¨á¯®«ì§®¢ ¨¨ IX ¯à¥¤¯®« £ ¥â, çâ® ® 㪠§ë¢ ¥â
|
||||||
|
IN A,(SLOT3) ; ¤à¥á ¨¦¥ #C000 ¨ ¢áâ ¢«ï¥â ¢ âà¥âìî ¡ ªã áâà ¨æã #FE
|
||||||
|
EX AF,AF'
|
||||||
|
LD A,SYS_PAGE
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LDIR
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
.skip_EI: POP DE
|
||||||
|
LD IX,SYS_PAGE.SHARED_BUFFER_32b ; £àï§ë© å ª.
|
||||||
|
LD C,BIOS.WIN_OPEN
|
||||||
|
RST ToBIOS
|
||||||
|
SAFE_PORTY
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;IX+0 ;HORIZONTAL
|
||||||
|
;IX+1 ;VERTICAL
|
||||||
|
;IX+2 ;X - COORD
|
||||||
|
;IX+3 ;Y - COORD
|
||||||
|
;IX+4 ;MODE
|
||||||
|
;IX+5 ;EXT MODE
|
||||||
|
;IX+6 ;VIDEO RAM X OFFSET (SIGNPLACES)
|
||||||
|
;IX+7 ;VIDEO RAM Y OFFSET (SIGNPLACES)
|
||||||
|
|
||||||
|
;
|
||||||
|
;.......................................................................
|
||||||
|
;+0 X à §¬¥à ®ª ¢ § ª®¬¥áâ å
|
||||||
|
;+1 Y à §¬¥à ®ª ¢ § ª®¬¥áâ å
|
||||||
|
;+2 X ¯®«®¦. ®ª íªà ¥
|
||||||
|
;+3 Y ¯®«®¦. ®ª íªà ¥
|
||||||
|
;+4 ०¨¬ § ª®¬¥áâ
|
||||||
|
;+5 ¤®¯. ०¨¬ § ª®¬¥áâ (bit0=1 ᯥª. ¤à¥á æ¨ï íªà )
|
||||||
|
;+6 X ¯®«®¦. ¢ ¯®«¥ £à 䨪¨ (¢ § ª®¬¥áâ å)
|
||||||
|
;+7 Y ¯®«®¦. ¢ ¯®«¥ £à 䨪¨ (¢ § ª®¬¥áâ å)
|
||||||
|
ScreenDescriptorTable EQU $
|
||||||
|
|
||||||
|
; 80x32. ⥪á⮢®¥, § ª®¬¥áâ® 16x8, #0B - ®¬¥à § ª®£¥.
|
||||||
|
TAB_80x32 DB 40,32,0,0,%0001'1011,0,0,0 ;1
|
||||||
|
|
||||||
|
; 40x32. ⥪á⮢®¥, § ª®¬¥áâ® 8x8, #0B - ®¬¥à § ª®£¥.
|
||||||
|
TAB_40x32 DB 40,32,0,0,%0011'1011,0,0,0 ;2
|
||||||
|
|
||||||
|
; 640x256. £à ä¨ç¥áª®¥, 0-© íªà
|
||||||
|
TAB_640x256_0 DB 40,32,0,0,%0000'0000,0,0,0 ;3
|
||||||
|
|
||||||
|
; 320x256. £à ä¨ç¥áª®¥, 0-© íªà
|
||||||
|
TAB_320x256_0 DB 40,32,0,0,%0010'0000,0,0,0 ;4
|
||||||
|
|
||||||
|
; 640x256. £à ä¨ç¥áª®¥, 1-© íªà
|
||||||
|
TAB_640x256_1 DB 40,32,0,0,%0100'0000,0,40,0 ;5
|
||||||
|
|
||||||
|
; 320x256. £à ä¨ç¥áª®¥, 1-© íªà
|
||||||
|
TAB_320x256_1 DB 40,32,0,0,%0110'0000,0,40,0 ;6
|
||||||
|
ScreenDescriptorTable.Size EQU ($ - ScreenDescriptorTable)/6
|
||||||
|
;.......................................................................
|
||||||
|
;
|
||||||
|
/*
|
||||||
|
PIC_320X256_1:
|
||||||
|
DB 40,32,0,0,32,0,8,0
|
||||||
|
DB 0, 0,0,0, 0,0,0,0
|
||||||
|
*/
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
; ‘®åà ¨âì íªà ⥪áâ. ०¨¬ .
|
||||||
|
; „«ï ¡ãä¥à íªà ¨á¯. 2-ï ¡ ª à áè¨à¥¨ï „Ž‘.
|
||||||
|
SAVETXT: PUSH AF
|
||||||
|
LD A,(VMODE)
|
||||||
|
CP %1000'0000
|
||||||
|
JR NC,.NOSAVET
|
||||||
|
SUB #02
|
||||||
|
JR C,.NOSAVET
|
||||||
|
;
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
;
|
||||||
|
PUSH AF
|
||||||
|
LD C,BIOS.LP_GET_PLACE
|
||||||
|
RST ToBIOS
|
||||||
|
LD (BACKTXT.CURS),DE
|
||||||
|
POP AF
|
||||||
|
LD IX,#C000
|
||||||
|
LD HL,#2050
|
||||||
|
OR A
|
||||||
|
JR NZ,.SVTEXT1
|
||||||
|
LD L,#28
|
||||||
|
.SVTEXT1: LD (BACKTXT.WinMax),HL
|
||||||
|
LD DE,#0000
|
||||||
|
LD A,(BANKTBL+TXTPAGE)
|
||||||
|
LD B,A
|
||||||
|
|
||||||
|
LD C,BIOS.WIN_COPY
|
||||||
|
;[x] 29/9/23
|
||||||
|
LD A,R
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
|
DI
|
||||||
|
RST ToBIOS
|
||||||
|
;[x] 29/9/23
|
||||||
|
POP AF
|
||||||
|
JP PO,.skip_EI
|
||||||
|
EI
|
||||||
|
.skip_EI: ;
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
POP BC
|
||||||
|
.NOSAVET: POP AF
|
||||||
|
RET
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
BACKTXT: PUSH AF
|
||||||
|
.VMODE+1: LD A,#00
|
||||||
|
;BIT 7,A
|
||||||
|
CP %1000'0000
|
||||||
|
JR C,.NOBACKT
|
||||||
|
;
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
LD IX,#C000
|
||||||
|
.WinMax+1: LD HL,#2050
|
||||||
|
LD DE,#0000
|
||||||
|
LD A,(BANKTBL+TXTPAGE)
|
||||||
|
LD B,A
|
||||||
|
LD C,BIOS.WIN_RESTORE
|
||||||
|
;[x] 29/9/23
|
||||||
|
LD A,R
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
|
DI
|
||||||
|
RST ToBIOS
|
||||||
|
;[x] 29/9/23
|
||||||
|
POP AF
|
||||||
|
JP PO,.no_ei
|
||||||
|
EI
|
||||||
|
.no_ei: ;
|
||||||
|
.CURS+1: LD DE,#0000
|
||||||
|
CALL LOCATE
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
POP BC
|
||||||
|
.NOBACKT: POP AF
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
96
DSS/API/SetWin.asm
Normal file
96
DSS/API/SetWin.asm
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #38. <20>®¤ª«î票¥ áâà ¨æë ¯ ¬ïâ¨.
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ¨¤¥â¨ä. ¡«®ª ¯ ¬ïâ¨
|
||||||
|
; B - ®¬¥à áâà ¨æë ¢ ¡«®ª¥ (0,1,2,..)
|
||||||
|
; H - ¡¨âë 6 ¨ 7 § ¤ îâ ®¬¥à ®ª , ¢ ª®â®à®¥ ¡ã¤¥â ¯®¤ª«. áâà ¨æ
|
||||||
|
; ¢ë室: A - ®¬¥à áâà ¨æë, ¥á«¨ CF=0
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
; if B = 0FFh, then logical page number got from DE
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
SETWIN: LD C,A
|
||||||
|
LD A,H
|
||||||
|
AND %1100'0000
|
||||||
|
JR NZ,.no_error
|
||||||
|
OR %0100'0000
|
||||||
|
.no_error: RRCA
|
||||||
|
OR %100'0010
|
||||||
|
LD H,A ;SLOT number
|
||||||
|
LD A,C
|
||||||
|
.ALL: LD C,BIOS.GetMemPage
|
||||||
|
EX DE,HL
|
||||||
|
RST ToBIOS
|
||||||
|
EX DE,HL
|
||||||
|
RET C
|
||||||
|
LD C,H ;SLOT number
|
||||||
|
IN B,(C)
|
||||||
|
OUT (C),A
|
||||||
|
LD A,B
|
||||||
|
RET
|
||||||
|
; SETWIN: BIT 7,H ; if #8000 or high?
|
||||||
|
; JR Z,SETWIN1 ; no, go to open in SLOT1
|
||||||
|
; BIT 6,H ; if #C000 or high?
|
||||||
|
; JR Z,SETWIN2 ; no, go to open in SLOT2
|
||||||
|
; JR SETWIN3 ; yes, go to open in SLOT3
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #39. <20>®¤ª«î票¥ áâà ¨æë ¯ ¬ï⨠¢ ¯¥à¢®¥ ®ª®.
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ¨¤¥â¨ä. ¡«®ª ¯ ¬ïâ¨
|
||||||
|
; B - ®¬¥à áâà ¨æë ¢ ¡«®ª¥ (0,1,2,..)
|
||||||
|
; ¢ë室: A - ®¬¥à áâà ¨æë, ¥á«¨ CF=0
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
SETWIN1: LD H,SLOT1
|
||||||
|
JR SETWIN.ALL
|
||||||
|
|
||||||
|
; SETWIN1: LD C,BIOS.GetMemPage
|
||||||
|
; EX DE,HL
|
||||||
|
; RST ToBIOS
|
||||||
|
; EX DE,HL
|
||||||
|
; RET C
|
||||||
|
; LD C,SLOT1
|
||||||
|
; IN B,(C)
|
||||||
|
; OUT (C),A
|
||||||
|
; LD A,B
|
||||||
|
; RET
|
||||||
|
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #3A. <20>®¤ª«î票¥ áâà ¨æë ¯ ¬ï⨠¢® ¢â®à®¥ ®ª®.
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ¨¤¥â¨ä. ¡«®ª ¯ ¬ïâ¨
|
||||||
|
; B - ®¬¥à áâà ¨æë ¢ ¡«®ª¥ (0,1,2,..)
|
||||||
|
; ¢ë室: A - ®¬¥à áâà ¨æë, ¥á«¨ CF=0
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
SETWIN2: LD H,SLOT2
|
||||||
|
JR SETWIN.ALL
|
||||||
|
; SETWIN2 LD C,BIOS.GetMemPage
|
||||||
|
; EX DE,HL
|
||||||
|
; RST ToBIOS
|
||||||
|
; EX DE,HL
|
||||||
|
; RET C
|
||||||
|
; LD C,SLOT2
|
||||||
|
; IN B,(C)
|
||||||
|
; OUT (C),A
|
||||||
|
; LD A,B
|
||||||
|
; RET
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #3B. <20>®¤ª«î票¥ áâà ¨æë ¯ ¬ï⨠¢ âà¥âì¥ ®ª®.
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ¨¤¥â¨ä. ¡«®ª ¯ ¬ïâ¨
|
||||||
|
; B - ®¬¥à áâà ¨æë ¢ ¡«®ª¥ (0,1,2,..)
|
||||||
|
; ¢ë室: A - ®¬¥à áâà ¨æë, ¥á«¨ CF=0
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
//////////////////////////////////////////////////////////////////////
|
||||||
|
SETWIN3: LD H,SLOT3
|
||||||
|
JR SETWIN.ALL
|
||||||
|
; SETWIN3: LD C,BIOS.GetMemPage
|
||||||
|
; EX DE,HL
|
||||||
|
; RST ToBIOS
|
||||||
|
; EX DE,HL
|
||||||
|
; RET C
|
||||||
|
; LD C,SLOT3
|
||||||
|
; IN B,(C)
|
||||||
|
; OUT (C),A
|
||||||
|
; LD A,B
|
||||||
|
; RET
|
||||||
200
DSS/API/Time.asm
Normal file
200
DSS/API/Time.asm
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #21. ’¥ªãé ï ¤ â ¨ ¢à¥¬ï.
|
||||||
|
;
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: D - ¤¥ì
|
||||||
|
; E - ¬¥áïæ
|
||||||
|
; IX - £®¤
|
||||||
|
; H - ç á
|
||||||
|
; L - ¬¨ãâë
|
||||||
|
; B - ᥪã¤ë
|
||||||
|
; C - ¤¥ì ¥¤¥«¨
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
SYSTIME:
|
||||||
|
LD C,BIOS.CMOS_TEST
|
||||||
|
RST ToBIOS
|
||||||
|
JP C,.NOCMOS
|
||||||
|
;
|
||||||
|
LD D,CMOS.Register.date
|
||||||
|
CALL RCMOS
|
||||||
|
PUSH AF
|
||||||
|
LD D,CMOS.Register.month
|
||||||
|
CALL RCMOS
|
||||||
|
POP DE
|
||||||
|
LD E,A
|
||||||
|
PUSH DE
|
||||||
|
LD D,CMOS.Register.hours
|
||||||
|
CALL RCMOS
|
||||||
|
PUSH AF
|
||||||
|
LD D,CMOS.Register.minutes
|
||||||
|
CALL RCMOS
|
||||||
|
POP DE
|
||||||
|
LD E,A
|
||||||
|
PUSH DE
|
||||||
|
LD D,CMOS.Register.seconds
|
||||||
|
CALL RCMOS
|
||||||
|
PUSH AF
|
||||||
|
LD D,CMOS.Register.dayOfWeek
|
||||||
|
LD C,BIOS.CMOS_RD
|
||||||
|
RST ToBIOS
|
||||||
|
POP DE
|
||||||
|
LD E,A
|
||||||
|
PUSH DE
|
||||||
|
LD D,CMOS.Register.year
|
||||||
|
CALL RCMOS ;READ AND CONVERT TO DECIMAL
|
||||||
|
PUSH AF
|
||||||
|
LD D,CMOS.Register.century
|
||||||
|
LD C,BIOS.CMOS_RD
|
||||||
|
RST ToBIOS
|
||||||
|
LD XH,A
|
||||||
|
|
||||||
|
POP AF
|
||||||
|
CP 80 ;R001, TEST DECIMAL FIX
|
||||||
|
PUSH AF
|
||||||
|
JR C,.XXIAGE
|
||||||
|
LD A,#19
|
||||||
|
CP XH
|
||||||
|
JR Z,.GOODAGE
|
||||||
|
JR .BADAGE
|
||||||
|
.XXIAGE:
|
||||||
|
LD A,#20
|
||||||
|
CP XH
|
||||||
|
JR Z,.GOODAGE
|
||||||
|
.BADAGE:
|
||||||
|
PUSH AF
|
||||||
|
LD D,CMOS.Register.century
|
||||||
|
LD C,BIOS.CMOS_WR
|
||||||
|
RST ToBIOS
|
||||||
|
POP AF
|
||||||
|
LD XH,A
|
||||||
|
.GOODAGE:
|
||||||
|
POP AF
|
||||||
|
LD XL,A
|
||||||
|
LD A,XH
|
||||||
|
CALL BCD2HEX
|
||||||
|
LD L,A
|
||||||
|
LD H,0
|
||||||
|
LD C,L
|
||||||
|
LD B,H
|
||||||
|
LD XH,B
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,BC
|
||||||
|
ADD HL,HL ;*10
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,BC
|
||||||
|
ADD HL,HL ;*10(100)
|
||||||
|
EX DE,HL
|
||||||
|
ADD IX,DE
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
.NOCMOS:
|
||||||
|
.NC_DAY+1:
|
||||||
|
LD DE,DAY*256+MONTH ;DAY/MONTH
|
||||||
|
.NC_HOUR+1:
|
||||||
|
LD HL,0 ;HOUR/MINUTE
|
||||||
|
.NC_SEC+1:
|
||||||
|
LD BC,1 ;SECOND/WEEKDAY
|
||||||
|
.NC_YEAR+2:
|
||||||
|
LD IX,YEAR ;YEAR
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #22. “áâ ®¢¨âì ⥪ãéãî ¤ âã ¨ ¢à¥¬ï.
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - ¤¥ì
|
||||||
|
; E - ¬¥áïæ
|
||||||
|
; IX - £®¤
|
||||||
|
; H - ç á
|
||||||
|
; L - ¬¨ãâë
|
||||||
|
; B - ᥪã¤ë
|
||||||
|
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
SETTIME:
|
||||||
|
PUSH IX
|
||||||
|
PUSH BC
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
;
|
||||||
|
; [x] 25/01/2024
|
||||||
|
CALL CalcDayOfWeek
|
||||||
|
PUSH HL
|
||||||
|
;
|
||||||
|
LD C,BIOS.CMOS_TEST
|
||||||
|
RST ToBIOS
|
||||||
|
JR C,.NOCMOS2
|
||||||
|
;
|
||||||
|
; [x] 25/01/2024
|
||||||
|
POP AF
|
||||||
|
LD D,CMOS.Register.dayOfWeek
|
||||||
|
LD C,BIOS.CMOS_WR
|
||||||
|
RST ToBIOS
|
||||||
|
;
|
||||||
|
POP AF
|
||||||
|
PUSH AF
|
||||||
|
LD D,CMOS.Register.date
|
||||||
|
CALL WCMOS
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
LD D,CMOS.Register.month
|
||||||
|
CALL WCMOS
|
||||||
|
POP AF
|
||||||
|
PUSH AF
|
||||||
|
LD D,CMOS.Register.hours
|
||||||
|
CALL WCMOS
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
LD D,CMOS.Register.minutes
|
||||||
|
CALL WCMOS
|
||||||
|
POP AF
|
||||||
|
;PUSH AF ; [ ] ¡ £ á ãáâ ®¢ª®© ¤ï ¥¤¥«¨ ¨§ ॣ¨áâà C. <20> 襫 Hard
|
||||||
|
LD D,CMOS.Register.seconds
|
||||||
|
CALL WCMOS
|
||||||
|
; [x] ¡ £ á ãáâ ®¢ª®© ¤ï ¥¤¥«¨ ¨§ ॣ¨áâà C. <20> 襫 Hard
|
||||||
|
;POP BC
|
||||||
|
;LD A,C
|
||||||
|
;LD D,CMOS.Register.dayOfWeek
|
||||||
|
;LD C,BIOS.CMOS_WR
|
||||||
|
;RST ToBIOS
|
||||||
|
;
|
||||||
|
POP HL
|
||||||
|
XOR A
|
||||||
|
LD DE,100
|
||||||
|
.YR: INC A
|
||||||
|
SBC HL,DE
|
||||||
|
JR NC,.YR
|
||||||
|
ADD HL,DE
|
||||||
|
DEC A
|
||||||
|
PUSH HL
|
||||||
|
LD D,CMOS.Register.century
|
||||||
|
CALL WCMOS
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
LD D,CMOS.Register.year
|
||||||
|
CALL WCMOS
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
; !FIXIT ®¢ë© ¡¨®á ¢ëáâ ¢«ï¥â ¢à¥¬ï, ¥á«¨ á ¨¬ çâ®-â® ¥ â ª.
|
||||||
|
.NOCMOS2:
|
||||||
|
POP AF
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
POP BC
|
||||||
|
POP IX
|
||||||
|
LD C,A
|
||||||
|
;
|
||||||
|
LD (SYSTIME.NC_DAY),DE ;DAY/MONTH
|
||||||
|
LD (SYSTIME.NC_HOUR),HL ;HOUR/MINUTE
|
||||||
|
LD (SYSTIME.NC_SEC),BC ;SECOND/WEEKDAY
|
||||||
|
LD (SYSTIME.NC_YEAR),IX ;YEAR
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
19
DSS/API/Version.asm
Normal file
19
DSS/API/Version.asm
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #00. ‚¥àá¨ï „Ž‘.
|
||||||
|
; ‚®§¢à é ¥â ®¬¥à ¢¥àᨨ ¤¨áª®¢®© á¨á⥬ë.
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: DE = ®¬¥à ¢¥àᨨ/¬®¤¨ä¨ª 樨
|
||||||
|
; BC = ®¬¥à ¡¨«¤ (0..999)
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
VERSION:
|
||||||
|
;XOR A
|
||||||
|
;LD H,A ;!TODO ¯¨å âì áî¤ OSINFO
|
||||||
|
;LD L,A
|
||||||
|
LD HL,0
|
||||||
|
LD DE,VERS*256+MODF
|
||||||
|
LD BC,BUILD
|
||||||
|
RET
|
||||||
|
|
||||||
|
//;R10
|
||||||
|
//OSINFO:
|
||||||
|
//OSINFO_SIG: DB "OSINFOSTRUCTURE",0
|
||||||
23
DSS/API/WinCopy.asm
Normal file
23
DSS/API/WinCopy.asm
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #59. ‘®åà ¨âì ®ª® íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - áâப
|
||||||
|
; E - ª®«®ª «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||||
|
; H - ¢ëá®â ®ª
|
||||||
|
; L - è¨à¨ ®ª
|
||||||
|
; B - áâà ¨æ ¡ãä¥à , ¥á«¨ IX >= #C000
|
||||||
|
; IX - ¤à¥á ¡ãä¥à
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
WINCOPY: AND A
|
||||||
|
LD A,R ;R102
|
||||||
|
PUSH AF ;R102
|
||||||
|
XOR A
|
||||||
|
LD C,BIOS.WIN_COPY
|
||||||
|
DI ;R102
|
||||||
|
RST ToBIOS
|
||||||
|
POP AF ;R102
|
||||||
|
RET PO ;R102
|
||||||
|
EI ;R102
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
23
DSS/API/WinRest.asm
Normal file
23
DSS/API/WinRest.asm
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #5A. ‚®ááâ ®¢¨âì ®ª® íªà .
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - áâப
|
||||||
|
; E - ª®«®ª «¥¢®£® ¢¥à奣® 㣫 ®ª
|
||||||
|
; H - ¢ëá®â ®ª
|
||||||
|
; L - è¨à¨ ®ª
|
||||||
|
; B - áâà ¨æ ¡ãä¥à , ¥á«¨ IX >= #C000
|
||||||
|
; IX - ¤à¥á ¡ãä¥à
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
WINREST: AND A
|
||||||
|
LD A,R ;R102
|
||||||
|
PUSH AF ;R102
|
||||||
|
XOR A
|
||||||
|
DI ;R102
|
||||||
|
LD C,BIOS.WIN_RESTORE
|
||||||
|
RST ToBIOS
|
||||||
|
POP AF ;R102
|
||||||
|
RET PO ;R102
|
||||||
|
EI ;R102
|
||||||
|
RET
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
25
DSS/API/WrChar.asm
Normal file
25
DSS/API/WrChar.asm
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #58. ‚뢥á⨠ᨬ¢®« íªà .
|
||||||
|
; “¯à ¢«ïî騥 ᨬ¢®«ë ¢ë¢®¤ïâáï ª ª ®¡ëçë¥ á¨¬¢®«ë.
|
||||||
|
;
|
||||||
|
; ¢å®¤: D - áâப
|
||||||
|
; E - ª®«®ª
|
||||||
|
; A - ᨬ¢®«
|
||||||
|
; B - âਡãâ
|
||||||
|
; ¢ë室: ¥â
|
||||||
|
;!FIXIT slow ª ª ¡¥§ WIN_GET_SYM âãâ ®¡®©â¨áì?
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
|
WRCHAR: ;LD C,A
|
||||||
|
;PUSH BC
|
||||||
|
;PUSH DE
|
||||||
|
;XOR A
|
||||||
|
;LD C,BIOS.WIN_GET_SYM
|
||||||
|
;RST ToBIOS
|
||||||
|
;POP DE
|
||||||
|
;POP HL
|
||||||
|
LD L,A
|
||||||
|
LD H,B
|
||||||
|
XOR A
|
||||||
|
LD BC,BIOS.WIN_PUT_SYM.NoChangeZG
|
||||||
|
JP ToBIOS
|
||||||
|
;///////////////////////////////////////////////////////////////////////
|
||||||
197
DSS/API/Write.asm
Normal file
197
DSS/API/Write.asm
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
WRITE.ERR3:
|
||||||
|
POP HL
|
||||||
|
WRITE.ERR2:
|
||||||
|
POP HL
|
||||||
|
WRITE.ERR1:
|
||||||
|
POP BC
|
||||||
|
;SCF
|
||||||
|
RET
|
||||||
|
WRITE.RD_ONLY:
|
||||||
|
POP DE
|
||||||
|
LD A,DSS_Error.sys.READONLY
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
; HL - ADDRESS
|
||||||
|
; DE - SIZE
|
||||||
|
; A - FM
|
||||||
|
WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§¡ëâ®çë¥ ¢ë§®¢ë WRITE_FAT_TABLE
|
||||||
|
CALL .Start
|
||||||
|
PUSH AF
|
||||||
|
LD A,(CORE_BUFFERS.FS_Buffer.CacheUpdated)
|
||||||
|
OR A
|
||||||
|
CALL NZ,WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.Start: LD (.R_POINT),HL
|
||||||
|
LD (.S_POINT),HL
|
||||||
|
PUSH DE
|
||||||
|
CALL SET_FM
|
||||||
|
JR C,.ERR1
|
||||||
|
LD A,(IY+_sFM.ACCESS_MODE)
|
||||||
|
AND Dss.Open.R
|
||||||
|
JR NZ,.RD_ONLY
|
||||||
|
SET 7,(IY + _sFM.ACCESS_MODE)
|
||||||
|
SET 5,(IY + _sFM.FS_REC.ATTRIBUT)
|
||||||
|
LD A,(IY + _sFM.DRIVE)
|
||||||
|
CALL OPENDSK
|
||||||
|
JR C,.ERR1
|
||||||
|
; [ ] 26/06/2024
|
||||||
|
CALL CHECK_64kb_CLUSTER
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
CALL GET_OFFSET_IN_SECTORS
|
||||||
|
;
|
||||||
|
JP NZ,.WOV1
|
||||||
|
;
|
||||||
|
.WOV4: POP BC
|
||||||
|
PUSH BC
|
||||||
|
SRL B
|
||||||
|
JR Z,.WOV2
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
PUSH BC
|
||||||
|
.R_POINT+2: LD IX,0
|
||||||
|
CALL BLOCK_WRITE
|
||||||
|
POP BC
|
||||||
|
JR C,.ERR3
|
||||||
|
LD C,B
|
||||||
|
LD HL,(.R_POINT)
|
||||||
|
LD DE,#0200 ;!HARDCODE sector size
|
||||||
|
.WOV5: ADD HL,DE
|
||||||
|
DJNZ .WOV5
|
||||||
|
; B=0
|
||||||
|
LD (.R_POINT),HL ;!FIXIT íâ® § 票¥ 㦥 à ácç¨âë¢ ¥âáï ¯¥à¥¤ ¢ë室®¬ ¢ BLOCK_WRITE?
|
||||||
|
;LD B,0
|
||||||
|
POP HL
|
||||||
|
ADD HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
POP HL
|
||||||
|
LD C,B
|
||||||
|
ADC HL,BC
|
||||||
|
.WOV2: POP BC
|
||||||
|
LD A,B
|
||||||
|
AND #01
|
||||||
|
LD B,A
|
||||||
|
OR C
|
||||||
|
JR Z,.WOV6
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
PUSH BC
|
||||||
|
LD IX,CORE_BUFFERS.BUFFER+#C000
|
||||||
|
LD B,1
|
||||||
|
IN A,(SLOT3)
|
||||||
|
PUSH AF
|
||||||
|
IN A,(SLOT0)
|
||||||
|
OUT (SLOT3),A
|
||||||
|
CALL BLOCK_READ
|
||||||
|
POP BC
|
||||||
|
LD C,SLOT3
|
||||||
|
OUT (C),B
|
||||||
|
LD DE,CORE_BUFFERS.BUFFER
|
||||||
|
LD HL,(.R_POINT)
|
||||||
|
POP BC
|
||||||
|
JP C,.ERR2
|
||||||
|
LDIR
|
||||||
|
LD (.R_POINT),HL
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
LD IX,CORE_BUFFERS.BUFFER+#C000
|
||||||
|
LD B,1
|
||||||
|
IN A,(SLOT3)
|
||||||
|
PUSH AF
|
||||||
|
IN A,(SLOT0)
|
||||||
|
OUT (SLOT3),A
|
||||||
|
CALL BLOCK_WRITE
|
||||||
|
POP BC
|
||||||
|
LD C,SLOT3
|
||||||
|
OUT (C),B
|
||||||
|
RET C
|
||||||
|
.WOV6: LD HL,(.R_POINT)
|
||||||
|
.S_POINT+1: LD DE,0
|
||||||
|
; CF=0
|
||||||
|
;AND A
|
||||||
|
SBC HL,DE
|
||||||
|
PUSH HL
|
||||||
|
EX DE,HL
|
||||||
|
LD XH,D
|
||||||
|
LD XL,E
|
||||||
|
LD HL,0
|
||||||
|
CALL MOVE_FP.F_current
|
||||||
|
CALL MOVE_CP
|
||||||
|
POP DE
|
||||||
|
RET NC ; …᫨ à §¬¥à ä ©« ¤¨áª¥ <20>… áâ « ¡®«ìè¥, 祬 ¡ë«
|
||||||
|
; …᫨ à §¬¥à ä ©« ¤¨áª¥ áâ « ¡®«ìè¥, 祬 ¡ë«
|
||||||
|
LD L,(IY + _sFM.F_POSITION+0)
|
||||||
|
LD H,(IY + _sFM.F_POSITION+1)
|
||||||
|
LD C,(IY + _sFM.F_POSITION+2)
|
||||||
|
LD B,(IY + _sFM.F_POSITION+3)
|
||||||
|
LD (IY + _sFM.FS_REC.F_SIZE+0),L
|
||||||
|
LD (IY + _sFM.FS_REC.F_SIZE+1),H
|
||||||
|
LD (IY + _sFM.FS_REC.F_SIZE+2),C
|
||||||
|
LD (IY + _sFM.FS_REC.F_SIZE+3),B
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.WOV1: PUSH BC
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
LD IX,CORE_BUFFERS.BUFFER+#C000
|
||||||
|
LD B,1
|
||||||
|
IN A,(SLOT3)
|
||||||
|
PUSH AF
|
||||||
|
IN A,(SLOT0)
|
||||||
|
OUT (SLOT3),A
|
||||||
|
CALL BLOCK_READ
|
||||||
|
POP BC
|
||||||
|
LD C,SLOT3
|
||||||
|
OUT (C),B
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
EXX
|
||||||
|
POP DE
|
||||||
|
JP C,.ERR1
|
||||||
|
LD HL,512 ;!HARDCODE ;!FIXIT ; [ ] sector size
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
POP HL
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
JR NC,.WOV3
|
||||||
|
ADD HL,BC
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
LD HL,0
|
||||||
|
.WOV3: PUSH HL
|
||||||
|
LD HL,CORE_BUFFERS.BUFFER
|
||||||
|
ADD HL,DE
|
||||||
|
LD DE,(.R_POINT)
|
||||||
|
EX DE,HL
|
||||||
|
LDIR
|
||||||
|
LD (.R_POINT),HL
|
||||||
|
EXX
|
||||||
|
PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
LD IX,CORE_BUFFERS.BUFFER+#C000
|
||||||
|
LD B,1
|
||||||
|
IN A,(SLOT3)
|
||||||
|
PUSH AF
|
||||||
|
IN A,(SLOT0)
|
||||||
|
OUT (SLOT3),A
|
||||||
|
CALL BLOCK_WRITE
|
||||||
|
POP BC
|
||||||
|
LD C,SLOT3
|
||||||
|
OUT (C),B
|
||||||
|
POP HL
|
||||||
|
JP C,.ERR2
|
||||||
|
LD BC,1
|
||||||
|
ADD HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
POP HL
|
||||||
|
LD C,B
|
||||||
|
ADC HL,BC
|
||||||
|
JP .WOV4
|
||||||
|
;
|
||||||
73
DSS/API/bootDsk.asm
Normal file
73
DSS/API/bootDsk.asm
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #09. <20>®¬¥à á¨á⥬®£® ¤¨áª .
|
||||||
|
; ‚®§¢à é ¥â ®¬¥à ¤¨áª , c ª®â®à®£® § £à㦥 á¨á⥬ .
|
||||||
|
;
|
||||||
|
; <20>ਠB = 0 (GET)
|
||||||
|
; ¢ë室: A - ®¬¥à á¨á⥬®£® ¤¨áª (0=A,1=B,..)
|
||||||
|
; <20>ਠB = 1 (SET - ¨á¯. boot-§ £àã§ç¨ª á¨á⥬ë, ¯®á«¥ 祣® äãªæ¨ï ¥¤®áâ㯠)
|
||||||
|
; ¢å®¤: H - ®¬¥à ãáâனá⢠, L - ®¬¥à à §¤¥« ãáâனá⢥
|
||||||
|
; ¢ë室:
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
BOOTDSK:
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JR Z,.GET
|
||||||
|
DEC B
|
||||||
|
.chg: JR Z,.SET ;R13 ¬¥ï¥âáï JR ‘,SETBOOT ¯®á«¥ ¯¥à¢®£® 㤠箣® ¨á¯®«¥¨ï SETBOOT
|
||||||
|
LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
.GET: ;GET BOOT DISK
|
||||||
|
.NUM+1: LD A,0 ;R09
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
; ‘®®¡é¨âì DSS á ª ª®£® ¤¨áª § £à㦠¥âáï á¨á⥬ .
|
||||||
|
; ˆá¯. § £àã§ç¨ª á¨áâ¥¬ë ¤«ï ¨¨æ. ï祩ª¨ "boot_disk".
|
||||||
|
|
||||||
|
.SET: LD B,H ;SET BOOT DISK
|
||||||
|
LD C,0
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
LD (.part),HL
|
||||||
|
;
|
||||||
|
.loop: PUSH BC
|
||||||
|
LD A,C
|
||||||
|
LD DE,Dss.DRV.GenIOCTL.Enter
|
||||||
|
LD BC,Dss.DRV.GenIOCTL.GetParams
|
||||||
|
RST ToDSS.DRV
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
LD A,C ; ®¬¥à ¯ àâ¨æ¨¨ ¢ MBR ¤¨áª
|
||||||
|
;
|
||||||
|
POP BC
|
||||||
|
JR C,.NoSupport
|
||||||
|
EX AF,AF' ;PHISICAL DRIVE NUMBER
|
||||||
|
CP B
|
||||||
|
JR NZ,.NoSupport
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
EX AF,AF' ; ®¬¥à ¯ àâ¨æ¨¨ ¢ MBR ¤¨áª
|
||||||
|
.part+1: LD HL,0
|
||||||
|
CP L
|
||||||
|
JR NZ,.NoSupport
|
||||||
|
;
|
||||||
|
;R13
|
||||||
|
LD A,#38 ; opcode for JR C,addr
|
||||||
|
LD (BOOTDSK.chg),A
|
||||||
|
;R13
|
||||||
|
LD A,C
|
||||||
|
LD (BOOTDSK.NUM),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
.NoSupport:
|
||||||
|
INC C
|
||||||
|
LD A,(LDRIVE)
|
||||||
|
CP C
|
||||||
|
JR NZ,.loop
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
; <20>®¬¥à ¯®á«¥¤¥£® ¤¨áª ¢ á¨á⥬¥
|
||||||
|
LDRIVE: DB DSS_MAX_DRIVES_AMOUNT
|
||||||
|
IF COMPILE_UNUSED_CODE
|
||||||
|
TDRIVE: DB #00
|
||||||
|
TCLUST: DW #0000
|
||||||
|
TCOUNT: DW #0000
|
||||||
|
ENDIF
|
||||||
|
;
|
||||||
22
DSS/API/curDisk.asm
Normal file
22
DSS/API/curDisk.asm
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
; ”ãªæ¨ï #02. <20>®¬¥à ⥪ã饣® ¤¨áª .
|
||||||
|
;
|
||||||
|
; ¢å®¤: ¥â
|
||||||
|
; ¢ë室: A - ®¬¥à ¤¨áª (0=A,1=B,..)
|
||||||
|
; C - ®¬¥à ¯®á«¥¤¥£® ¤¨áª ¢ á¨á⥬¥
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
CURDISK_FN:
|
||||||
|
LD A,(LDRIVE)
|
||||||
|
LD C,A
|
||||||
|
LD A,(CORE_BUFFERS.CurrentPath)
|
||||||
|
SUB 'A'
|
||||||
|
RET NC
|
||||||
|
LD A,DSS_Error.sys.INVALID_DRIVE
|
||||||
|
RET
|
||||||
|
CURDISK:
|
||||||
|
LD A,(LDRIVE)
|
||||||
|
LD C,A
|
||||||
|
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
259
DSS/API/diskINF.asm
Normal file
259
DSS/API/diskINF.asm
Normal file
@ -0,0 +1,259 @@
|
|||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
; [ ] ®¢ ï ¯®¤äãªæ¨ï á ¡¨â®¬ 7 ¢ ॣ. €
|
||||||
|
; ‚®§¢à é ¥â ¨ä®à¬ æ¨î ®¡ ®¡é¥¬ ¨ ᢮¡®¤®¬ ¯à®áâà á⢥ ¤¨áª®¢®£®
|
||||||
|
; ãáâனá⢠.
|
||||||
|
;
|
||||||
|
; ¢å®¤: A - ®¬¥à ¤¨áª (0=A,1=B .. 25=Z. #FF-⥪ã騩)
|
||||||
|
; <09>ਠA bit7 = 1:
|
||||||
|
; A and #7F - ®¬¥à ¤¨áª
|
||||||
|
; HL - ¡ãä¥à (256 ¡ ©â®¢) ¤«ï à áè¨à¥ëå ¤ ëå:
|
||||||
|
; B != 0 - áç¨â âì ᢮¡®¤®¥ ¬¥áâ®
|
||||||
|
; ;
|
||||||
|
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||||||
|
; ” ©«®¢ ï á¨á⥬
|
||||||
|
; ;
|
||||||
|
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||||||
|
; ‘¥à¨©ë© ®¬¥à ¤¨áª
|
||||||
|
; ;
|
||||||
|
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||||||
|
; Œ¥âª ¤¨áª
|
||||||
|
; ;
|
||||||
|
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||||||
|
; 䨧¨ç¥áª¨© ®¬¥à ¤¨áª , ®¬¥à à §¤¥«
|
||||||
|
; ;
|
||||||
|
; à §¬¥à ¯®«ï - 1 ¡ ©â
|
||||||
|
; § १¥à¢¨à®¢ ®
|
||||||
|
; ;
|
||||||
|
; ¢ë室: CF=0:
|
||||||
|
; A - à §¬¥à ª« áâ¥à ¢ ᥪâ®à å
|
||||||
|
; HL':HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
|
||||||
|
; DE':DE - ᢮¡®¤ëå ª« áâ¥à®¢
|
||||||
|
; BC - à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||||||
|
; CF=1:
|
||||||
|
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; Œ¥âª ¤¨áª ¯à®¢¥àï¥âáï á ç « ¢ ª®à¥¢®¬ ª â «®£¥ ¨ ¥á«¨ â ¬ ;
|
||||||
|
; ¥â, â® ¡¥àñâáï ¬¥âª ¨§ BPB ;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;/////////////////////////////////////////////////////////////////////
|
||||||
|
DISKINF: LD C,B
|
||||||
|
LD B,1
|
||||||
|
;
|
||||||
|
CP #80
|
||||||
|
JP C,.CustomDisk
|
||||||
|
CP #FF
|
||||||
|
JR Z,.CurrentDisk
|
||||||
|
; more info
|
||||||
|
LD B,C
|
||||||
|
AND %0111'1111
|
||||||
|
PUSH HL
|
||||||
|
PUSH AF
|
||||||
|
CALL .CustomDisk
|
||||||
|
POP IX
|
||||||
|
JR C,.error
|
||||||
|
;
|
||||||
|
EX (SP),HL
|
||||||
|
PUSH DE
|
||||||
|
PUSH AF
|
||||||
|
PUSH BC
|
||||||
|
;;;;
|
||||||
|
;
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,FAT_STRING ;!HARDCODE FAT FS
|
||||||
|
LD C,5 ;!HARDCODE _sBOOT_SECTOR_PARAMS.ID_FAT.length
|
||||||
|
CALL .mCOPY_LOOP
|
||||||
|
; 12, 16 or 32
|
||||||
|
LD A,(CORE_BUFFERS.FS_Buffer.FAT_TYPE)
|
||||||
|
CP FAT_TYPE.x16
|
||||||
|
JR C,.next_prm
|
||||||
|
;
|
||||||
|
PUSH DE
|
||||||
|
DEC DE
|
||||||
|
LD A,'6'
|
||||||
|
JR Z,.put_char
|
||||||
|
; fat 32
|
||||||
|
DEC DE
|
||||||
|
LD A,'3'
|
||||||
|
.put_char: LD (DE),A
|
||||||
|
POP DE
|
||||||
|
;
|
||||||
|
.next_prm: LD HL,CORE_BUFFERS.FS_Buffer.BPB_SERIAL_NUMBER
|
||||||
|
LD C,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER
|
||||||
|
CALL .mCOPY_LOOP
|
||||||
|
;
|
||||||
|
; fat32
|
||||||
|
EXX
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
;LD HL,CORE_BUFFERS.FS_Buffer.BPB_LABEL
|
||||||
|
PUSH IX
|
||||||
|
CALL GET_LABEL
|
||||||
|
LD C,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL
|
||||||
|
CALL .mCOPY_LOOP
|
||||||
|
POP AF
|
||||||
|
PUSH DE
|
||||||
|
;LD A,XH
|
||||||
|
LD DE,Dss.DRV.GenIOCTL.Enter
|
||||||
|
LD BC,Dss.DRV.GenIOCTL.GetParams
|
||||||
|
RST ToDSS.DRV
|
||||||
|
POP DE
|
||||||
|
; fat32
|
||||||
|
EXX
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
EXX
|
||||||
|
JR C,.error_drv
|
||||||
|
LD A,2 ;!HARDCODE ¤«¨ ¯®«ï ü4 2 ¡ ©â : 䨧 ®¬¥à ¤¨áª , ®¬¥à à §¤¥« ¤¨áª
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
EX AF,AF'
|
||||||
|
LD (DE),A ;䨧 ®¬¥à ¤¨áª
|
||||||
|
INC DE
|
||||||
|
LD A,C
|
||||||
|
LD (DE),A ;®¬¥à à §¤¥« ¤¨áª
|
||||||
|
INC DE
|
||||||
|
;
|
||||||
|
.error_drv: EX AF,AF'
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
;;;;
|
||||||
|
POP BC
|
||||||
|
POP AF
|
||||||
|
POP DE
|
||||||
|
EX AF,AF'
|
||||||
|
JR C,.error
|
||||||
|
EX AF,AF'
|
||||||
|
.error: POP HL
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.CurrentDisk: LD A,(CORE_BUFFERS.CurrentPath)
|
||||||
|
SUB 'A'
|
||||||
|
LD HL,CORE_BUFFERS.FS_Buffer.DRIVE
|
||||||
|
CP (HL)
|
||||||
|
JR Z,.CheckFreeSpace
|
||||||
|
;
|
||||||
|
.CustomDisk: PUSH BC
|
||||||
|
CALL CHDISK ;R06
|
||||||
|
POP BC
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
.CheckFreeSpace:; ¥á«¨ GetFreeSpace ¥ ¢ë§ë¢ ¥âáï
|
||||||
|
XOR A
|
||||||
|
OR B
|
||||||
|
LD BC,(CORE_BUFFERS.FS_Buffer.FREE_CLUSTERS_COUNT_L)
|
||||||
|
EXX
|
||||||
|
LD BC,(CORE_BUFFERS.FS_Buffer.FREE_CLUSTERS_COUNT_H)
|
||||||
|
EXX
|
||||||
|
CALL NZ,GetFreeSpace
|
||||||
|
;
|
||||||
|
;.FRESP2:
|
||||||
|
; A = 0 if B != 0 before .GetFreeSpace
|
||||||
|
;
|
||||||
|
LD H,B
|
||||||
|
LD L,C
|
||||||
|
LD (CORE_BUFFERS.FS_Buffer.FREE_CLUSTERS_COUNT_L),HL
|
||||||
|
EX DE,HL
|
||||||
|
EXX
|
||||||
|
LD H,B
|
||||||
|
LD L,C
|
||||||
|
LD (CORE_BUFFERS.FS_Buffer.FREE_CLUSTERS_COUNT_H),HL
|
||||||
|
EX DE,HL
|
||||||
|
EXX
|
||||||
|
LD HL,(CORE_BUFFERS.FS_Buffer.MaxClusterLow)
|
||||||
|
DEC HL
|
||||||
|
; fat 32
|
||||||
|
EXX
|
||||||
|
LD HL,(CORE_BUFFERS.FS_Buffer.MaxClusterHigh)
|
||||||
|
JR NC,.skip_dec_hl
|
||||||
|
DEC HL
|
||||||
|
.skip_dec_hl: EXX
|
||||||
|
LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerSector)
|
||||||
|
LD A,(CORE_BUFFERS.FS_Buffer.SectorsPerCluster)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
; [ ] 22/11/23 ¯®¤äãªæ¨ï á ¤®¯.¨ä®©
|
||||||
|
.mCOPY_LOOP: LD B,0
|
||||||
|
EX DE,HL
|
||||||
|
LD (HL),C
|
||||||
|
EX DE,HL
|
||||||
|
INC DE
|
||||||
|
LDIR
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;
|
||||||
|
GetFreeSpace: LD A,1
|
||||||
|
LD (CORE_BUFFERS.FS_Buffer.UPD_FSINFO),A
|
||||||
|
LD HL,2 ; fat32 ®¬¥à ª« áâ¥à ®â ª®â®à®£® áç¨â âì
|
||||||
|
XOR A
|
||||||
|
; fat32
|
||||||
|
EXX
|
||||||
|
LD H,A
|
||||||
|
LD L,A
|
||||||
|
LD B,A
|
||||||
|
LD C,A
|
||||||
|
EXX
|
||||||
|
LD B,A
|
||||||
|
LD C,A
|
||||||
|
.loop_free_space:;!FIXIT
|
||||||
|
PUSH BC
|
||||||
|
EXX
|
||||||
|
PUSH BC
|
||||||
|
EXX
|
||||||
|
CALL READ_FROM_FAT
|
||||||
|
EXX
|
||||||
|
POP BC
|
||||||
|
EXX
|
||||||
|
POP BC
|
||||||
|
CP DSS_Error.sys.DISK_FULL
|
||||||
|
RET Z
|
||||||
|
; fat 32
|
||||||
|
EXX
|
||||||
|
LD A,E
|
||||||
|
OR D
|
||||||
|
EXX
|
||||||
|
OR E
|
||||||
|
OR D
|
||||||
|
JR NZ,.skip
|
||||||
|
;
|
||||||
|
INC BC
|
||||||
|
LD A,B
|
||||||
|
OR C
|
||||||
|
JR NZ,.skip
|
||||||
|
EXX
|
||||||
|
INC BC
|
||||||
|
EXX
|
||||||
|
;
|
||||||
|
.skip: INC HL
|
||||||
|
LD A,L
|
||||||
|
OR H
|
||||||
|
JR NZ,.loop_free_space
|
||||||
|
EXX
|
||||||
|
INC HL
|
||||||
|
EXX
|
||||||
|
JP .loop_free_space
|
||||||
|
;
|
||||||
|
FAT_STRING: DB 'FAT12'
|
||||||
|
;
|
||||||
|
; DE - ¡ãä¥à
|
||||||
|
GET_LABEL: PUSH DE
|
||||||
|
LD HL,.LABEL_MASK ; "\*.*" ¨¬ï ¬¥âª¨
|
||||||
|
LD A,FAT_ATTR.VOLUME_ID ; âਡãâ ¬¥âª¨ ⮬
|
||||||
|
LD B,high Dss.F_First.FATname
|
||||||
|
CALL F_FIRST
|
||||||
|
POP DE
|
||||||
|
.from_BPB: LD HL,CORE_BUFFERS.FS_Buffer.BPB_LABEL
|
||||||
|
RET C
|
||||||
|
; [ ] 07/03/2025 ª®áâë«ì ¤«ï âਡãâ 0. <20> áâ®ï« ‘ ¢¥«¨©))
|
||||||
|
LD HL,BUFFER_FIND.REC_Attr
|
||||||
|
ADD HL,DE
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
SCF
|
||||||
|
JR Z,.from_BPB
|
||||||
|
;
|
||||||
|
LD HL,BUFFER_FIND.REC_Name
|
||||||
|
ADD HL,DE
|
||||||
|
RET
|
||||||
|
.LABEL_MASK: DB '\*.*',0
|
||||||
@ -1,12 +1,50 @@
|
|||||||
;ˆ§¬¥¥¨ï ¯®á«¥ ¢¥àᨨ 1.70
|
!FIXIT
|
||||||
‚ ¦®¥:
|
[ ] D:\>copy dss\system.dos c:\system.dos (bp 812d, 8136)
|
||||||
|
Can't open source file
|
||||||
|
|
||||||
|
[ ] E:\BIN\MENU>c:\dss
|
||||||
|
çâ®-â® ¯à® § ¯®«¥®áâì ¤¨à¥ªâ®à¨¨
|
||||||
|
[ ] C:\????? ¨«¨ ?????
|
||||||
|
¨á¯®«ï¥âáï ª ª ª®¬ ¤
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
!TODO
|
||||||
|
‚ ¦®¥:
|
||||||
|
[ ] ¯¥à¥¤ ç «®¬ à ¡®âë «î¡®© ¯à®æ¥¤ãàë § ¯¨á¨/çâ¥¨ï ¤à ©¢ ãáâ ¢«¨¢ âì ä« £, ç⮡ ¥ ¡ë«® ¯®¢â®à®£® ¢ë§®¢ (¨§ ¯à¥àë¢ ¨ï, ¯à¨¬¥à)
|
||||||
|
[ ] ¡«®ª¨à®¢ª ä ©«®¢ ¢ ä ©«®¢ëå ¬ ¨¯ã«ïâ®à å (ç⮡ ¥ ®âªàë¢ âì § ¯¨áì 㦥 ®âªàëâë© § ¯¨áì ä ©«, ¯à¨¬¥à)
|
||||||
‘।¥¥:
|
‘।¥¥:
|
||||||
|
[x] ¯¥à¥¤ à¥áª ®¬ ¤à ©¢®¢ ¯à®¢¥àïâì ®âªàëâë¥ åí¤«ë ¨ ¥á«¨ ¡ãª¢ ¤¨áª ¬¥ï¥âáï, â® ¬¥ïâì ¤à ©¢ ¢ åí¤«¥
|
||||||
|
[?] ç âì à ¡®â âì á äãªæ¨ï¬¨ REMOVABLE ¨ MEDIA CHECK rst #18. ‚®§¢à é âì § 票¥ #FF, ¥á«¨ ¯®à冷ª ¡ãª¢ ¨§¬¥¨«áï
|
||||||
|
|
||||||
‚®®¡é¥ ¥ ¢ ¦®¥:
|
‚®®¡é¥ ¥ ¢ ¦®¥:
|
||||||
¨á¯à ¢¨âì ¢ë室 ¨§ äãªæ¨¨ #41 ¯à¨ ¢®§¬®¦®¬ 㢥«¨ç¥¨¨ ®¬¥à â ᪨ 1 ¯à¨ 255
|
[ ] ¨á¯à ¢¨âì ¢ë室 ¨§ äãªæ¨¨ #41 ¯à¨ ¢®§¬®¦®¬ 㢥«¨ç¥¨¨ ®¬¥à â ᪨ 1 ¯à¨ 255
|
||||||
|
-----------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
DSS 1.71.35
|
||||||
|
ˆ§¬¥¥¨ï ¯®á«¥ ¢¥àᨨ 1.70.2
|
||||||
|
- ¤®á ¨ ¡¨®á ¬®£ãâ ãáâ ¢«¨¢ âì § 祬-⮠०¨¬ txt 40x32 ¨ ®à¬ «ì® ¢ ñ¬ ¢ë¢®¤¨âì ⥪áâ
|
||||||
|
- LOADDIR:fix ¬ãá®à ¢ áâà ¨æ¥ ª â «®£ , ¥á«¨ ª â «®£ ¬¥ìè¥ áâà ¨æë
|
||||||
|
- DiskINF: ª®áâë«ì ¤«ï âਡãâ 0. <20> áâ®ï« ‘ ¢¥«¨©)). …᫨ ¢ ª®à¥ à ìè¥ ¬¥âª¨ ¤¨áª ¯®¯ ¤ «áï ä ©« á âਡã⮬ 0, â® äãªæ¨ï ¢®§¢à é « ¥£® ¨¬ï ª ª ¬¥âªã ¤¨áª
|
||||||
|
- ¯à®æ¥¤ãà § ¯ã᪠EXE ¬®£« § «¥§âì ¥ ¢ âã ¯ ¯ªã ¯¥à¥¤ ¯¥à¥¤ 祩 ã¯à ¢«¥¨ï § ¯ã᪠¥¬®¬ã ¯à¨«®¦¥¨î á ¢¥àᨥ© EXE = 0 ¢ § £®«®¢ª¥
|
||||||
|
- ATAPI ãáâனá⢮ ¢á¥£¤ ¯®«ãç ¥â ¡ãª¢ã, ¤ ¦¥ ¡¥§ ®á¨â¥«ï
|
||||||
|
- Ž¡à ¡ âë¢ ¥âáï ®è¨¡ª "ᬥ ®á¨â¥«ï"
|
||||||
|
- ä ©« ¥ á®§¤ áâáï, ¥á«¨ ¥â ᢮¡®¤®£® ¬ ¨¯ã«ïâ®à
|
||||||
|
- ¯®¬¥ï« ª¢ ¤à ⨪ ªãàá®à ¢ ª®á®«¨ ¤«ï ०¨¬ OVR (ª®â®àë© ¯®á«¥ ¦ â¨ï Ins)
|
||||||
|
- Œ¥«ª¨¥ ¯à ¢ª¨, àîè¥çª¨, ¡ £ä¨ªáë ¥ã¯®¬ïãâë¥ ¢ í⮬ ᯨ᪥ ¯® ¯à¨ç¨¥ ¬¥§¨¨ ¨ å « â®áâ¨
|
||||||
|
|
||||||
; TEST
|
|
||||||
|
DSS 1.70.2
|
||||||
|
ˆ§¬¥¥¨ï ¯®á«¥ ¢¥àᨨ 1.70
|
||||||
|
CORE:
|
||||||
|
[+] ¯à¨ ç⥨¨/§ ¯¨á¨ ä ©« ¥ ¯à®¨á室¨â "宫®á⮥" ¯¥à¥ç¨âë¢ ¨¥ FAT ®â ç « ä ©«
|
||||||
|
[+] ¯¥à¥ç¨âë¢ ¨¥ BPB ⥯¥àì ¤¥« ¥âáï ¥ ª ¦¤ë© ç¨å, ª®£¤ ¤® (¨ ¡ £ ¯à¨ § £à㧪¥ á ¤¨áª "B:" ¥â :-P )
|
||||||
|
[+] ¨§¬¥¥ à ¡®â á RAM DISK, ⥯¥àì ® ¬®¦¥â ¡ëâì § £àã§®çë¬
|
||||||
|
[+] ¨á¯à ¢«¥ë ¡ £¨ ¢ äãªæ¨ïå: WINCOPY, WINREST, SCROLL, SETVMOD, SELPAGE
|
||||||
|
SHELL:
|
||||||
|
[+] ¨á¯à ¢«¥ ¡ £ á "C:\>CD E:\"
|
||||||
|
[+] ¨á¯à ¢«¥ë ¡ £¨ á ®¡à ¡®âª®© ¡ãä¥à®¢ ª®¬ ¤®© áâப¨
|
||||||
|
UNSORTED:
|
||||||
|
[+] ¨á¯à ¢«¥ ¡ £ á ¯¥à¥ª«î票¥¬ ¤à㣮© ¤¨áª ¨§ ¥ª®à¥¢®© ¤¨à¥ªâ®à¨¨, ª®£¤ ®¢®¬ ¤¨áª¥ ®ª §ë¢ «áï ¢ ¥áãé¥áâ¢ãî饩 ¤¨à¥ªâ®à¨¨
|
||||||
|
[+] ¬¥«ª¨¥ ¨ ¥ ®ç¥ì ®¯â¨¬¨§ 樨
|
||||||
|
|
||||||
;ˆ§¬¥¥¨ï ¯®á«¥ ¢¥àᨨ 1.60
|
;ˆ§¬¥¥¨ï ¯®á«¥ ¢¥àᨨ 1.60
|
||||||
10.02.2003 - „®¡ ¢«¥ ¢¨§ã «¨§ æ¨ï ªãàá®à ¢ äãªæ¨¨ ECHOKEY.
|
10.02.2003 - „®¡ ¢«¥ ¢¨§ã «¨§ æ¨ï ªãàá®à ¢ äãªæ¨¨ ECHOKEY.
|
||||||
|
|||||||
572
DSS/DOS-MAIN.ASM
572
DSS/DOS-MAIN.ASM
@ -1,572 +0,0 @@
|
|||||||
|
|
||||||
;[BEGIN]
|
|
||||||
;//MODULE: DOS-MAIN AUTHOR: Denis Parinov
|
|
||||||
;//CREATE: A LONG TIME AGO :)
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;Rev Date Name Description
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;[ ] ¯ãâì ⥪ã饣® ª â «®£ ¢ DIR ¢ë¢®¤¨âáï á £«îª®¬ ¥á«¨ ® ¤«¨¥¥ 256 ¡ ©â®¢
|
|
||||||
;[ ] ¯ãâì ¢ ¯à¨£« 襨¨ ª®á®«¨ ¢ë¢®¤¨âáï á £«îª®¬ ¥á«¨ ¯ãâì ¤«¨¥¥ 256 ¡ ©â®¢
|
|
||||||
;[ ] ;!FIXIT ª ª®©-â® ¡ £ ¯à¨ ª®â®à®¬ ¥á«¨ ¥â ¤¨áª ¨ ¥£® ¯®«¥§âì, â® ¢áñ «®¬ ¥âáï
|
|
||||||
;R11 17-04-2023 BAO OPTIMIZED BUFFERS, FREED UP 768 BYTES FOR CODE
|
|
||||||
;R10 14-04-2023 BAO €¢ à¨©ë© § ¢¨á® á ¢ë¢®¤®¬ á®®¡é¥¨ï ¯à¨ áâ à⥠á¨á⥬ë, ¥á«¨ ¥â ᢮¡®¤®© ¯ ¬ïâ¨
|
|
||||||
;R09 08-04-2023 BAO ‘®ªà 饨¥ à §¬¥à â ¡«¨æë API ¤® 96 äãªæ¨© (0 - #5F). (Ž¯æ¨® «ì® ¯à¨ ª®¬¯¨«ï樨)
|
|
||||||
;R08 15-04-2003 DNS RENAMED FN. OPEN AND CLOSE
|
|
||||||
;R07 31-03-2003 DNS NEW DEPLOYING ROUTINE
|
|
||||||
;R06 31-03-2003 DNS RELAYOUTING MEMORY
|
|
||||||
;R05 27-03-2003 DNS CHANGE DRV. INIT. METHOD
|
|
||||||
;R04 27-03-2003 DNS DRIVERS MOVE TO SPECIAL PAGE
|
|
||||||
;R03 14-03-2003 DNS CODE OPTIMIZATION
|
|
||||||
;R02 19-11-2002 DNS ADD ENVIRONMENT INITIALIZATION
|
|
||||||
;R01 14-11-2002 DNS CUT AND MOVE BPB-STRUCT
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
; OUTPUT './Build/system.dos'
|
|
||||||
|
|
||||||
; MODULE MAIN
|
|
||||||
//SPRINTER EQU 2000
|
|
||||||
|
|
||||||
includelua 'Shared_includes/lua/Functions.lua'
|
|
||||||
INCLUDE 'defines.inc'
|
|
||||||
include 'shared_includes/constants/sp2000.inc'
|
|
||||||
include 'shared_includes/constants/bios_equ.inc'
|
|
||||||
include 'shared_includes/constants/dss_equ.inc'
|
|
||||||
include 'shared_includes/structures/FileSystem.inc'
|
|
||||||
include 'shared_includes/macroses/accelerator.z80'
|
|
||||||
include 'shared_includes/macroses/macros.z80'
|
|
||||||
include 'Structures.inc'
|
|
||||||
INCLUDE 'VERSION.INC'
|
|
||||||
INCLUDE 'DSS_MACROSES.Z80'
|
|
||||||
|
|
||||||
;PAGEDRV EQU #00
|
|
||||||
|
|
||||||
; DIRPAGE EQU 0
|
|
||||||
; FATPAGE EQU 1
|
|
||||||
; TXTPAGE EQU 2
|
|
||||||
; ENVPAGE EQU 2
|
|
||||||
; DRVPAGE EQU 3
|
|
||||||
; ENVPAGE EQU 3
|
|
||||||
; DRVPAGE EQU 4
|
|
||||||
|
|
||||||
; TXTADDR EQU #C000
|
|
||||||
; ENVADDR EQU #E400
|
|
||||||
|
|
||||||
; DIR EQU #C000
|
|
||||||
; FAT EQU #C000
|
|
||||||
|
|
||||||
|
|
||||||
;
|
|
||||||
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
|
|
||||||
ORG 0
|
|
||||||
;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
; <[CLOSE TASK]> ;
|
|
||||||
RST_0x00: JP LEAVE ;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
; <[BIOS API]> ;
|
|
||||||
_mInfoBLOCK 8-$,#FF ;
|
|
||||||
RST_0x08: PUSH AF ;
|
|
||||||
LD A,SYS_PORT.PAGE8;
|
|
||||||
OUT (SYS_PORT.ON),A ;
|
|
||||||
POP AF ;
|
|
||||||
RET ;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
; <[DSS API]> ;
|
|
||||||
_mInfoBLOCK #10-$,#FF ;
|
|
||||||
RST_0x10: JP RST_10 ;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
; <[DRIVE API]> ;
|
|
||||||
_mInfoBLOCK #18-$,#FF ;
|
|
||||||
;A0018 JP INTDISK ;
|
|
||||||
RST_0x18: PUSH AF ;
|
|
||||||
PUSH BC ;
|
|
||||||
DRV_PG_NUMBER+2: ;
|
|
||||||
LD BC,0*256+SLOT0 ;
|
|
||||||
JP PORTAL.outMAIN ;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
; <[NOT USED]> ;
|
|
||||||
_mInfoBLOCK #20-$,#FF ;
|
|
||||||
RST_0x20: JP RST_20 ;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
RST_20:
|
|
||||||
RST_28:
|
|
||||||
NOPS: LD A,DSS_Error.sys.INVALID_FUNCTION
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
; <[NOT USED]> ;
|
|
||||||
_mInfoBLOCK #28-$,#FF ;
|
|
||||||
RST_0x28: JP RST_28 ;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
; <[MOUSE API]> ;
|
|
||||||
_mInfoBLOCK #30-$,#FF ;
|
|
||||||
RST_0x30: JP INTMOUS ;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
; <[MAIN INT]> ;
|
|
||||||
_mInfoBLOCK #38-$,#FF ;
|
|
||||||
RST_38: ;
|
|
||||||
JP RST_0x38 ; <20>â®â ¤¦ ¬¯ 㦥, ç⮡ á®äâë ¬®£«¨ «¥£ª® ¬¥ïâì ®¡à ¡®â稪 ᢮©. Š®áâë«ì®.
|
|
||||||
RST_0x38: ;
|
|
||||||
INT_: PUSH AF ;
|
|
||||||
EX AF,AF' ;
|
|
||||||
PUSH AF ;
|
|
||||||
PUSH BC ;
|
|
||||||
PUSH DE ;
|
|
||||||
PUSH HL ;
|
|
||||||
EXX ;
|
|
||||||
PUSH BC ;
|
|
||||||
PUSH DE ;
|
|
||||||
PUSH HL ;
|
|
||||||
PUSH IX ;
|
|
||||||
PUSH IY ;
|
|
||||||
CALL KEYSCAN ;
|
|
||||||
LD C,#80 ;
|
|
||||||
RST #30 ;
|
|
||||||
IFN CLASSIC_CURSOR ;
|
|
||||||
CALL cursor_interrupt; ¢¥ªâ®à ®¡á«ã¦. ªãàá®à ;!!!!! VASIL
|
|
||||||
ENDIF ;
|
|
||||||
POP IY ;
|
|
||||||
POP IX ;
|
|
||||||
POP HL ;
|
|
||||||
POP DE ;
|
|
||||||
POP BC ;
|
|
||||||
EXX ;
|
|
||||||
POP HL ;
|
|
||||||
POP DE ;
|
|
||||||
POP BC ;
|
|
||||||
POP AF ;
|
|
||||||
EX AF,AF' ;
|
|
||||||
POP AF ;
|
|
||||||
EI ;
|
|
||||||
RETI ;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
NMI: RETN
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
; <[ NMI ]> ;
|
|
||||||
_mInfoBLOCK #66-$,#FF ;
|
|
||||||
NMI_0x66: JP NMI ;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
RST_10: PUSH HL
|
|
||||||
LD L,C
|
|
||||||
|
|
||||||
IF SHORT_RSTx10_TABLE
|
|
||||||
;[ ] R09
|
|
||||||
LD H,A
|
|
||||||
LD A,#5F
|
|
||||||
SUB C
|
|
||||||
JR C,.error
|
|
||||||
LD A,H
|
|
||||||
;[ ] R09
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
LD H,high ADRST10
|
|
||||||
LD C,(HL)
|
|
||||||
INC H
|
|
||||||
LD H,(HL)
|
|
||||||
LD L,C
|
|
||||||
EX (SP),HL
|
|
||||||
RET
|
|
||||||
|
|
||||||
IF SHORT_RSTx10_TABLE
|
|
||||||
;[ ] R09
|
|
||||||
.error: POP HL
|
|
||||||
JR NOPS
|
|
||||||
;[ ] R09
|
|
||||||
ENDIF
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
; <[DRIVE PAGE SWITCH]> ;
|
|
||||||
_mInfoBLOCK #80-$,0 ;
|
|
||||||
;ENTER: ;
|
|
||||||
PORTAL.outMAIN: ;
|
|
||||||
IN A,(C) ;
|
|
||||||
OUT (C),B ;
|
|
||||||
ASSERT $!=84,'-> Portal error!';
|
|
||||||
POP BC ;
|
|
||||||
RET ;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
;
|
|
||||||
|
|
||||||
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
|
|
||||||
;
|
|
||||||
|
|
||||||
/*
|
|
||||||
STRUCT _sBOOT_SEC
|
|
||||||
.JMP: BLOCK 3,0 ; +#00 "JMP"
|
|
||||||
.ID_NAME: TEXT 8,{"DSS_1.7","0"} ; +#03 DOS NAME - DB "DSS_1.70"
|
|
||||||
; Block Parameters BIOS
|
|
||||||
.B_P_S: WORD #200 ; +#0B BYTE PER SECTOR
|
|
||||||
.S_P_C: BYTE 2 ; +#0D SECTORS PER CLUSTER
|
|
||||||
.RESERVE: WORD 1 ; +#0E RESERVE SECTORS
|
|
||||||
.FAT_NUM: BYTE 2 ; +#10 AMOUNT FATS
|
|
||||||
.F_P_DIR: WORD 112 ; +#11 FILES IN DIRECTORY
|
|
||||||
.S_P_D: WORD 1440 ; +#13 ALL SECTORS ON DISK
|
|
||||||
.ID_FORM: BYTE #F0 ; +#15 ID FORMAT
|
|
||||||
.S_P_F: WORD 2 ; +#16 SIZE FAT IN SECTORS
|
|
||||||
.S_P_T: WORD 9 ; +#18 SECTOR PER TRACK
|
|
||||||
.HEADS: WORD 2 ; +#1A AMOUNT SIDES
|
|
||||||
.HIDDEN: DWORD 0 ; +#1C HIDDEN SECTORS
|
|
||||||
.BPB_BIG_TOTAL_SECTORS: DWORD 0 ; +#20 BIG TOTAL SECTOR
|
|
||||||
.BPB_PHISICAL_DRIVE_NUMBER: WORD #80 ; +#24 PHISICAL DRIVE NUMBER
|
|
||||||
.BPB_EXT_BOOT_RECORD_SIGNATURE: BYTE #29 ; +#26 EXTENDED BOOT RECORD SIGNATURE
|
|
||||||
.BPB_SERIAL_NUMBER: DWORD 0 ; +#27 VOLUME SERIAL NUMBER
|
|
||||||
.BPB_LABEL: TEXT 8,{"NO NAME"," "} ; +#2B DISK LABEL
|
|
||||||
.ID_FAT: TEXT 8,{"FAT16"," "} ; +#36 FILE SYSTEM ID ( BPB_FS_ID )
|
|
||||||
ENDS
|
|
||||||
*/
|
|
||||||
;R01
|
|
||||||
; Area for boot sector BootSector.
|
|
||||||
;BootSector _sBOOT_SEC ,{ "DSS_","0"+VERS,".",MODF/10+"0",MODF-(MODF/10)*10+"0" }
|
|
||||||
; end boot sector
|
|
||||||
;R01
|
|
||||||
|
|
||||||
; <20>¥à¢ë© áâ àâ á¨á⥬ë, ¯®á«¥ ¨¨æ¨ «¨§ 樨 ¤à¥á ¢ â ¡«¨æ¥ ¬¥ï¥âáï VERSION
|
|
||||||
F_START:
|
|
||||||
DI
|
|
||||||
CALL DEPLOY ;R07 ;íâ ¯à®æ¥¤ãà § âàñâáï ¯®á«¥ ¨á¯®«¥¨ï
|
|
||||||
RET C ;R10
|
|
||||||
CALL KINIT
|
|
||||||
CALL PRINT_INIT
|
|
||||||
LD C,0
|
|
||||||
RST #30
|
|
||||||
LD A,(VMODE)
|
|
||||||
LD C,#81
|
|
||||||
RST #30
|
|
||||||
;CALL INITDVC ;R05
|
|
||||||
;R05
|
|
||||||
LD C,#00
|
|
||||||
RST #18
|
|
||||||
LD (LDRIVE),A
|
|
||||||
;R05
|
|
||||||
EI
|
|
||||||
;Set new address fn. VERSION
|
|
||||||
LD HL,ADRST10
|
|
||||||
LD (HL),low VERSION ;R03
|
|
||||||
INC H
|
|
||||||
LD (HL),high VERSION ;R03
|
|
||||||
|
|
||||||
;------[CLEAR BUFFERS]------;
|
|
||||||
;R07 ;R11
|
|
||||||
LD HL,CLEAR_ZONE.start
|
|
||||||
LD DE,CLEAR_ZONE.start+1
|
|
||||||
LD BC,CLEAR_ZONE.size-1
|
|
||||||
LD (HL),0
|
|
||||||
LDIR
|
|
||||||
;R07 ;R11
|
|
||||||
;R11
|
|
||||||
LD HL,FM_BUF
|
|
||||||
LD (HL),'.'
|
|
||||||
;R11
|
|
||||||
;---------------------------;
|
|
||||||
|
|
||||||
;R02
|
|
||||||
;LD B,#FF ;INIT ENVIRONMENT
|
|
||||||
CALL INITENV
|
|
||||||
IFN CLASSIC_CURSOR
|
|
||||||
CALL SETUP_CURSORS
|
|
||||||
ENDIF
|
|
||||||
;R02
|
|
||||||
JP VERSION
|
|
||||||
;R03
|
|
||||||
;R07Allocate memory
|
|
||||||
; LD BC,#03C2
|
|
||||||
; RST ToBIOS
|
|
||||||
; LD HL,BANKTBL
|
|
||||||
; LD C,A
|
|
||||||
; LD B,#FF
|
|
||||||
;VERINIT INC B
|
|
||||||
; PUSH BC
|
|
||||||
; PUSH HL
|
|
||||||
; LD A,C
|
|
||||||
; LD C,#C4
|
|
||||||
; RST ToBIOS
|
|
||||||
; POP HL
|
|
||||||
; POP BC
|
|
||||||
; LD (HL),A
|
|
||||||
; INC HL
|
|
||||||
; JR NC,VERINIT
|
|
||||||
;R07;R03
|
|
||||||
;R07 JP INIT2 ;R03
|
|
||||||
; DS $/256+1*256-$,0 c:\bin\menu
|
|
||||||
|
|
||||||
|
|
||||||
MEMTAB BLOCK 256,0
|
|
||||||
_mInfoALIGN 256,0
|
|
||||||
;------------------------------------------------------------------------------------------------------------------------;
|
|
||||||
GO_ZERO EQU #0000
|
|
||||||
;FUNCTION ADDRESS ARRAY
|
|
||||||
ADRST10: ;DS 512 ;,0
|
|
||||||
;...............................................[LOW ADDRESS ]:
|
|
||||||
; 0 1 2 3 4 5 6 7 8 9 DEC HEX
|
|
||||||
DB low F_START, low CHNDISK, low CURRDSK, low DISKINF, low NOPS, low NOPS, low NOPS, low NOPS, low SCANDRV, low BOOTDSK ; 0 00..09
|
|
||||||
DB low CREATE, low CREAT_N, low NOPS, low NOPS, low DELETE, low NOPS, low RENAME, low OPEN_FN, low CLOSE_FN, low READ ; 1 A0..13
|
|
||||||
DB low WRITE, low MOVE_FP, low ATTRIB, low GET_D_T, low PUT_D_T, low F_FIRST, low F_NEXT, low MKDIR, low RMDIR, low CHDIR ; 2 14..1D
|
|
||||||
DB low CURRDIR, low NOPS, low NOPS, low SYSTIME, low SETTIME, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 3 1E..27
|
|
||||||
DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low WAITKEY, low SCANKEY ; 4 28..31
|
|
||||||
DB low ECHOKEY, low CTRLKEY, low NOPS, low K_CLEAR, low K_SETUP, low TESTKEY, low SETWIN, low SETWIN1, low SETWIN2, low SETWIN3 ; 5 32..3B
|
|
||||||
DB low FREEMEM, low GETMEM, low RETMEM, low SETMEM, low EXEC, low LEAVE, low WAIT, low GSWITCH, low DOSNAME, low EX_PATH ; 6 3C..45
|
|
||||||
DB low ENVIRON, low APPINFO, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 7 46..4F
|
|
||||||
DB low SETVMOD, low GETVMOD, low LOCATE, low CURSOR, low SELPAGE, low SCROLL, low CLEAR, low RDCHAR, low WRCHAR, low WINCOPY ; 8 50..59
|
|
||||||
DB low WINREST, low PUTCHAR, low PCHARS, low NOPS, low NOPS, low PRINT ; 9 5A..5F
|
|
||||||
|
|
||||||
IFN SHORT_RSTx10_TABLE
|
|
||||||
;[ ] R09
|
|
||||||
DB low NOPS, low NOPS, low NOPS, low NOPS ; 9 60..63
|
|
||||||
DB low NOPS, low NOPS, low NOPS, low NOPS, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 10 64..6D
|
|
||||||
DUP 13
|
|
||||||
DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO; 110-239 6E-EF
|
|
||||||
EDUP
|
|
||||||
DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 24 F0..F9
|
|
||||||
DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; END ; 25 FA..FF
|
|
||||||
|
|
||||||
ELSE ;!TODO free space
|
|
||||||
|
|
||||||
_mInfoBLOCK ADRST10+#100 - $,0
|
|
||||||
;[ ] R09
|
|
||||||
ENDIF
|
|
||||||
;...............................................[HIGH ADDRESS]:
|
|
||||||
DB high F_START,high CHNDISK,high CURRDSK,high DISKINF,high NOPS, high NOPS, high NOPS, high NOPS, high SCANDRV, high BOOTDSK
|
|
||||||
DB high CREATE, high CREAT_N,high NOPS, high NOPS, high DELETE, high NOPS, high RENAME, high OPEN_FN,high CLOSE_FN,high READ
|
|
||||||
DB high WRITE, high MOVE_FP,high ATTRIB, high GET_D_T,high PUT_D_T,high F_FIRST,high F_NEXT, high MKDIR, high RMDIR, high CHDIR
|
|
||||||
DB high CURRDIR,high NOPS, high NOPS, high SYSTIME,high SETTIME,high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
|
|
||||||
DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high WAITKEY, high SCANKEY
|
|
||||||
DB high ECHOKEY,high CTRLKEY,high NOPS, high K_CLEAR,high K_SETUP,high TESTKEY,high SETWIN, high SETWIN1,high SETWIN2, high SETWIN3
|
|
||||||
DB high FREEMEM,high GETMEM, high RETMEM, high SETMEM, high EXEC, high LEAVE, high WAIT, high GSWITCH,high DOSNAME, high EX_PATH
|
|
||||||
DB high ENVIRON,high APPINFO,high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
|
|
||||||
DB high SETVMOD,high GETVMOD,high LOCATE, high CURSOR, high SELPAGE,high SCROLL, high CLEAR, high RDCHAR, high WRCHAR, high WINCOPY
|
|
||||||
DB high WINREST,high PUTCHAR,high PCHARS, high NOPS, high NOPS, high PRINT
|
|
||||||
|
|
||||||
IFN SHORT_RSTx10_TABLE
|
|
||||||
;[ ] R09
|
|
||||||
DB high NOPS, high NOPS, high NOPS, high NOPS
|
|
||||||
DB high NOPS, high NOPS, high NOPS, high NOPS, high GO_ZERO,high GO_ZERO,high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO
|
|
||||||
DUP 13
|
|
||||||
DB high GO_ZERO,high GO_ZERO,high GO_ZERO,high GO_ZERO,high GO_ZERO,high GO_ZERO,high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO
|
|
||||||
EDUP
|
|
||||||
DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
|
|
||||||
DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS ; END
|
|
||||||
|
|
||||||
ELSE
|
|
||||||
;!TODO free space
|
|
||||||
;_mInfoBLOCK ADRST10+#200 - $,0
|
|
||||||
;[ ] R09
|
|
||||||
ENDIF
|
|
||||||
; DB low WINREST, low PUTCHAR, low PCHARS, low NOPS, low NOPS, low PRINT, low NOPS, low NOPS, low NOPS, low NOPS ; 9 5A..63
|
|
||||||
; DB high WINREST,high PUTCHAR,high PCHARS, high NOPS, high NOPS, high PRINT, high NOPS, high NOPS, high NOPS, high NOPS
|
|
||||||
;---------------------------------------------------------------------------------------------------------------------------------------------------------------;
|
|
||||||
;[INCLUDE]
|
|
||||||
;!TODO § ¬¥¨âì ¯®-¬ ªá¨¬®¬ã ¢áñ ¢ KEYINTER.ASM ¢ë§®¢ë ¡¨®á
|
|
||||||
INCLUDE "KEYINTER.ASM" ;!FIXIT ¨§-§ ¡ãä¥à á ¢ëà ¢¨¢ ¨¥¬ align 256 ¢ ç «¥ ¯à¨å®¤¨âáï ADRST10 ¤®¡¨¢ âì ã«ï¬¨ ¢ ª®æ¥
|
|
||||||
INCLUDE "VIDEO.ASM"
|
|
||||||
INCLUDE "FAT_X.ASM"
|
|
||||||
INCLUDE "DOS_X.ASM"
|
|
||||||
INCLUDE "DOS_FM.ASM"
|
|
||||||
INCLUDE "DOS5.ASM"
|
|
||||||
INCLUDE "EXECUTE.ASM"
|
|
||||||
INCLUDE "ENVIRON.ASM"
|
|
||||||
INCLUDE "INTMOUSE.ASM"
|
|
||||||
;
|
|
||||||
DISPLAY "DOS-MAIN end address: ",/H,$-1
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;
|
|
||||||
;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < <
|
|
||||||
;
|
|
||||||
;
|
|
||||||
CLEAR_ZONE.start EQU $
|
|
||||||
|
|
||||||
BUFFERSplace _sBuffers=$
|
|
||||||
FM_BUF _sFM = BUFFERSplace.FileManipulator
|
|
||||||
.Size EQU _sFM
|
|
||||||
.FullSize EQU FMCOUNT*FM_BUF.Size
|
|
||||||
BootSector _sBOOT_SEC = BUFFERSplace.BootSector
|
|
||||||
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
|
|
||||||
XSTACK EQU BUFFERSplace.Stack.SPoint
|
|
||||||
BUFFER EQU BUFFERSplace.Buffer
|
|
||||||
SECBUF EQU BUFFER
|
|
||||||
|
|
||||||
CLEAR_ZONE.size EQU _sBuffers
|
|
||||||
/*
|
|
||||||
;R11 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
|
||||||
;!TEST
|
|
||||||
FM_BUF _sFM=$
|
|
||||||
.Size EQU _sFM
|
|
||||||
.FullSize EQU FMCOUNT*FM_BUF.Size
|
|
||||||
|
|
||||||
;????? ¥ £à㧨âáï «¨ ¯®«®áâìî ᥪâ®à ¢ 512 ¡ ©â®¢ ¯à¨ § £à㧪¥ åí¤¥à ?
|
|
||||||
EXEBUFF _sEXE_HEADER=$+FM_BUF.FullSize
|
|
||||||
; EXEBUFF:
|
|
||||||
; DB "EXE"
|
|
||||||
; DB #00
|
|
||||||
; OFFCOD1 DW #0000
|
|
||||||
; OFFCOD2 DW #0000
|
|
||||||
; LOADER DW #0000
|
|
||||||
; DW #0000
|
|
||||||
; DW #0000
|
|
||||||
; DW #0000
|
|
||||||
; LD_ADDR DW #0000
|
|
||||||
; PC_REG DW #0000
|
|
||||||
; SP_REG DW #0000
|
|
||||||
; BLOCK 512-($-EXEBUFF),0
|
|
||||||
|
|
||||||
;(!!!HERE STACK FOR EXEC!!!)
|
|
||||||
; BLOCK 255,0
|
|
||||||
;XSTACK DB #00
|
|
||||||
XSTACK EQU EXEBUFF+_sEXE_HEADER+255
|
|
||||||
|
|
||||||
BUFFER EQU XSTACK+1
|
|
||||||
SECBUF EQU BUFFER
|
|
||||||
;R11 ////////////////////////////////
|
|
||||||
*/
|
|
||||||
DISPLAY "FM_BUF addr: ",/H,FM_BUF
|
|
||||||
DISPLAY "FM_BUF.Size: ",/H,FM_BUF.Size
|
|
||||||
DISPLAY "FM_BUF.FullSize: ",/H,FM_BUF.FullSize
|
|
||||||
DISPLAY "EXEBUFF: ",/H,EXEBUFF
|
|
||||||
DISPLAY "XSTACK: ",/H,XSTACK
|
|
||||||
DISPLAY "BUFFER: ",/H,BUFFER
|
|
||||||
;
|
|
||||||
;
|
|
||||||
;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < <
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||;
|
|
||||||
; !!!!! íâ ¯à®æ¥¤ãà § âàñâáï ¯®á«¥ ¨á¯®«¥¨ï
|
|
||||||
DEPLOY:
|
|
||||||
;Allocate memory
|
|
||||||
LD BC,USING_MEMPAGES*256+#C2
|
|
||||||
RST ToBIOS ;GET DSS PAGES HANDLE
|
|
||||||
RET C ;R10
|
|
||||||
LD HL,BANKTBL
|
|
||||||
LD C,A
|
|
||||||
LD B,#FF
|
|
||||||
.loop: INC B
|
|
||||||
PUSH BC
|
|
||||||
PUSH HL
|
|
||||||
LD A,C
|
|
||||||
LD C,#C4 ; !FIXIT .GetMemBlkPages - ¯¨å âì íâã áâà ¨æã ¢ á«®â 1 (® ¡ã¤¥â ¨ ¢ 0 ᫮⥠¨ ¢ 1) ¨ ¢ë§ë¢ âì ¡¨®á
|
|
||||||
RST ToBIOS
|
|
||||||
|
|
||||||
POP HL
|
|
||||||
POP BC
|
|
||||||
LD (HL),A
|
|
||||||
INC HL
|
|
||||||
JR NC,.loop
|
|
||||||
;
|
|
||||||
IN A,(SLOT0)
|
|
||||||
LD (DRV.MAIN_PG_NUMBER),A
|
|
||||||
LD A,DRVPAGE
|
|
||||||
CALL BANK
|
|
||||||
PUSH AF
|
|
||||||
LD HL,DRV_CONTENT
|
|
||||||
LD DE,#C000
|
|
||||||
LD BC,DRV_CONTENT.SIZE
|
|
||||||
LDIR
|
|
||||||
IN A,(SLOT3)
|
|
||||||
LD (DRV_PG_NUMBER),A
|
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
AND A ;R10
|
|
||||||
RET
|
|
||||||
; .halt: POP HL ;ᨬ ¥¬ «¨è¥¥ á® á⥪
|
|
||||||
; ; LD A,DSS_Error.sys.NOT_ENOUGH_MEMORY
|
|
||||||
; ; SCF
|
|
||||||
; RET
|
|
||||||
|
|
||||||
; defb 0
|
|
||||||
|
|
||||||
IF ENVVALUE != BUFFER
|
|
||||||
ASSERT "Warning! ENVVALUE != BUFFER"
|
|
||||||
//BLOCK 1000,0
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
;--- --- --- --- [Build version] --- --- --- ---;
|
|
||||||
; C_OSTYPE
|
|
||||||
;--- --- --- --- --- --- --- --- --- --- --- ---;
|
|
||||||
|
|
||||||
DISPLAY "DEPLOY end address: ",/H,$
|
|
||||||
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||;
|
|
||||||
DISPLAY "Space for DRV-MAIN: ",/A,#4000-$," bytes."
|
|
||||||
DRV_CONTENT:
|
|
||||||
; ENDMODULE
|
|
||||||
DISP 0
|
|
||||||
INCLUDE 'DRV-MAIN.ASM'
|
|
||||||
ENT
|
|
||||||
DRV_CONTENT.SIZE EQU $-DRV_CONTENT
|
|
||||||
|
|
||||||
DISPLAY " END ADDRESS: ",/H,$
|
|
||||||
// ASSERT $<#4001,'-> Memory leack!!!';
|
|
||||||
;[END]
|
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
; DTA DB " "
|
|
||||||
; DB " "
|
|
||||||
; DB #20
|
|
||||||
; DW 0,0,0,0,0
|
|
||||||
; DW 0
|
|
||||||
; DW 0
|
|
||||||
; CLUSTER DW 0
|
|
||||||
; SIZE DW 0,0
|
|
||||||
; ASCIIZ DB "FILENAME.EXT",#00
|
|
||||||
|
|
||||||
|
|
||||||
;R06
|
|
||||||
;R06 BUFFER
|
|
||||||
;R06 SECBUF DB ". ",#10
|
|
||||||
;R06 DW 0,0,0,0,0
|
|
||||||
;R06 DW #0000
|
|
||||||
;R06 DW #0000
|
|
||||||
;R06 DW #0000
|
|
||||||
;R06 DW #0000,0000
|
|
||||||
;R06 DB ".. ",#10
|
|
||||||
;R06 DW 0,0,0,0,0
|
|
||||||
;R06 DW #0000
|
|
||||||
;R06 DW #0000
|
|
||||||
;R06 DW #0000
|
|
||||||
;R06 DW #0000,0000
|
|
||||||
;R06 DS 512-64 ;,0
|
|
||||||
1748
DSS/DOS5.ASM
1748
DSS/DOS5.ASM
File diff suppressed because it is too large
Load Diff
831
DSS/DOS_FM.ASM
831
DSS/DOS_FM.ASM
@ -1,831 +0,0 @@
|
|||||||
|
|
||||||
;[BEGIN]
|
|
||||||
;//MODULE: DOS_FM
|
|
||||||
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
|
||||||
;//UPDATE: 24-10-1999 DNS Restore module
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;Rev Date Name Description
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;R01 16-11-1999 DNS ERROR READING FAT CHAIN
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
|
|
||||||
;FMS DB FMCOUNT
|
|
||||||
|
|
||||||
;ACCESS MODE:
|
|
||||||
; 00 - READ/WRITE
|
|
||||||
; 01 - READ
|
|
||||||
; 02 - WRITE
|
|
||||||
;FM_BUF:
|
|
||||||
;File Manipulator (FM)
|
|
||||||
; BYTE '. ' ;+00 NAME
|
|
||||||
; BYTE ' ' ;+08 EXT
|
|
||||||
; BYTE #10 ;+11 ATTRIBUT
|
|
||||||
; BYTE 0 ;+12 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï ç⥨ï
|
|
||||||
; BYTE 0 ;+13 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï § ¯¨á¨
|
|
||||||
; BLOCK 8,0 ;+14 RESERVED
|
|
||||||
; WORD #0000 ;+22 TIME
|
|
||||||
; WORD #0000 ;+24 DATE
|
|
||||||
; WORD #0000 ;+26 START CLUSTER
|
|
||||||
; DWORD #0000 ;+28 SIZE FILE
|
|
||||||
; DWORD #0000 ;+32 FILE POSITION (FP)
|
|
||||||
; WORD #0000 ;+36 DIRECTORY CLUSTER
|
|
||||||
; WORD #0000 ;+38 HANDLE NUMBER
|
|
||||||
; BYTE #00 ;+40 DRIVE OR CURRENT
|
|
||||||
; BYTE #00 ;+41 ACCESS MODE
|
|
||||||
; BYTE #00 ;+42 TASK
|
|
||||||
; BYTE #00 ;+43 EMPTY
|
|
||||||
/*
|
|
||||||
;!TEST
|
|
||||||
FM_BUF: _sFM
|
|
||||||
.Size EQU _sFM
|
|
||||||
BLOCK (FMCOUNT-1)*FM_BUF.Size, 0
|
|
||||||
*/
|
|
||||||
|
|
||||||
MACRO _mFM_FIND
|
|
||||||
CP FMCOUNT+1
|
|
||||||
JR NC,ABS_FM
|
|
||||||
PUSH DE
|
|
||||||
|
|
||||||
LD IY,FM_BUF
|
|
||||||
LD DE,FM_BUF.Size
|
|
||||||
AND A
|
|
||||||
JR Z,.endLoop
|
|
||||||
.loop: ADD IY,DE
|
|
||||||
DEC A
|
|
||||||
JR NZ,.loop
|
|
||||||
.endLoop:
|
|
||||||
POP DE
|
|
||||||
; A=0
|
|
||||||
OR (IY) ;+00 NAME
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
SET_FM:
|
|
||||||
_mFM_FIND
|
|
||||||
|
|
||||||
LD A,0 ;!FIXIT ®¬¥à ®è¨¡ª¨
|
|
||||||
RET NZ
|
|
||||||
ABS_FM LD A,DSS_Error.sys.INVALID_HANDLE
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
RES_FM:
|
|
||||||
_mFM_FIND
|
|
||||||
|
|
||||||
LD A,5
|
|
||||||
EXX
|
|
||||||
SCF
|
|
||||||
RET Z
|
|
||||||
XOR A
|
|
||||||
LD (IY+0),A
|
|
||||||
RET
|
|
||||||
|
|
||||||
GET_FM: LD B,FMCOUNT
|
|
||||||
LD C,#FF
|
|
||||||
LD IY,FM_BUF-FM_BUF.Size
|
|
||||||
LD DE,FM_BUF.Size
|
|
||||||
.loop: ADD IY,DE
|
|
||||||
INC C
|
|
||||||
LD A,(IY+0)
|
|
||||||
OR A
|
|
||||||
RET Z
|
|
||||||
DJNZ .loop
|
|
||||||
LD A,DSS_Error.sys.NO_HANDLES
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
; HL:IX - OFFSET POINTER
|
|
||||||
; A - FILE MANIPULATOR
|
|
||||||
MOVE_FP CALL SET_FM
|
|
||||||
RET C
|
|
||||||
INC B
|
|
||||||
DEC B
|
|
||||||
JR Z,.F_start
|
|
||||||
DEC B
|
|
||||||
JR Z,.F_current
|
|
||||||
DEC B
|
|
||||||
JR Z,.B_end
|
|
||||||
LD A,DSS_Error.sys.INVALID_FUNCTION
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
;from Start File
|
|
||||||
.F_start:
|
|
||||||
; B=0
|
|
||||||
LD C,B
|
|
||||||
LD D,B
|
|
||||||
LD E,B
|
|
||||||
JR MOVE_F1
|
|
||||||
|
|
||||||
;from End File
|
|
||||||
.B_end: LD C,(IY+28)
|
|
||||||
LD B,(IY+29)
|
|
||||||
LD E,(IY+30)
|
|
||||||
LD D,(IY+31)
|
|
||||||
JR MOVE_F1
|
|
||||||
|
|
||||||
;from Current Position
|
|
||||||
.F_current:
|
|
||||||
LD C,(IY+32)
|
|
||||||
LD B,(IY+33)
|
|
||||||
LD E,(IY+34)
|
|
||||||
LD D,(IY+35)
|
|
||||||
MOVE_F1 ADD IX,BC
|
|
||||||
ADC HL,DE
|
|
||||||
LD D,XH
|
|
||||||
LD E,XL
|
|
||||||
LD (IY+32),E
|
|
||||||
LD (IY+33),D
|
|
||||||
LD (IY+34),L
|
|
||||||
LD (IY+35),H
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;FP COMPARE
|
|
||||||
; CY - FILE POINTER > SIZE
|
|
||||||
; NC - FILE POINTER < SIZE
|
|
||||||
|
|
||||||
MOVE_CP LD L,(IY+28)
|
|
||||||
LD H,(IY+29)
|
|
||||||
LD E,(IY+32)
|
|
||||||
LD D,(IY+33)
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
LD L,(IY+30)
|
|
||||||
LD H,(IY+31)
|
|
||||||
LD E,(IY+34)
|
|
||||||
LD D,(IY+35)
|
|
||||||
SBC HL,DE
|
|
||||||
RET
|
|
||||||
|
|
||||||
;--------------------
|
|
||||||
|
|
||||||
ECL2 POP BC
|
|
||||||
POP DE
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
BLOKRD0 POP BC
|
|
||||||
POP DE
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
;READ SECTORS OF FILE
|
|
||||||
;HL:DE - FP (in sectors)
|
|
||||||
; B - Amount sectors
|
|
||||||
BLOK_RD PUSH BC
|
|
||||||
LD (READMEM),IX
|
|
||||||
LD A,(BootSector.S_P_C) ;SECTORS PER CLUSTER
|
|
||||||
LD C,A
|
|
||||||
LD B,0
|
|
||||||
CALL DIV32
|
|
||||||
LD B,XH
|
|
||||||
LD C,XL
|
|
||||||
PUSH HL ;RESIDUE
|
|
||||||
LD L,(IY+26) ;START CLUSTER
|
|
||||||
LD H,(IY+27)
|
|
||||||
LD A,H
|
|
||||||
OR L
|
|
||||||
JR NZ,BLOKRD2
|
|
||||||
JR ECL2 ;R01 JR BLOKRD0
|
|
||||||
BLOKRD1 PUSH BC
|
|
||||||
CALL R_F_FAT
|
|
||||||
POP BC
|
|
||||||
JR C,ECL2 ;R01
|
|
||||||
EX DE,HL
|
|
||||||
DEC BC
|
|
||||||
BLOKRD2 LD A,B
|
|
||||||
OR C
|
|
||||||
JR NZ,BLOKRD1
|
|
||||||
POP DE
|
|
||||||
POP BC
|
|
||||||
LD A,(BootSector.S_P_C)
|
|
||||||
SUB E
|
|
||||||
LD C,A ;\
|
|
||||||
CP B ; \
|
|
||||||
JR C,BLOKRD3 ;SIZE > RESIDUE CLUSTER ; \
|
|
||||||
LD C,B ;SIZE < CLUSTER ;->-|--> ; !TODO à §®¡à âìáï
|
|
||||||
BLOKRD3 LD A,B ; /
|
|
||||||
SUB C ; /
|
|
||||||
LD B,A ;/
|
|
||||||
PUSH HL
|
|
||||||
PUSH BC
|
|
||||||
PUSH DE
|
|
||||||
CALL NSECTOR
|
|
||||||
POP DE
|
|
||||||
ADD IX,DE
|
|
||||||
JR NC,BLOKRD4
|
|
||||||
INC HL
|
|
||||||
BLOKRD4 LD DE,(READMEM)
|
|
||||||
LD A,(FatBuffer.DRIVE)
|
|
||||||
LD B,C
|
|
||||||
LD C,5
|
|
||||||
RST #18
|
|
||||||
JP C,BLOKRD0
|
|
||||||
POP BC
|
|
||||||
LD HL,(READMEM)
|
|
||||||
LD DE,(BootSector.B_P_S)
|
|
||||||
BLOKRD5 ADD HL,DE
|
|
||||||
DEC C
|
|
||||||
JR NZ,BLOKRD5
|
|
||||||
LD (READMEM),HL
|
|
||||||
POP DE
|
|
||||||
LD A,B
|
|
||||||
OR A
|
|
||||||
RET Z
|
|
||||||
BLOKRD6 LD HL,BootSector.S_P_C
|
|
||||||
LD A,B
|
|
||||||
SUB (HL)
|
|
||||||
LD B,A
|
|
||||||
LD C,(HL)
|
|
||||||
JR NC,BLOKRD7
|
|
||||||
LD B,0
|
|
||||||
ADD A,(HL) ;0 AND CF
|
|
||||||
LD C,A
|
|
||||||
OR A ;CLEAR CF
|
|
||||||
RET Z
|
|
||||||
BLOKRD7 EX DE,HL
|
|
||||||
PUSH BC
|
|
||||||
CALL R_F_FAT
|
|
||||||
POP BC
|
|
||||||
JP C,ECL1 ;R01?
|
|
||||||
EX DE,HL
|
|
||||||
PUSH HL
|
|
||||||
PUSH BC
|
|
||||||
CALL NSECTOR
|
|
||||||
LD DE,(READMEM)
|
|
||||||
LD A,(FatBuffer.DRIVE)
|
|
||||||
LD B,C
|
|
||||||
LD C,5
|
|
||||||
RST #18
|
|
||||||
JP C,BLOKRD0
|
|
||||||
POP BC
|
|
||||||
LD HL,(READMEM)
|
|
||||||
LD DE,(BootSector.B_P_S)
|
|
||||||
BLOKRD8 ADD HL,DE
|
|
||||||
DEC C
|
|
||||||
JR NZ,BLOKRD8
|
|
||||||
LD (READMEM),HL
|
|
||||||
POP DE
|
|
||||||
JR BLOKRD6
|
|
||||||
|
|
||||||
ECL1 AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;--------------------
|
|
||||||
|
|
||||||
BLOKWRC POP BC
|
|
||||||
BLOKWR0 POP BC
|
|
||||||
POP DE
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
;WRITE SECTORS OF FILE
|
|
||||||
;HL:DE - FP (in sectors)
|
|
||||||
; B - Amount sectors
|
|
||||||
|
|
||||||
BLOK_WR PUSH BC
|
|
||||||
LD (READMEM),IX
|
|
||||||
LD A,(BootSector.S_P_C) ;SECTORS PER CLUSTER
|
|
||||||
LD C,A
|
|
||||||
LD B,0
|
|
||||||
CALL DIV32
|
|
||||||
LD B,XH
|
|
||||||
LD C,XL
|
|
||||||
PUSH HL ;RESIDUE
|
|
||||||
LD L,(IY+26) ;START CLUSTER
|
|
||||||
LD H,(IY+27)
|
|
||||||
LD A,H
|
|
||||||
OR L
|
|
||||||
JR NZ,BLOKWR2
|
|
||||||
PUSH BC
|
|
||||||
CALL G_CLUST
|
|
||||||
JR C,BLOKWRC
|
|
||||||
LD (IY+26),L
|
|
||||||
LD (IY+27),H
|
|
||||||
LD DE,(FatBuffer.ENDCLUS)
|
|
||||||
CALL W_T_FAT
|
|
||||||
PUSH HL
|
|
||||||
CALL WR_FAT
|
|
||||||
POP HL
|
|
||||||
POP BC
|
|
||||||
JR BLOKWR2
|
|
||||||
BLOKWR1 PUSH BC
|
|
||||||
CALL R_F_FAT
|
|
||||||
JR NC,BLOKWRB
|
|
||||||
PUSH HL
|
|
||||||
CALL INC_FAT
|
|
||||||
POP HL
|
|
||||||
JR C,BLOKWRC
|
|
||||||
CALL R_F_FAT
|
|
||||||
BLOKWRB POP BC
|
|
||||||
EX DE,HL
|
|
||||||
DEC BC
|
|
||||||
BLOKWR2 LD A,B
|
|
||||||
OR C
|
|
||||||
JR NZ,BLOKWR1
|
|
||||||
POP DE
|
|
||||||
POP BC
|
|
||||||
LD A,(BootSector.S_P_C)
|
|
||||||
SUB E
|
|
||||||
LD C,A
|
|
||||||
CP B
|
|
||||||
JR C,BLOKWR3 ;SIZE > RESIDUE CLUSTER
|
|
||||||
LD C,B ;SIZE < CLUSTER
|
|
||||||
BLOKWR3 LD A,B
|
|
||||||
SUB C
|
|
||||||
LD B,A
|
|
||||||
PUSH HL
|
|
||||||
PUSH BC
|
|
||||||
PUSH DE
|
|
||||||
CALL NSECTOR
|
|
||||||
POP DE
|
|
||||||
ADD IX,DE
|
|
||||||
JR NC,BLOKWR4
|
|
||||||
INC HL
|
|
||||||
BLOKWR4 LD DE,(READMEM)
|
|
||||||
LD A,(FatBuffer.DRIVE)
|
|
||||||
LD B,C
|
|
||||||
LD C,6
|
|
||||||
RST #18
|
|
||||||
JP C,BLOKWR0
|
|
||||||
POP BC
|
|
||||||
LD HL,(READMEM)
|
|
||||||
LD DE,(BootSector.B_P_S)
|
|
||||||
BLOKWR5 ADD HL,DE
|
|
||||||
DEC C
|
|
||||||
JR NZ,BLOKWR5
|
|
||||||
LD (READMEM),HL
|
|
||||||
POP DE
|
|
||||||
LD A,B
|
|
||||||
OR A
|
|
||||||
RET Z
|
|
||||||
BLOKWR6 LD HL,BootSector.S_P_C
|
|
||||||
LD A,B
|
|
||||||
SUB (HL)
|
|
||||||
LD B,A
|
|
||||||
LD C,(HL)
|
|
||||||
JR NC,BLOKWR7
|
|
||||||
LD B,0
|
|
||||||
ADD A,(HL) ;0 AND CF
|
|
||||||
LD C,A
|
|
||||||
OR A ;CLEAR CF
|
|
||||||
RET Z
|
|
||||||
BLOKWR7 EX DE,HL
|
|
||||||
PUSH BC
|
|
||||||
CALL R_F_FAT
|
|
||||||
JR NC,BLOKWR9
|
|
||||||
PUSH HL
|
|
||||||
CALL INC_FAT
|
|
||||||
POP HL
|
|
||||||
JR C,BLOKWRA
|
|
||||||
CALL R_F_FAT
|
|
||||||
BLOKWR9 POP BC
|
|
||||||
EX DE,HL
|
|
||||||
PUSH HL
|
|
||||||
PUSH BC
|
|
||||||
CALL NSECTOR
|
|
||||||
LD DE,(READMEM)
|
|
||||||
LD A,(FatBuffer.DRIVE)
|
|
||||||
LD B,C
|
|
||||||
LD C,6
|
|
||||||
RST #18
|
|
||||||
JP C,BLOKWR0
|
|
||||||
POP BC
|
|
||||||
LD HL,(READMEM)
|
|
||||||
LD DE,(BootSector.B_P_S)
|
|
||||||
BLOKWR8 ADD HL,DE
|
|
||||||
DEC C
|
|
||||||
JR NZ,BLOKWR8
|
|
||||||
LD (READMEM),HL
|
|
||||||
POP DE
|
|
||||||
JR BLOKWR6
|
|
||||||
|
|
||||||
BLOKWRA POP BC
|
|
||||||
LD A,DSS_Error.sys.DISK_FULL
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
TSTSIZE XOR A
|
|
||||||
LD (READCOD),A
|
|
||||||
LD L,(IY+32) ;FP LOW
|
|
||||||
LD H,(IY+33)
|
|
||||||
ADD HL,DE
|
|
||||||
EXX
|
|
||||||
LD DE,0
|
|
||||||
LD L,(IY+34) ;FP HIGH
|
|
||||||
LD H,(IY+35)
|
|
||||||
ADC HL,DE
|
|
||||||
EXX ;HL':HL - NEW FP
|
|
||||||
LD C,(IY+28)
|
|
||||||
LD B,(IY+29) ;SIZE LOW
|
|
||||||
AND A
|
|
||||||
SBC HL,BC
|
|
||||||
EXX
|
|
||||||
LD C,(IY+30) ;SIZE HIGH
|
|
||||||
LD B,(IY+31)
|
|
||||||
SBC HL,BC
|
|
||||||
EXX
|
|
||||||
RET C ;OK READ ALL
|
|
||||||
EX DE,HL
|
|
||||||
SBC HL,DE ;VERY BIG
|
|
||||||
EX DE,HL
|
|
||||||
LD A,#FF
|
|
||||||
LD (READCOD),A
|
|
||||||
RET
|
|
||||||
|
|
||||||
; HL - ADDRESS
|
|
||||||
; DE - SIZE
|
|
||||||
; A - FM
|
|
||||||
|
|
||||||
READ LD (R_POINT),HL
|
|
||||||
LD (S_POINT),HL
|
|
||||||
CALL SET_FM
|
|
||||||
RET C
|
|
||||||
CALL TSTSIZE
|
|
||||||
LD A,D
|
|
||||||
OR E
|
|
||||||
JP Z,NOREAD
|
|
||||||
PUSH DE
|
|
||||||
LD A,(IY+_sFM.DRIVE)
|
|
||||||
CALL OPENDSK
|
|
||||||
JP C,RPERR1
|
|
||||||
LD C,(IY+_sFM.F_POSITION)
|
|
||||||
LD E,(IY+_sFM.F_POSITION+1)
|
|
||||||
LD A,E
|
|
||||||
AND #01
|
|
||||||
LD B,A
|
|
||||||
LD D,(IY+_sFM.F_POSITION+2)
|
|
||||||
LD L,(IY+_sFM.F_POSITION+3)
|
|
||||||
LD H,0
|
|
||||||
OR A
|
|
||||||
RR L
|
|
||||||
RR D
|
|
||||||
RR E ;HL:DE FP (in sectors)
|
|
||||||
; BC FP residue (in bytes)
|
|
||||||
LD A,B
|
|
||||||
OR C
|
|
||||||
JP NZ,ROV1
|
|
||||||
ROV4 POP BC
|
|
||||||
PUSH BC
|
|
||||||
SRL B
|
|
||||||
JR Z,ROV2
|
|
||||||
LD (SECTORH),HL
|
|
||||||
LD (SECTORL),DE
|
|
||||||
LD IX,(R_POINT)
|
|
||||||
CALL BLOK_RD
|
|
||||||
JP C,RPERR1
|
|
||||||
LD DE,(R_POINT)
|
|
||||||
READMEM+1: LD HL,0 // LD HL,(READMEM)
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
LD C,H
|
|
||||||
LD B,0
|
|
||||||
ADD HL,DE
|
|
||||||
LD (R_POINT),HL
|
|
||||||
SRL C
|
|
||||||
SECTORL+1: LD HL,0 // LD HL,(SECTORL)
|
|
||||||
ADD HL,BC
|
|
||||||
EX DE,HL
|
|
||||||
SECTORH+1: LD HL,0 // LD HL,(SECTORH)
|
|
||||||
LD C,B
|
|
||||||
ADC HL,BC
|
|
||||||
ROV2 POP BC
|
|
||||||
LD A,B
|
|
||||||
AND #01
|
|
||||||
LD B,A
|
|
||||||
OR C
|
|
||||||
JP Z,ROV6
|
|
||||||
PUSH BC
|
|
||||||
LD IX,BUFFER+#C000
|
|
||||||
LD B,1
|
|
||||||
IN A,(SLOT3)
|
|
||||||
PUSH AF
|
|
||||||
IN A,(SLOT0)
|
|
||||||
OUT (SLOT3),A
|
|
||||||
CALL BLOK_RD
|
|
||||||
POP BC
|
|
||||||
LD C,SLOT3
|
|
||||||
OUT (C),B
|
|
||||||
JP C,RPERR1
|
|
||||||
LD HL,BUFFER
|
|
||||||
LD DE,(R_POINT)
|
|
||||||
POP BC
|
|
||||||
LDIR
|
|
||||||
LD (R_POINT),DE
|
|
||||||
|
|
||||||
ROV6:
|
|
||||||
S_POINT+1: LD HL,0 // LD HL,(S_POINT)
|
|
||||||
LD DE,(R_POINT)
|
|
||||||
EX DE,HL
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
PUSH HL
|
|
||||||
EX DE,HL
|
|
||||||
LD XH,D
|
|
||||||
LD XL,E
|
|
||||||
LD HL,0
|
|
||||||
CALL MOVE_FP.F_current
|
|
||||||
POP DE
|
|
||||||
NOREAD:
|
|
||||||
READCOD+1: LD A,0 // LD A,(READCOD)
|
|
||||||
OR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
ROV1 PUSH BC
|
|
||||||
PUSH HL
|
|
||||||
PUSH DE
|
|
||||||
LD IX,BUFFER+#C000
|
|
||||||
LD B,1
|
|
||||||
IN A,(SLOT3)
|
|
||||||
PUSH AF
|
|
||||||
IN A,(SLOT0)
|
|
||||||
OUT (SLOT3),A
|
|
||||||
CALL BLOK_RD
|
|
||||||
POP BC
|
|
||||||
LD C,SLOT3
|
|
||||||
OUT (C),B
|
|
||||||
POP HL
|
|
||||||
JP C,RPERR3
|
|
||||||
LD BC,1
|
|
||||||
ADD HL,BC
|
|
||||||
EX DE,HL
|
|
||||||
POP HL
|
|
||||||
LD C,B
|
|
||||||
ADC HL,BC
|
|
||||||
EXX
|
|
||||||
POP DE
|
|
||||||
LD HL,512
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
LD B,H
|
|
||||||
LD C,L
|
|
||||||
POP HL
|
|
||||||
AND A
|
|
||||||
SBC HL,BC
|
|
||||||
JR NC,ROV3
|
|
||||||
ADD HL,BC
|
|
||||||
LD B,H
|
|
||||||
LD C,L
|
|
||||||
LD HL,0
|
|
||||||
ROV3 PUSH HL
|
|
||||||
LD HL,BUFFER
|
|
||||||
ADD HL,DE
|
|
||||||
LD DE,(R_POINT)
|
|
||||||
LDIR
|
|
||||||
LD (R_POINT),DE
|
|
||||||
EXX
|
|
||||||
JP ROV4
|
|
||||||
|
|
||||||
RPERR3 POP HL
|
|
||||||
RPERR2 POP HL
|
|
||||||
RPERR1 POP BC
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
PWERR3 POP HL
|
|
||||||
PWERR2 POP HL
|
|
||||||
PWERR1 POP BC
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
RD_ONLY POP DE
|
|
||||||
LD A,DSS_Error.sys.READONLY
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
; HL - ADDRESS
|
|
||||||
; DE - SIZE
|
|
||||||
; A - FM
|
|
||||||
|
|
||||||
WRITE LD (R_POINT),HL
|
|
||||||
LD (S_POINT),HL
|
|
||||||
PUSH DE
|
|
||||||
CALL SET_FM
|
|
||||||
JP C,PWERR1
|
|
||||||
LD A,(IY+_sFM.ACCESS_MODE)
|
|
||||||
AND #01
|
|
||||||
JR NZ,RD_ONLY
|
|
||||||
SET 7,(IY+_sFM.ACCESS_MODE)
|
|
||||||
SET 5,(IY+_sFM.ATTRIBUT)
|
|
||||||
LD A,(IY+_sFM.DRIVE)
|
|
||||||
CALL OPENDSK
|
|
||||||
JP C,PWERR1
|
|
||||||
LD C,(IY+32)
|
|
||||||
LD A,(IY+33)
|
|
||||||
LD E,A
|
|
||||||
AND #01
|
|
||||||
LD B,A
|
|
||||||
LD D,(IY+34)
|
|
||||||
LD L,(IY+35)
|
|
||||||
LD H,0
|
|
||||||
OR A
|
|
||||||
RR L
|
|
||||||
RR D
|
|
||||||
RR E ;HL:DE FP (in sectors)
|
|
||||||
; BC FP residue (in bytes)
|
|
||||||
LD A,B
|
|
||||||
OR C
|
|
||||||
JP NZ,WOV1
|
|
||||||
WOV4 POP BC
|
|
||||||
PUSH BC
|
|
||||||
SRL B
|
|
||||||
JR Z,WOV2
|
|
||||||
PUSH HL
|
|
||||||
PUSH DE
|
|
||||||
PUSH BC
|
|
||||||
R_POINT+2: LD IX,0 // LD IX,(R_POINT)
|
|
||||||
|
|
||||||
CALL BLOK_WR
|
|
||||||
POP BC
|
|
||||||
JP C,PWERR3
|
|
||||||
LD C,B
|
|
||||||
LD HL,(R_POINT)
|
|
||||||
LD DE,#0200
|
|
||||||
WOV5 ADD HL,DE
|
|
||||||
DJNZ WOV5
|
|
||||||
LD (R_POINT),HL
|
|
||||||
LD B,0
|
|
||||||
POP HL
|
|
||||||
ADD HL,BC
|
|
||||||
EX DE,HL
|
|
||||||
POP HL
|
|
||||||
LD C,B
|
|
||||||
ADC HL,BC
|
|
||||||
WOV2 POP BC
|
|
||||||
LD A,B
|
|
||||||
AND #01
|
|
||||||
LD B,A
|
|
||||||
OR C
|
|
||||||
JP Z,WOV6
|
|
||||||
PUSH HL
|
|
||||||
PUSH DE
|
|
||||||
PUSH BC
|
|
||||||
LD IX,BUFFER+#C000
|
|
||||||
LD B,1
|
|
||||||
IN A,(SLOT3)
|
|
||||||
PUSH AF
|
|
||||||
IN A,(SLOT0)
|
|
||||||
OUT (SLOT3),A
|
|
||||||
CALL BLOK_RD
|
|
||||||
POP BC
|
|
||||||
LD C,SLOT3
|
|
||||||
OUT (C),B
|
|
||||||
LD DE,BUFFER
|
|
||||||
LD HL,(R_POINT)
|
|
||||||
POP BC
|
|
||||||
JP C,PWERR2
|
|
||||||
LDIR
|
|
||||||
LD (R_POINT),HL
|
|
||||||
POP DE
|
|
||||||
POP HL
|
|
||||||
LD IX,BUFFER+#C000
|
|
||||||
LD B,1
|
|
||||||
IN A,(SLOT3)
|
|
||||||
PUSH AF
|
|
||||||
IN A,(SLOT0)
|
|
||||||
OUT (SLOT3),A
|
|
||||||
CALL BLOK_WR
|
|
||||||
POP BC
|
|
||||||
LD C,SLOT3
|
|
||||||
OUT (C),B
|
|
||||||
RET C
|
|
||||||
WOV6 LD DE,(S_POINT)
|
|
||||||
LD HL,(R_POINT)
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
PUSH HL
|
|
||||||
EX DE,HL
|
|
||||||
LD XH,D
|
|
||||||
LD XL,E
|
|
||||||
LD HL,0
|
|
||||||
CALL MOVE_FP.F_current
|
|
||||||
CALL MOVE_CP
|
|
||||||
POP DE
|
|
||||||
RET NC
|
|
||||||
LD L,(IY+32)
|
|
||||||
LD H,(IY+33)
|
|
||||||
LD C,(IY+34)
|
|
||||||
LD B,(IY+35)
|
|
||||||
LD (IY+28),L
|
|
||||||
LD (IY+29),H
|
|
||||||
LD (IY+30),C
|
|
||||||
LD (IY+31),B
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
WOV1 PUSH BC
|
|
||||||
PUSH HL
|
|
||||||
PUSH DE
|
|
||||||
LD IX,BUFFER+#C000
|
|
||||||
LD B,1
|
|
||||||
IN A,(SLOT3)
|
|
||||||
PUSH AF
|
|
||||||
IN A,(SLOT0)
|
|
||||||
OUT (SLOT3),A
|
|
||||||
CALL BLOK_RD
|
|
||||||
POP BC
|
|
||||||
LD C,SLOT3
|
|
||||||
OUT (C),B
|
|
||||||
POP DE
|
|
||||||
POP HL
|
|
||||||
EXX
|
|
||||||
POP DE
|
|
||||||
JP C,PWERR1
|
|
||||||
LD HL,512
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
LD B,H
|
|
||||||
LD C,L
|
|
||||||
POP HL
|
|
||||||
AND A
|
|
||||||
SBC HL,BC
|
|
||||||
JR NC,WOV3
|
|
||||||
ADD HL,BC
|
|
||||||
LD B,H
|
|
||||||
LD C,L
|
|
||||||
LD HL,0
|
|
||||||
WOV3 PUSH HL
|
|
||||||
LD HL,BUFFER
|
|
||||||
ADD HL,DE
|
|
||||||
LD DE,(R_POINT)
|
|
||||||
EX DE,HL
|
|
||||||
LDIR
|
|
||||||
LD (R_POINT),HL
|
|
||||||
EXX
|
|
||||||
PUSH HL
|
|
||||||
PUSH DE
|
|
||||||
LD IX,BUFFER+#C000
|
|
||||||
LD B,1
|
|
||||||
IN A,(SLOT3)
|
|
||||||
PUSH AF
|
|
||||||
IN A,(SLOT0)
|
|
||||||
OUT (SLOT3),A
|
|
||||||
CALL BLOK_WR
|
|
||||||
POP BC
|
|
||||||
LD C,SLOT3
|
|
||||||
OUT (C),B
|
|
||||||
POP HL
|
|
||||||
JP C,PWERR2
|
|
||||||
LD BC,1
|
|
||||||
ADD HL,BC
|
|
||||||
EX DE,HL
|
|
||||||
POP HL
|
|
||||||
LD C,B
|
|
||||||
ADC HL,BC
|
|
||||||
JP WOV4
|
|
||||||
|
|
||||||
|
|
||||||
; HL - CLUSTER
|
|
||||||
; HL:IX - SECTOR
|
|
||||||
NSECTOR DEC HL
|
|
||||||
DEC HL
|
|
||||||
EX DE,HL
|
|
||||||
LD A,(BootSector.S_P_C)
|
|
||||||
LD B,A
|
|
||||||
LD HL,0
|
|
||||||
LD IX,0
|
|
||||||
ADD_DE1 ADD IX,DE
|
|
||||||
JR NC,ADD_DE2
|
|
||||||
INC HL
|
|
||||||
ADD_DE2 DJNZ ADD_DE1
|
|
||||||
LD DE,(FatBuffer.DAT_FRM)
|
|
||||||
ADD IX,DE
|
|
||||||
LD DE,#0000
|
|
||||||
ADC HL,DE
|
|
||||||
RET
|
|
||||||
|
|
||||||
; HL:DE / BC => DE:IX HL-OSTATOK
|
|
||||||
DIV32 LD XH,D
|
|
||||||
LD XL,E
|
|
||||||
EX DE,HL
|
|
||||||
LD HL,0
|
|
||||||
LD A,#20
|
|
||||||
DIV001 ADD IX,IX
|
|
||||||
EX DE,HL
|
|
||||||
ADC HL,HL
|
|
||||||
EX DE,HL
|
|
||||||
ADC HL,HL
|
|
||||||
SBC HL,BC
|
|
||||||
JR NC,DIV002
|
|
||||||
ADD HL,BC
|
|
||||||
DEC A
|
|
||||||
JR NZ,DIV001
|
|
||||||
RET
|
|
||||||
DIV002 INC IX
|
|
||||||
DEC A
|
|
||||||
JR NZ,DIV001
|
|
||||||
RET
|
|
||||||
|
|
||||||
//READCOD DB #00
|
|
||||||
|
|
||||||
//READMEM DW #0000
|
|
||||||
|
|
||||||
//SECTORH DW 0
|
|
||||||
//SECTORL DW 0
|
|
||||||
|
|
||||||
//R_POINT DW 0
|
|
||||||
//S_POINT DW 0
|
|
||||||
|
|
||||||
;//MODULE: DOS_FM
|
|
||||||
;[END]
|
|
||||||
|
|
||||||
615
DSS/DOS_Proc.asm
Normal file
615
DSS/DOS_Proc.asm
Normal file
@ -0,0 +1,615 @@
|
|||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: DOS_X
|
||||||
|
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||||||
|
;//UPDATE: 24-10-1999 DNS Restore module
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;R13 06-04-2023 BAO ”ãªæ¨î SETBOOT ¬®¦® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४â®)
|
||||||
|
;R12 03-04-2023 BAO „®¡ ¢«¥ äãªæ¨ï à¥áª ¤à ©¢®¢ LD C,8 : RST #10
|
||||||
|
;R11 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR
|
||||||
|
;R10 03-04-2003 DNS IMPROVED FN. VERSION
|
||||||
|
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
|
||||||
|
;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION
|
||||||
|
;R07 17-12-1999 DNS BUG FIX SIGNATURE #55AA AT 510 OFFSET
|
||||||
|
;R06 21-11-1999 DNS FN. DISKINF SUPPORT ALL DISKS
|
||||||
|
;R05 21-11-1999 DNS BUG FIX SIGNATURE #55AA IN BOOT SECTOR
|
||||||
|
;R04 08-11-1999 DNS KILL OLD FUNCTIONS
|
||||||
|
;R03 23-11-1998 DNS BUG FIX (IX+28) -> (IY+28)
|
||||||
|
;R02 21-11-1998 DNS CHANGE FUNCTION "MAKE FAT"
|
||||||
|
;R01 20-11-1998 DNS REPAIR FUNCTION "SAVE"
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; HL - 11 bytes filename "FILENAMEEXT"
|
||||||
|
; DE - DOS filename "FILENAME.EXT",0
|
||||||
|
; GetName:
|
||||||
|
; LD BC,#08FF
|
||||||
|
; .GETN1: LD A,(HL)
|
||||||
|
; CP " "
|
||||||
|
; JR NZ,.GETN3
|
||||||
|
; .GETN2: INC HL
|
||||||
|
; DJNZ .GETN2
|
||||||
|
; JR .GETN4
|
||||||
|
; .GETN3: LDI
|
||||||
|
; DJNZ .GETN1
|
||||||
|
; ;
|
||||||
|
; .GETN4: LD A,(HL)
|
||||||
|
; CP " "
|
||||||
|
; LD A,"."
|
||||||
|
; JR NZ,.GETN5
|
||||||
|
; LD A,#00
|
||||||
|
; .GETN5: LD (DE),A
|
||||||
|
; INC DE
|
||||||
|
; RET Z
|
||||||
|
; LD B,#03
|
||||||
|
; .GETN6: LD A,(HL)
|
||||||
|
; CP " "
|
||||||
|
; RET Z
|
||||||
|
; LDI
|
||||||
|
; XOR A
|
||||||
|
; LD (DE),A
|
||||||
|
; DJNZ .GETN6
|
||||||
|
; RET
|
||||||
|
;---------------;---------------;---------------
|
||||||
|
;!TODO LFN
|
||||||
|
GetName: LD BC,#08FF ;!HARDCODE ¤«¨ ¨¬¥¨ + áçñâ稪
|
||||||
|
LD A,' '
|
||||||
|
.loop: CP (HL)
|
||||||
|
JR Z,.skip
|
||||||
|
LDI
|
||||||
|
DJNZ .loop
|
||||||
|
JP .extension
|
||||||
|
;
|
||||||
|
.skip: LD C,B
|
||||||
|
LD B,0
|
||||||
|
; CF=0
|
||||||
|
ADC HL,BC
|
||||||
|
.extension: CP (HL)
|
||||||
|
LD A,"."
|
||||||
|
JR NZ,.copy_ext
|
||||||
|
XOR A
|
||||||
|
.copy_ext: LD (DE),A
|
||||||
|
INC DE
|
||||||
|
RET Z ;no copy extension
|
||||||
|
; copy extension
|
||||||
|
LD BC,#03FF ;!HARDCODE ¤«¨ à áè¨à¥¨ï + áçñâ稪
|
||||||
|
LD A,' '
|
||||||
|
.loop2: CP (HL)
|
||||||
|
JR Z,.exit
|
||||||
|
LDI
|
||||||
|
DJNZ .loop2
|
||||||
|
.exit: XOR A
|
||||||
|
LD (DE),A
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; old GETWORD
|
||||||
|
; ’¥áâ ¤®¯ãá⨬®¥ ¨¬ï ¨ áâநâìáï ¤¨áª.
|
||||||
|
; ¢å®¤: hl=áâப ¨¬¥¨
|
||||||
|
; ¢ë室: (TMPNAME)
|
||||||
|
SetPath_GetName:
|
||||||
|
; !TEST
|
||||||
|
INC HL
|
||||||
|
LD A,(HL)
|
||||||
|
DEC HL
|
||||||
|
CP ':'
|
||||||
|
JR NZ,.dir_loop
|
||||||
|
|
||||||
|
LD A,(HL)
|
||||||
|
CP 'a'
|
||||||
|
JR C,.next
|
||||||
|
CP 'z'+1
|
||||||
|
JR NC,.next
|
||||||
|
SUB %0010'0000
|
||||||
|
.next: SUB 'A'
|
||||||
|
INC HL
|
||||||
|
INC HL
|
||||||
|
PUSH HL
|
||||||
|
CALL CHDISK
|
||||||
|
;CALL OPENDSK
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JR Z,.done
|
||||||
|
CP ' ' ;
|
||||||
|
JR Z,.done
|
||||||
|
CP '\' ;
|
||||||
|
SCF
|
||||||
|
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||||||
|
RET NZ
|
||||||
|
INC HL
|
||||||
|
;
|
||||||
|
.dir_loop: LD DE,TMPNAME
|
||||||
|
LD BC,#0DFF
|
||||||
|
.loop: LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CP '\' ;
|
||||||
|
JR Z,.DIR_NAME
|
||||||
|
; AND A
|
||||||
|
; JR Z,.DIR_NAME
|
||||||
|
;CP ':'
|
||||||
|
;JR Z,.DRV_NAME
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
CP ' '+1
|
||||||
|
CCF
|
||||||
|
RET NC
|
||||||
|
DJNZ .loop
|
||||||
|
LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.done: XOR A
|
||||||
|
LD (TMPNAME),A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.DIR_NAME: XOR A
|
||||||
|
LD (DE),A
|
||||||
|
PUSH HL
|
||||||
|
LD HL,TMPNAME
|
||||||
|
CALL OPENDIR
|
||||||
|
POP HL
|
||||||
|
RET C
|
||||||
|
JR .dir_loop
|
||||||
|
; .DRV_NAME:
|
||||||
|
; LD A,(TMPNAME)
|
||||||
|
; CP 'a'
|
||||||
|
; JR C,.next
|
||||||
|
; CP '{'
|
||||||
|
; JR NC,.next
|
||||||
|
; SUB #20
|
||||||
|
; .next: SUB 'A'
|
||||||
|
; PUSH HL
|
||||||
|
; ;!TEST CHDISK OPENDSK
|
||||||
|
; ;CALL OPENDSK
|
||||||
|
; CALL CHDISK
|
||||||
|
; ;
|
||||||
|
; POP HL
|
||||||
|
; RET C
|
||||||
|
; JR .loop
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
; <20>ãä¥à ¨¬¥¨ 8.3 ä®à¬ â
|
||||||
|
TMPNAME: DZ ' ' ; 12 ¯à®¡¥«®¢ ¨ 0 ;!FIXIT ª ¡ãä¥à ¬
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; IN: A - drive number
|
||||||
|
OPENDSK: ;!TEST DRV.Open ®¡å®¤ R10
|
||||||
|
LD B,A
|
||||||
|
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
|
||||||
|
CP B
|
||||||
|
JR NZ,.open
|
||||||
|
PUSH BC
|
||||||
|
LD C,Dss.DRV.MediaCheck
|
||||||
|
RST ToDSS.DRV
|
||||||
|
POP BC
|
||||||
|
JR Z,.exit
|
||||||
|
JR C,.error
|
||||||
|
JR .skip_open ;!FIXIT ª®£¤ DRV.MediaCheck ¨ DRV.Open ¡ã¤ã⠮⫨ç âìáï
|
||||||
|
;
|
||||||
|
.open: LD A,B
|
||||||
|
;
|
||||||
|
.force: PUSH AF
|
||||||
|
LD C,Dss.DRV.Open
|
||||||
|
RST ToDSS.DRV
|
||||||
|
POP BC
|
||||||
|
JP C,.error
|
||||||
|
;[x] 29/02/2024 fix "open drive error"
|
||||||
|
.skip_open: LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
|
||||||
|
LD D,A
|
||||||
|
PUSH DE
|
||||||
|
;
|
||||||
|
LD A,B
|
||||||
|
LD (CORE_BUFFERS.FS_Buffer.DRIVE),A
|
||||||
|
;
|
||||||
|
CALL RD_BPB
|
||||||
|
;[x] 29/02/2024 fix "open drive error"
|
||||||
|
POP DE
|
||||||
|
JR C,.error_bpb
|
||||||
|
; RET C
|
||||||
|
;
|
||||||
|
.exit: LD A,(LDRIVE)
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
; !FIXIT ª®áâë«ì ¤«ï Flex Navigator ; [ ] media change
|
||||||
|
.error: CALL .error_convert
|
||||||
|
LD A,C
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.error_convert: CP DSS_Error.drv.INVALID_DRIVE
|
||||||
|
LD C,DSS_Error.sys.INVALID_DRIVE
|
||||||
|
RET Z
|
||||||
|
;
|
||||||
|
CP DSS_Error.drv.ATAPI.UnitAttention
|
||||||
|
LD C,DSS_Error.sys.MEDIA_CHANGED
|
||||||
|
RET Z
|
||||||
|
;
|
||||||
|
CP DSS_Error.drv.UNKNOWN_FORMAT
|
||||||
|
LD C,DSS_Error.sys.UNKNOWN_FORMAT
|
||||||
|
RET Z
|
||||||
|
;
|
||||||
|
LD C,DSS_Error.sys.NOT_READY
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;[x] 29/02/2024 fix "open drive error"; 20/06/2024 fixed
|
||||||
|
.error_bpb: PUSH AF ; á®åà 塞 ®¬¥à ®è¨¡ª¨
|
||||||
|
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
|
||||||
|
CP D
|
||||||
|
JR Z,.next_check
|
||||||
|
;
|
||||||
|
LD A,D
|
||||||
|
CP #FF
|
||||||
|
SCF
|
||||||
|
JR Z,.set_panic
|
||||||
|
;
|
||||||
|
LD (CORE_BUFFERS.FS_Buffer.DRIVE),A
|
||||||
|
CALL OPENDSK.force
|
||||||
|
JR NC,.err_exit
|
||||||
|
;
|
||||||
|
LD A,(BOOTDSK.NUM)
|
||||||
|
LD (CORE_BUFFERS.FS_Buffer.DRIVE),A
|
||||||
|
CALL OPENDSK.force
|
||||||
|
;
|
||||||
|
.err_exit: LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
|
||||||
|
ADD 'A'
|
||||||
|
LD (CORE_BUFFERS.CurrentPath),A
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.next_check: LD A,(BOOTDSK.NUM)
|
||||||
|
CP D
|
||||||
|
SCF
|
||||||
|
.reBPB: CALL NZ,OPENDSK.force
|
||||||
|
; ¯à®¢¥àª ®è¨¡ªã
|
||||||
|
.set_panic: LD HL,.NOT_READY
|
||||||
|
LD E, +(80-.NOT_READY.size)/2 ; coord X
|
||||||
|
LD BC,.NOT_READY.size
|
||||||
|
JR NC,.err_exit
|
||||||
|
JP KERNEL_PANIC
|
||||||
|
;
|
||||||
|
.errorCycle: DB 0
|
||||||
|
.NOT_READY: DZ "Boot drive error..."
|
||||||
|
.NOT_READY.size EQU $-.NOT_READY
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; <20>८¡à §®¢ âì ¨¬ï 8.3 -> 11 ä®à¬ â
|
||||||
|
; ¢å®¤: hl = 8.3 ¨¬ï
|
||||||
|
; de = ¡ãä¥à ¨¬¥¨ 11 ᨬ¢. ä®à¬ â
|
||||||
|
; ¯à¨ ®è¨¡ª¥ CF - ¥¤®¯. ¨¬ï
|
||||||
|
;
|
||||||
|
; HL - MASK "file*.t??"
|
||||||
|
; DE - 11 bytes filename
|
||||||
|
; RET: C=2 FILE WITHOUT EXTENTION
|
||||||
|
; C=1 FILE WITH EXTENTION
|
||||||
|
MASK: LD HL,TMPNAME
|
||||||
|
.name: LD DE,MASKARE
|
||||||
|
.custom: PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
LD H,D
|
||||||
|
LD L,E
|
||||||
|
INC DE
|
||||||
|
LD (HL),' '
|
||||||
|
LD BC,10 ;!HARDCODE = size (FileName + Extension - 1)
|
||||||
|
LDIR
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
LD A,(HL)
|
||||||
|
CP '.' ;R007
|
||||||
|
SCF ;R007
|
||||||
|
JR Z,.MASKB ;R007
|
||||||
|
CP ' '+1
|
||||||
|
.MASKB: LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
RET C
|
||||||
|
LD BC,#0902 ; B - áç¥â稪
|
||||||
|
.MASK1: LD A,(HL)
|
||||||
|
CP ' '+1
|
||||||
|
CCF
|
||||||
|
RET NC
|
||||||
|
;
|
||||||
|
CP '*'
|
||||||
|
JR Z,.MASK3
|
||||||
|
CP '.'
|
||||||
|
JR Z,.MASK5
|
||||||
|
CP '"'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '+'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP ','
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '/'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP ':'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP ';'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '<'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '='
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '>'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '['
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '\'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP ']'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CP '|'
|
||||||
|
JR Z,.MASK_ERR
|
||||||
|
CALL UPPER ; a..z -> A..Z
|
||||||
|
.MASK2: LD (DE),A
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DJNZ .MASK1
|
||||||
|
.MASK_ERR:
|
||||||
|
LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.MASK3: LD A,'?'
|
||||||
|
INC HL
|
||||||
|
DJNZ .MASK6
|
||||||
|
JR .MASK_ERR
|
||||||
|
;
|
||||||
|
.MASK6: LD (DE),A
|
||||||
|
INC DE
|
||||||
|
DJNZ .MASK6
|
||||||
|
LD B,1
|
||||||
|
JR .MASK1
|
||||||
|
;
|
||||||
|
.MASK5: LD A,' '
|
||||||
|
INC HL
|
||||||
|
DJNZ .MASK4
|
||||||
|
LD B,4
|
||||||
|
DEC C
|
||||||
|
JR NZ,.MASK1
|
||||||
|
JR .MASK_ERR
|
||||||
|
;
|
||||||
|
.MASK4: LD (DE),A
|
||||||
|
INC DE
|
||||||
|
DJNZ .MASK4
|
||||||
|
LD B,4
|
||||||
|
DEC C
|
||||||
|
JR NZ,.MASK1
|
||||||
|
JR .MASK_ERR
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
DIR_PATH_CHANGE:
|
||||||
|
.FullCurrent: LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
|
||||||
|
ADD 'A'
|
||||||
|
LD (CORE_BUFFERS.CurrentPath),A
|
||||||
|
;
|
||||||
|
.Current: LD HL,CORE_BUFFERS.CurrentDirectory
|
||||||
|
JP CURRDIR
|
||||||
|
;
|
||||||
|
.FullWork: LD A,(CORE_BUFFERS.CurrentPath)
|
||||||
|
SUB 'A'
|
||||||
|
LD (CORE_BUFFERS.FS_Buffer.DRIVE),A
|
||||||
|
;
|
||||||
|
.Work: LD HL,CORE_BUFFERS.WorkDirectory
|
||||||
|
JP CURRDIR_FN
|
||||||
|
;
|
||||||
|
DIR_PATH_CHECK: LD A,(HL)
|
||||||
|
CP '\'
|
||||||
|
JR NZ,.notRootDir
|
||||||
|
;
|
||||||
|
CALL .checkDrive
|
||||||
|
RET Z
|
||||||
|
LD A,(CORE_BUFFERS.CurrentPath)
|
||||||
|
SUB 'A'
|
||||||
|
JP OPENDSK
|
||||||
|
;
|
||||||
|
.notRootDir: INC HL
|
||||||
|
LD A,(HL)
|
||||||
|
CP ':'
|
||||||
|
RET Z
|
||||||
|
;
|
||||||
|
.forceCheck: ;LD HL,CurrentDirectory+1
|
||||||
|
LD BC,CORE_BUFFERS.CurrentDirectory.DEPTH-1
|
||||||
|
CALL .checkDrive
|
||||||
|
JR Z,.checkDir
|
||||||
|
;
|
||||||
|
LD HL,CORE_BUFFERS.CurrentPath
|
||||||
|
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
|
||||||
|
ADD 'A'
|
||||||
|
CP (HL)
|
||||||
|
JR NZ,.gotoPath
|
||||||
|
;
|
||||||
|
.checkDir: LD HL,CORE_BUFFERS.CurrentDirectory+1
|
||||||
|
LD DE,CORE_BUFFERS.WorkDirectory+1
|
||||||
|
; áçñâ稪
|
||||||
|
LD A,B
|
||||||
|
LD B,C
|
||||||
|
EX AF,AF'
|
||||||
|
;
|
||||||
|
.loop: LD A,(DE)
|
||||||
|
AND A
|
||||||
|
JR Z,.end
|
||||||
|
CP (HL)
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
JR NZ,.gotoPath
|
||||||
|
DJNZ .loop
|
||||||
|
EX AF,AF'
|
||||||
|
SUB 1
|
||||||
|
RET C
|
||||||
|
EX AF,AF'
|
||||||
|
DJNZ .loop
|
||||||
|
;
|
||||||
|
.gotoPath: LD C,B
|
||||||
|
EX AF,AF'
|
||||||
|
LD B,A
|
||||||
|
CALL FINDDIR.CHECK_SLASH
|
||||||
|
LD A,DSS_Error.sys.PATH_NOT_FOUND
|
||||||
|
RET C
|
||||||
|
LD HL,CORE_BUFFERS.CurrentPath
|
||||||
|
JP SetPath_GetName
|
||||||
|
;
|
||||||
|
.end: CP (HL)
|
||||||
|
RET Z
|
||||||
|
JR .gotoPath
|
||||||
|
;
|
||||||
|
.checkDrive: LD HL,CORE_BUFFERS.CurrentPath
|
||||||
|
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
|
||||||
|
ADD 'A'
|
||||||
|
CP (HL)
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
CHECK_NAME:
|
||||||
|
LD HL,MASKARE
|
||||||
|
.custom: LD BC,11 ;!HARDCODE
|
||||||
|
LD A,"?"
|
||||||
|
CPIR
|
||||||
|
LD A,DSS_Error.sys.INVALID_NAME
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;FMS DB FMCOUNT
|
||||||
|
|
||||||
|
;ACCESS MODE:
|
||||||
|
; 00 - READ/WRITE
|
||||||
|
; 01 - READ
|
||||||
|
; 02 - WRITE
|
||||||
|
;FM_BUF:
|
||||||
|
;File Manipulator (FM)
|
||||||
|
; BYTE '. ' ;+00 NAME
|
||||||
|
; BYTE ' ' ;+08 EXT
|
||||||
|
; BYTE #10 ;+11 ATTRIBUT
|
||||||
|
; BYTE 0 ;+12 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï ç⥨ï
|
||||||
|
; BYTE 0 ;+13 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï § ¯¨á¨
|
||||||
|
; BLOCK 8,0 ;+14 RESERVED
|
||||||
|
; WORD #0000 ;+22 TIME
|
||||||
|
; WORD #0000 ;+24 DATE
|
||||||
|
; WORD #0000 ;+26 START CLUSTER
|
||||||
|
; DWORD #0000 ;+28 SIZE FILE
|
||||||
|
; DWORD #0000 ;+32 FILE POSITION (FP)
|
||||||
|
; WORD #0000 ;+36 DIRECTORY CLUSTER
|
||||||
|
; WORD #0000 ;+38 HANDLE NUMBER
|
||||||
|
; BYTE #00 ;+40 DRIVE OR CURRENT
|
||||||
|
; BYTE #00 ;+41 ACCESS MODE
|
||||||
|
; BYTE #00 ;+42 TASK
|
||||||
|
; BYTE #00 ;+43 EMPTY
|
||||||
|
/*
|
||||||
|
;!TEST
|
||||||
|
FM_BUF: _sFM
|
||||||
|
.Size EQU _sFM
|
||||||
|
BLOCK (FMCOUNT-1)*FM_BUF.Size, 0
|
||||||
|
*/
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
; ¢ë室¥ ¡¥§ ®è¨¡®ª IY 㪠§ë¢ ¥â ä ©«®¢ë© ¬ ¨¯ã«ïâ®à
|
||||||
|
FM_FIND: CP FMCOUNT+1
|
||||||
|
JR NC,.error
|
||||||
|
;
|
||||||
|
PUSH DE
|
||||||
|
LD IY,CORE_BUFFERS.FM_BUF
|
||||||
|
LD DE,CORE_BUFFERS.FM_BUF.Size
|
||||||
|
AND A
|
||||||
|
JR Z,.endLoop
|
||||||
|
.loop: ADD IY,DE
|
||||||
|
DEC A
|
||||||
|
JR NZ,.loop
|
||||||
|
.endLoop: POP DE
|
||||||
|
; A=0
|
||||||
|
OR (IY) ;+00 NAME
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.error: XOR A
|
||||||
|
LD A,DSS_Error.sys.INVALID_HANDLE
|
||||||
|
RET
|
||||||
|
|
||||||
|
SET_FM: CALL FM_FIND
|
||||||
|
; error
|
||||||
|
;LD A,DSS_Error.sys.INVALID_HANDLE
|
||||||
|
; CF = 1
|
||||||
|
SCF
|
||||||
|
RET Z
|
||||||
|
; no error
|
||||||
|
XOR A ;LD A,DSS_Error.sys.NO_ERROR
|
||||||
|
; CF = 0
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
RES_FM: CALL FM_FIND
|
||||||
|
; error
|
||||||
|
; LD A,DSS_Error.sys.INVALID_HANDLE
|
||||||
|
SCF
|
||||||
|
RET Z
|
||||||
|
; no error
|
||||||
|
XOR A
|
||||||
|
LD (IY + _sFM.FS_REC.NAME),A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;!TODO CHECK LOCKING
|
||||||
|
GET_FM: LD B,FMCOUNT
|
||||||
|
LD C,#FF
|
||||||
|
LD IY,CORE_BUFFERS.FM_BUF - CORE_BUFFERS.FM_BUF.Size
|
||||||
|
LD DE,CORE_BUFFERS.FM_BUF.Size
|
||||||
|
.loop: ADD IY,DE
|
||||||
|
INC C
|
||||||
|
LD A,(IY + _sFM.FS_REC.NAME)
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
DJNZ .loop
|
||||||
|
LD A,DSS_Error.sys.NO_HANDLES
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
;FP COMPARE
|
||||||
|
; CY - FILE POINTER > SIZE
|
||||||
|
; NC - FILE POINTER < SIZE
|
||||||
|
MOVE_CP:
|
||||||
|
LD L,(IY + _sFM.FS_REC.F_SIZE)
|
||||||
|
LD H,(IY + _sFM.FS_REC.F_SIZE+1)
|
||||||
|
LD E,(IY + _sFM.F_POSITION)
|
||||||
|
LD D,(IY + _sFM.F_POSITION+1)
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
LD L,(IY + _sFM.FS_REC.F_SIZE+2)
|
||||||
|
LD H,(IY + _sFM.FS_REC.F_SIZE+3)
|
||||||
|
LD E,(IY + _sFM.F_POSITION+2)
|
||||||
|
LD D,(IY + _sFM.F_POSITION+3)
|
||||||
|
SBC HL,DE
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; [x] fat32 ; [ ] CDFS
|
||||||
|
; !TODO ¯¥à¥¥á⨠¯®â®¬ ¢ FS module
|
||||||
|
RD_BPB: CALL READ_BPB
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
LD DE,#AA55 ; ᨣ âãà ;R05
|
||||||
|
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07
|
||||||
|
;
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
JP Z,FAT_BPB
|
||||||
|
;
|
||||||
|
; CDFS check
|
||||||
|
;
|
||||||
|
;
|
||||||
|
.UnknownBPB: LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
547
DSS/DOS_X.ASM
547
DSS/DOS_X.ASM
@ -1,547 +0,0 @@
|
|||||||
|
|
||||||
;[BEGIN]
|
|
||||||
;//MODULE: DOS_X
|
|
||||||
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
|
||||||
;//UPDATE: 24-10-1999 DNS Restore module
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;Rev Date Name Description
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;R13 06-04-2023 BAO ”ãªæ¨î SETBOOT ¬®¦® ¢ë§¢ âì ⮫쪮 à § (¥á«¨ § ¢¥àè¨âáï ª®à४â®)
|
|
||||||
;R12 03-04-2023 BAO „®¡ ¢«¥ äãªæ¨ï à¥áª ¤à ©¢®¢ LD C,8 : RST #10
|
|
||||||
;R11 15-04-2003 DNS ROUTINE FOR STORE CURDISK AND CURDIR ;!FIXIT à ¡®â ¥â ªà¨¢®
|
|
||||||
;R10 03-04-2003 DNS IMPROVED FN. VERSION
|
|
||||||
;R09 27-03-2003 DNS PASTED SET/GET BOOT FN.
|
|
||||||
;R08 14-11-2002 DNS IMPROVE BPB-FUNCTION
|
|
||||||
;R07 17-12-1999 DNS BUG FIX SIGNATURE #55AA AT 510 OFFSET
|
|
||||||
;R06 21-11-1999 DNS FN. DISKINF SUPPORT ALL DISKS
|
|
||||||
;R05 21-11-1999 DNS BUG FIX SIGNATURE #55AA IN BOOT SECTOR
|
|
||||||
;R04 08-11-1999 DNS KILL OLD FUNCTIONS
|
|
||||||
;R03 23-11-1998 DNS BUG FIX (IX+28) -> (IY+28)
|
|
||||||
;R02 21-11-1998 DNS CHANGE FUNCTION "MAKE FAT"
|
|
||||||
;R01 20-11-1998 DNS REPAIR FUNCTION "SAVE"
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
|
|
||||||
; RGADR EQU #89 ;VIDEO CONTROL REGISTER
|
|
||||||
; SLOT0 EQU #82 ;WIN #0000-#3FFF
|
|
||||||
; SLOT1 EQU #A2 ;WIN #4000-#7FFF
|
|
||||||
; SLOT2 EQU #C2 ;WIN #8000-#BFFF
|
|
||||||
; SLOT3 EQU #E2 ;WIN #C000-#FFFF
|
|
||||||
|
|
||||||
; SYSPAGE EQU #FE
|
|
||||||
|
|
||||||
;Commands for restart #10
|
|
||||||
//NOPS: LD A,DSS_Error.sys.INVALID_FUNCTION
|
|
||||||
// SCF
|
|
||||||
// RET
|
|
||||||
|
|
||||||
VERSION:
|
|
||||||
LD DE,VERS*256+MODF
|
|
||||||
XOR A
|
|
||||||
LD H,A ;!TODO ¯¨å âì áî¤ OSINFO
|
|
||||||
LD L,A
|
|
||||||
LD BC,BUILD
|
|
||||||
RET
|
|
||||||
|
|
||||||
//;R10
|
|
||||||
//OSINFO:
|
|
||||||
//OSINFO_SIG: DB "OSINFOSTRUCTURE",0
|
|
||||||
|
|
||||||
|
|
||||||
;R09
|
|
||||||
BOOTDRV: DB #FF
|
|
||||||
|
|
||||||
BOOTDSK:
|
|
||||||
INC B
|
|
||||||
DEC B
|
|
||||||
JR Z,GETBOOT
|
|
||||||
DEC B
|
|
||||||
.chg: JR Z,SETBOOT ;R13 ¬¥ï¥âáï JR ‘,SETBOOT ¯®á«¥ ¯¥à¢®£® 㤠箣® ¨á¯®«¥¨ï SETBOOT
|
|
||||||
LD A,DSS_Error.sys.INVALID_FUNCTION
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
;GET BOOT DISK
|
|
||||||
|
|
||||||
GETBOOT LD A,(BOOTDRV)
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;SET BOOT DISK
|
|
||||||
SETBOOT:
|
|
||||||
LD B,A
|
|
||||||
LD C,0
|
|
||||||
.loop: PUSH BC
|
|
||||||
LD A,C
|
|
||||||
LD BC,#0008
|
|
||||||
LD DE,#55AA
|
|
||||||
RST #18
|
|
||||||
POP BC
|
|
||||||
JR C,.NoSupport
|
|
||||||
EX AF,AF' ;PHISICAL DRIVE NUMBER
|
|
||||||
CP B
|
|
||||||
JR NZ,.NoSupport
|
|
||||||
;R13
|
|
||||||
LD A,#38 ; opcode for JR C,addr
|
|
||||||
LD (BOOTDSK.chg),A
|
|
||||||
;R13
|
|
||||||
LD A,C
|
|
||||||
LD (BOOTDRV),A
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
.NoSupport:
|
|
||||||
INC C
|
|
||||||
LD A,(LDRIVE)
|
|
||||||
CP C
|
|
||||||
JR NZ,.loop
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
;R09
|
|
||||||
|
|
||||||
;!!!!! „ã¡«ì - CHNDISK = OPENDSK
|
|
||||||
/*
|
|
||||||
CHNDISK:
|
|
||||||
PUSH AF
|
|
||||||
LD C,1
|
|
||||||
RST #18
|
|
||||||
POP BC
|
|
||||||
JP C,NDISK11
|
|
||||||
LD A,B
|
|
||||||
LD (FatBuffer.DRIVE),A
|
|
||||||
CALL RD_BPB
|
|
||||||
RET C
|
|
||||||
LD A,(LDRIVE)
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
NDISK11:
|
|
||||||
CP DSS_Error.sys.INVALID_DRIVE
|
|
||||||
SCF
|
|
||||||
RET Z
|
|
||||||
LD A,DSS_Error.sys.NOT_READY
|
|
||||||
RET
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
CURRDSK: LD A,(FatBuffer.DRIVE)
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
DISKINF: INC A
|
|
||||||
JR Z,CURRDS ;R06
|
|
||||||
DEC A ;R06
|
|
||||||
CALL CHNDISK ;R06
|
|
||||||
RET C ;R06
|
|
||||||
CURRDS: LD HL,2
|
|
||||||
LD BC,0
|
|
||||||
FRESP: PUSH BC
|
|
||||||
CALL R_F_FAT
|
|
||||||
POP BC
|
|
||||||
CP 10
|
|
||||||
JR Z,FRESP2
|
|
||||||
|
|
||||||
LD A,E
|
|
||||||
OR D
|
|
||||||
JR NZ,SKIC
|
|
||||||
INC BC
|
|
||||||
SKIC: INC HL
|
|
||||||
JP FRESP
|
|
||||||
|
|
||||||
FRESP2: LD D,B
|
|
||||||
LD E,C
|
|
||||||
LD HL,(MAX_CLU)
|
|
||||||
DEC HL
|
|
||||||
LD BC,(BootSector.B_P_S)
|
|
||||||
LD A,(BootSector.S_P_C)
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
LDRIVE: DB #02
|
|
||||||
TDRIVE: DB #00
|
|
||||||
TCLUST: DW #0000
|
|
||||||
TCOUNT: DW #0000
|
|
||||||
|
|
||||||
;R04SIZE2CL LD DE,(B_P_C)
|
|
||||||
;R04 XOR A
|
|
||||||
;R04 SCF
|
|
||||||
;R04S2C01 RR D
|
|
||||||
;R04 RR E
|
|
||||||
;R04 JR C,S2C02
|
|
||||||
;R04 RR H
|
|
||||||
;R04 RR L
|
|
||||||
;R04 RR B
|
|
||||||
;R04 RR C
|
|
||||||
;R04 JP NC,S2C01
|
|
||||||
;R04 LD A,1
|
|
||||||
;R04 JP S2C01
|
|
||||||
;R04S2C02 OR A
|
|
||||||
;R04 RET Z
|
|
||||||
;R04 INC BC
|
|
||||||
;R04 RET
|
|
||||||
|
|
||||||
;R04L_SEC_X DW 0
|
|
||||||
;R04H_SEC_X DW 0
|
|
||||||
|
|
||||||
; !FIXIT çñâ ¥ ¨á¯®«ì§ã¥âáï
|
|
||||||
TESTDSK LD A,(FatBuffer.DRIVE)
|
|
||||||
LD C,3
|
|
||||||
RST #18
|
|
||||||
OR A
|
|
||||||
RET Z
|
|
||||||
RD_BPB LD C,SLOT3
|
|
||||||
IN B,(C)
|
|
||||||
PUSH BC
|
|
||||||
|
|
||||||
;!!!!! «ãçè¥ ®áâ ¢¨âì ª ª ¢ ®à¨£¨ «¥, ¯®â®¬ã çâ® ¢ë§®¢ í⮩ äãªæ¨¨
|
|
||||||
; ¬®¦¥â ¢ ¤ «ì¥©è¥¬ ¯® ¤®¡¨âìáï, ¨ ¯ã᪠© ® á ¬ ¤®áâ ñâ ¯¥à¥¬¥ãî DRIVE
|
|
||||||
; ex af,af' ;1451
|
|
||||||
; in a,(SLOT0) ;1452
|
|
||||||
; out (SLOT3),a ;1454
|
|
||||||
; ld de,SECBUF+#C000 ;1456
|
|
||||||
; ex af,af' ;1459
|
|
||||||
IN A,(SLOT0)
|
|
||||||
OUT (SLOT3),A
|
|
||||||
;R08 LD DE,BOOT+#C000
|
|
||||||
LD DE,SECBUF+#C000 ;R08
|
|
||||||
LD A,(FatBuffer.DRIVE)
|
|
||||||
;!!!!! ------------------------------
|
|
||||||
|
|
||||||
LD C,4
|
|
||||||
RST #18
|
|
||||||
POP BC
|
|
||||||
OUT (C),B
|
|
||||||
JP C,RDERR1
|
|
||||||
PUSH IY
|
|
||||||
LD DE,#AA55 ;R05
|
|
||||||
;R08 LD HL,(BOOT+510) ;R07
|
|
||||||
LD HL,(SECBUF+510) ;R08
|
|
||||||
AND A ;R05
|
|
||||||
SBC HL,DE ;R05
|
|
||||||
JP NZ,ERR_BPB ;R05
|
|
||||||
;R08
|
|
||||||
LD HL,SECBUF ;R08
|
|
||||||
LD DE,BootSector ;R08
|
|
||||||
LD BC,_sBOOT_SEC ;R08 size
|
|
||||||
LDIR
|
|
||||||
;R08
|
|
||||||
|
|
||||||
LD IY,BootSector
|
|
||||||
LD A,(IY+_sBOOT_SEC.ID_FORM)
|
|
||||||
CP #F0
|
|
||||||
JP C,ERR_BPB
|
|
||||||
LD HL,0 ; calc. first sector FAT
|
|
||||||
LD E,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
|
|
||||||
LD D,(IY+_sBOOT_SEC.RESERVE+1)
|
|
||||||
ADD HL,DE
|
|
||||||
; LD E,(IY+#1C) ;Hidden sec
|
|
||||||
; LD D,(IY+#1D)
|
|
||||||
; ADD HL,DE
|
|
||||||
; LD (FatBuffer.FAT_FRM),HL ; first sector FAT
|
|
||||||
LD (FatBuffer.FAT1_XX),HL ; first sector FAT #1
|
|
||||||
LD (FatBuffer.FAT2_XX),HL
|
|
||||||
|
|
||||||
LD E,(IY+_sBOOT_SEC.S_P_F) ; sectors in FAT
|
|
||||||
LD D,(IY+_sBOOT_SEC.S_P_F+1)
|
|
||||||
LD A,(BootSector.FAT_NUM) ; amount FATs
|
|
||||||
CP 1
|
|
||||||
JR Z,C_DATA1
|
|
||||||
DEC A
|
|
||||||
ADD HL,DE
|
|
||||||
LD (FatBuffer.FAT2_XX),HL
|
|
||||||
C_DATA1 ADD HL,DE
|
|
||||||
DEC A
|
|
||||||
JR NZ,C_DATA1
|
|
||||||
LD (FatBuffer.DIR_FRM),HL ; first sector DIR
|
|
||||||
|
|
||||||
LD C,(IY+#0B) ; Size sectors
|
|
||||||
LD B,(IY+#0C)
|
|
||||||
RL C
|
|
||||||
RL B
|
|
||||||
RL C
|
|
||||||
RL B
|
|
||||||
RL C
|
|
||||||
RL B
|
|
||||||
LD C,B
|
|
||||||
LD B,0 ; BC - File handels in sectors
|
|
||||||
LD A,C
|
|
||||||
LD (FatBuffer.F_P_S),A
|
|
||||||
LD E,(IY+_sBOOT_SEC.F_P_DIR) ; Number file handel
|
|
||||||
LD D,(IY+_sBOOT_SEC.F_P_DIR+1)
|
|
||||||
EX DE,HL
|
|
||||||
DEC HL
|
|
||||||
XOR A
|
|
||||||
NEXTAD2
|
|
||||||
INC A
|
|
||||||
JP Z,ERR_BPB
|
|
||||||
SBC HL,BC
|
|
||||||
JR NC,NEXTAD2
|
|
||||||
EX DE,HL
|
|
||||||
LD C,A ; A - sectors in DIR
|
|
||||||
LD B,0
|
|
||||||
LD (FatBuffer.DIR_S_S),A
|
|
||||||
ADD HL,BC ; Start DATA area
|
|
||||||
LD (FatBuffer.DAT_FRM),HL
|
|
||||||
;LD HL,0
|
|
||||||
LD H,B ; âãâ ¢ B ®«ì ¤®«¦¥ ¡ëâì
|
|
||||||
LD L,B
|
|
||||||
LD C,(IY+#0B) ; Size sector
|
|
||||||
LD B,(IY+#0C)
|
|
||||||
LD A,(BootSector.S_P_C)
|
|
||||||
NEXTAD3
|
|
||||||
ADD HL,BC ; calc. cluster size
|
|
||||||
DEC A
|
|
||||||
JR NZ,NEXTAD3
|
|
||||||
LD (FatBuffer.CLU_LEN),HL
|
|
||||||
EX DE,HL
|
|
||||||
LD HL,#3FFF
|
|
||||||
XOR A
|
|
||||||
NEXTAD4
|
|
||||||
INC A
|
|
||||||
JP Z,ERR_BPB
|
|
||||||
SBC HL,DE
|
|
||||||
JR NC,NEXTAD4
|
|
||||||
LD (FatBuffer.C_P_B),A ; A - Clusters per bank (16k)
|
|
||||||
|
|
||||||
LD HL,BootSector.ID_FAT
|
|
||||||
LD DE,FatBuffer.MSG
|
|
||||||
LD B,3
|
|
||||||
R_BPBL1
|
|
||||||
LD A,(DE)
|
|
||||||
CP (HL)
|
|
||||||
JP NZ,IBMDOS_
|
|
||||||
INC HL
|
|
||||||
INC DE
|
|
||||||
DJNZ R_BPBL1
|
|
||||||
FID LD A,(HL)
|
|
||||||
INC HL
|
|
||||||
CP #20
|
|
||||||
JR Z,FID
|
|
||||||
CP "1"
|
|
||||||
JP NZ,ERR_BPB
|
|
||||||
LD A,(HL)
|
|
||||||
CP "6" ; FAT16
|
|
||||||
LD HL,#FFFF
|
|
||||||
JR Z,BPB_FAT
|
|
||||||
CP "2" ; FAT12
|
|
||||||
JP NZ,ERR_BPB
|
|
||||||
LD HL,#0FFF
|
|
||||||
BPB_FAT
|
|
||||||
LD (FatBuffer.FAT_TYP),A
|
|
||||||
LD (FatBuffer.ENDCLUS),HL
|
|
||||||
LD HL,0
|
|
||||||
LD C,(IY+_sBOOT_SEC.S_P_T) ; Sector per track
|
|
||||||
LD B,(IY+_sBOOT_SEC.S_P_T+1)
|
|
||||||
LD A,(BootSector.HEADS)
|
|
||||||
BPB_L1: ; calc. sector per cylinder
|
|
||||||
ADD HL,BC
|
|
||||||
DEC A
|
|
||||||
JR NZ,BPB_L1
|
|
||||||
LD (FatBuffer.S_X_H),HL
|
|
||||||
|
|
||||||
LD DE,(FatBuffer.DAT_FRM)
|
|
||||||
; LD E,(IY+#1C) ;Hidden sec
|
|
||||||
; LD D,(IY+#1D)
|
|
||||||
; AND A
|
|
||||||
; SBC HL,DE
|
|
||||||
; EX DE,HL
|
|
||||||
LD L,(IY+_sBOOT_SEC.S_P_D)
|
|
||||||
LD H,(IY+_sBOOT_SEC.S_P_D+1)
|
|
||||||
LD A,H
|
|
||||||
OR L
|
|
||||||
JP NZ,HDDSMAL
|
|
||||||
LD L,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS)
|
|
||||||
LD H,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+1)
|
|
||||||
LD C,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+2)
|
|
||||||
LD B,(IY+_sBOOT_SEC.BPB_BIG_TOTAL_SECTORS+3)
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
JP NC,HDDBIG
|
|
||||||
DEC BC
|
|
||||||
JP HDDBIG
|
|
||||||
HDDSMAL:
|
|
||||||
; AND A ;âãâ CF ¯®«î¡ á á¡à®è¥ ¤®«¦¥ ¡ëâì
|
|
||||||
SBC HL,DE
|
|
||||||
LD BC,0
|
|
||||||
HDDBIG LD A,(BootSector.S_P_C)
|
|
||||||
SCF
|
|
||||||
S4C01 RRA
|
|
||||||
JR C,S4C02
|
|
||||||
RR B
|
|
||||||
RR C
|
|
||||||
RR H
|
|
||||||
RR L
|
|
||||||
JP S4C01
|
|
||||||
S4C02 INC HL
|
|
||||||
LD (MAX_CLU),HL
|
|
||||||
POP IY
|
|
||||||
; LD DE,FAT
|
|
||||||
; LD HL,0
|
|
||||||
; LD IX,(FAT_FRM)
|
|
||||||
; LD B,3
|
|
||||||
; LD A,(DRIVE)
|
|
||||||
; LD C,5
|
|
||||||
; RST #18
|
|
||||||
; JP C,RDERR1
|
|
||||||
LD HL,0
|
|
||||||
LD (FATCASH),HL
|
|
||||||
LD A,FATPAGE
|
|
||||||
CALL BANK
|
|
||||||
PUSH AF
|
|
||||||
XOR A
|
|
||||||
CALL RE_FAT
|
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
CALL R_CLUST
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
IBMDOS_ LD A,(IY+_sBOOT_SEC.ID_FORM)
|
|
||||||
CP #F0
|
|
||||||
JR C,ERR_BPB
|
|
||||||
;????? ¤® «¨ ¨§¬¥¨âì?
|
|
||||||
// OR 2
|
|
||||||
// CP #FA ; ID ram-¤¨áª
|
|
||||||
CP #F8 ; ¥á«¨ ¥ F8?
|
|
||||||
;?????
|
|
||||||
LD A,'6'
|
|
||||||
LD HL,#FFFF
|
|
||||||
JP Z,BPB_FAT
|
|
||||||
|
|
||||||
LD A,'2'
|
|
||||||
LD HL,#0FFF
|
|
||||||
JP BPB_FAT
|
|
||||||
|
|
||||||
ERR_BPB:
|
|
||||||
POP IY
|
|
||||||
LD A,DSS_Error.sys.UNKNOWN_FORMAT
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
RDERR1: LD A,DSS_Error.sys.NOT_READY
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
;
|
|
||||||
FatBuffer:
|
|
||||||
.MSG: DB 'FAT'
|
|
||||||
.READ_PG: DB #00
|
|
||||||
.BLOCK: DB #00
|
|
||||||
.DIR_CLU: DW #0000
|
|
||||||
.DRIVE: DB #01
|
|
||||||
.FAT_FRM:
|
|
||||||
.FAT1_XX: DW #0000 ; MSD_FAT_SEC first sector FAT
|
|
||||||
.FAT2_XX: DW #0000
|
|
||||||
.DIR_FRH: DW #0000 ; MSD_CAT_SEC first sector DIR
|
|
||||||
.DIR_FRL:
|
|
||||||
.DIR_FRM: DW #0000 ; MSD_CAT_SEC first sector DIR
|
|
||||||
.F_P_S: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
|
||||||
.DIR_S_S: DB #00 ; DIR_SEC_SIZE
|
|
||||||
.DAT_FRM: DW #0000 ; MSD_DAT_SEC
|
|
||||||
.CLU_LEN:
|
|
||||||
.B_P_C: DW #0000 ; CLUSTER_LEN
|
|
||||||
.C_P_B: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
|
||||||
.FAT_TYP: DB #00 ; TYPE FAT (#32 - 12bit, #36 - 16bit)
|
|
||||||
.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
|
|
||||||
.ENDCLUS: DW #FFFF
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
DIRSPEC: DB '\'
|
|
||||||
BLOCK DIRSPEC.DEPTH,0 ;????? <20>ë«® 255, ã ‘ ©¬ 256
|
|
||||||
;
|
|
||||||
|
|
||||||
;R11
|
|
||||||
; !TODO ¯®ç¨¨âì
|
|
||||||
SAVE_CUR_PATH
|
|
||||||
PUSH IX
|
|
||||||
PUSH IY
|
|
||||||
PUSH HL
|
|
||||||
PUSH DE
|
|
||||||
PUSH BC
|
|
||||||
PUSH AF
|
|
||||||
;
|
|
||||||
LD A,ENVPAGE
|
|
||||||
CALL BANK
|
|
||||||
PUSH AF
|
|
||||||
|
|
||||||
CALL CURRDSK
|
|
||||||
ADD A,"A"
|
|
||||||
LD HL,TMP_CURDIR
|
|
||||||
LD (HL),A
|
|
||||||
INC HL
|
|
||||||
LD A,":"
|
|
||||||
LD (HL),A
|
|
||||||
INC HL
|
|
||||||
CALL CURRDIR
|
|
||||||
|
|
||||||
; ¯®ç¥¬ã ¥ POP AF : OUT (SLOT3),A
|
|
||||||
//POP BC
|
|
||||||
//LD A,B
|
|
||||||
//OUT (SLOT3),A
|
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
;
|
|
||||||
;
|
|
||||||
POP AF
|
|
||||||
POP BC
|
|
||||||
POP DE
|
|
||||||
POP HL
|
|
||||||
POP IY
|
|
||||||
POP IX
|
|
||||||
RET
|
|
||||||
|
|
||||||
; !TODO ¯®ç¨¨âì
|
|
||||||
BACK_CUR_PATH:
|
|
||||||
PUSH IY
|
|
||||||
PUSH IX
|
|
||||||
PUSH HL
|
|
||||||
PUSH DE
|
|
||||||
PUSH BC
|
|
||||||
PUSH AF
|
|
||||||
;
|
|
||||||
LD A,ENVPAGE
|
|
||||||
CALL BANK
|
|
||||||
PUSH AF
|
|
||||||
|
|
||||||
LD HL,TMP_CURDIR
|
|
||||||
CALL CHDIR
|
|
||||||
|
|
||||||
; ¯®ç¥¬ã ¥ POP AF : OUT (SLOT3),A
|
|
||||||
//POP BC
|
|
||||||
//LD A,B
|
|
||||||
//OUT (SLOT3),A
|
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
;
|
|
||||||
POP AF
|
|
||||||
POP BC
|
|
||||||
POP DE
|
|
||||||
POP HL
|
|
||||||
POP IX
|
|
||||||
POP IY
|
|
||||||
RET
|
|
||||||
;R11
|
|
||||||
|
|
||||||
;R12
|
|
||||||
SCANDRV:
|
|
||||||
DI ;!FIXIT ¢ DRV-MAIN ¬®£ãâ ¡ëâì ¯à®¡«¥¬ë á ¯à¥àë¢ ¨ï¬¨
|
|
||||||
LD A,#FF
|
|
||||||
LD C,#FF
|
|
||||||
RST #18
|
|
||||||
LD (LDRIVE),A
|
|
||||||
EI
|
|
||||||
RET
|
|
||||||
;R12
|
|
||||||
|
|
||||||
|
|
||||||
;GOD EQU 1999-1980*512
|
|
||||||
|
|
||||||
;FHAND DB " "
|
|
||||||
; DB " "
|
|
||||||
; DB #20
|
|
||||||
; DW 0,0,0,0,0
|
|
||||||
; DW #0000
|
|
||||||
; DW 5*32+19+GOD
|
|
||||||
;SAVEC DW #0000
|
|
||||||
;SIZEC DW #0000,#0000
|
|
||||||
;=============================================
|
|
||||||
;//MODULE: DOS_X
|
|
||||||
;[END]
|
|
||||||
|
|
||||||
467
DSS/DRV-MAIN.ASM
467
DSS/DRV-MAIN.ASM
@ -6,232 +6,361 @@
|
|||||||
;---------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
;R00 2003-03-19 DNS Initial version
|
;R00 2003-03-19 DNS Initial version
|
||||||
;---------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
// INCLUDE "hardware.inc"
|
|
||||||
// INCLUDE "bios.inc"
|
|
||||||
|
|
||||||
|
|
||||||
; ORG #0000
|
; ORG #0000
|
||||||
|
|
||||||
MODULE DRV ; !FIXIT ®¡®©â¨áì ¡¥§ ¬®¤ã«ï
|
|
||||||
;PAGEDRV EQU 0
|
;PAGEDRV EQU 0
|
||||||
|
|
||||||
|
|
||||||
|
;===============;
|
||||||
|
;!FIXIT ¢ ¯à®æ¥¤ãॠª®â®à ï ¡ã¤¥â ®â¢¥ç âì § ¯¥à¥å®¤ ¨§ í⮩ áâà ¨æë ®¡à â® ¢ MAIN ¤«ï ¢ë§®¢ äãªæ¨©
|
||||||
|
; „‘‘ ¨, ¢®§¬®¦®, ¯®¢â®à®¬ã § 室㠢 íâã áâà ¨æã ç¥à¥§ RST #18 ¨§ ¤à㣨å áâà ¨æ (ª®â®àëå ¯®ª ¥â)
|
||||||
|
; ᤥ« âì ¥çâ® ¯®¤®¡®¥ á ¯à®£à ¬¬ë¬ á⥪®¬ áâà ¨æ. <20>â ¯à®æ¥¤ãà ¨å á®åà ï¥â, ¯à¨¬¥à® â ª ï ¦¥
|
||||||
|
; ¤®«¦ ¢®ááâ ¢«¨¢ âì.
|
||||||
|
; PUSH HL
|
||||||
|
;.SP+1: LD HL,DRV_PAGE.RSTx18_RET_PAGES
|
||||||
|
; LD (HL),A
|
||||||
|
; DEC L ; <20>¥ HL, L - ç⮡ § ª®«ì楢 âì ®¡« áâì
|
||||||
|
; LD (.SP),HL
|
||||||
|
; POP HL
|
||||||
|
;===============;
|
||||||
|
|
||||||
;!TODO
|
;!TODO
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
////////////////////////////////////////////////////////////////////////
|
||||||
; <[NOT USED]> ;
|
; <[NOT USED]>
|
||||||
A0000: JP RST_00 ;
|
A0000: JP RST_00
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
////////////////////////////////////////////////////////////////////////
|
||||||
;
|
|
||||||
|
|
||||||
;
|
;
|
||||||
RST_00:
|
RST_00:
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
LD A,BIOS.Error.InvalidSubFunction
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
|
||||||
;
|
////////////////////////////////////////////////////////////////////////
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
; <[BIOS API]>
|
||||||
; <[BIOS API]> ;
|
BLOCK 8-$,#C7 ; #C7 - "RST 0" opcode
|
||||||
BLOCK 8-$,#FF ;
|
A0008: PUSH AF
|
||||||
A0008: PUSH AF ;
|
LD A,SYS_PORT.PAGE8
|
||||||
LD A,SYS_PORT.PAGE8;
|
OUT (SYS_PORT.ON),A
|
||||||
OUT (SYS_PORT.ON),A ;
|
POP AF
|
||||||
POP AF ;
|
RET
|
||||||
RET ;
|
////////////////////////////////////////////////////////////////////////
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
;
|
|
||||||
|
|
||||||
;!FIXIT
|
;!FIXIT
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
////////////////////////////////////////////////////////////////////////
|
||||||
; <[DSS API]> ;
|
; <[DSS API]>
|
||||||
BLOCK #10-$,#FF ;
|
BLOCK #10-$,#C7 ; #C7 - "RST 0" opcode
|
||||||
A0010: ;JP RST_10 ;
|
A0010: ;JP DRV_PAGE.RST_10
|
||||||
DI : HALT ;
|
DI : HALT
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
////////////////////////////////////////////////////////////////////////
|
||||||
;
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; <[DRIVE API]>
|
||||||
|
BLOCK #18-$,#C7 ; #C7 - "RST 0" opcode
|
||||||
|
;A0018 JP INTDISK
|
||||||
|
A0018: ;PUSH AF
|
||||||
|
;PUSH BC
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
DRV_PAGE.MAIN_PAGE_NUMBER+2:
|
||||||
|
LD BC,0*256 + SLOT0 ; !FIXIT áî¤ ¥ ¤®«¦ë ¢áâ ¢«ïâìáï ®¬¥à ¢ë¤¥«¥ëå áâà ¨æ?
|
||||||
|
;JP PORTAL.outDRV
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
; <[DRIVE API]> ;
|
|
||||||
BLOCK #18-$,#FF ;
|
|
||||||
;A0018 JP INTDISK ;
|
|
||||||
A0018: PUSH AF ;
|
|
||||||
PUSH BC ;
|
|
||||||
MAIN_PG_NUMBER+2: ;
|
|
||||||
LD BC,0*256+SLOT0 ; !FIXIT áî¤ ¥ ¤®«¦ë ¢áâ ¢«ïâìáï ®¬¥à ¢ë¤¥«¥ëå áâà ¨æ?
|
|
||||||
JP PORTAL.outDRV ;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
;
|
|
||||||
|
|
||||||
;!TODO
|
;!TODO
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
////////////////////////////////////////////////////////////////////////
|
||||||
; <[NOT USED]> ;
|
; <[NOT USED]>
|
||||||
BLOCK #20-$,#FF ;
|
BLOCK #20-$,#C7 ; #C7 - "RST 0" opcode
|
||||||
A0020: JP RST_20 ;
|
A0020: JP DRV_PAGE.RST_20
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
////////////////////////////////////////////////////////////////////////
|
||||||
;
|
|
||||||
|
|
||||||
;
|
;
|
||||||
RST_20:
|
DRV_PAGE.RST_20:
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
LD A,BIOS.Error.InvalidSubFunction
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
|
||||||
;!TODO
|
;!TODO
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
////////////////////////////////////////////////////////////////////////
|
||||||
; <[NOT USED]> ;
|
; <[NOT USED]>
|
||||||
BLOCK #28-$,#FF ;
|
BLOCK #28-$,#C7 ; #C7 - "RST 0" opcode
|
||||||
A0028: JP RST_28 ;
|
A0028: JP DRV_PAGE.RST_28
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
////////////////////////////////////////////////////////////////////////
|
||||||
;
|
|
||||||
|
|
||||||
;
|
;
|
||||||
RST_28:
|
DRV_PAGE.RST_28:
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
LD A,BIOS.Error.InvalidSubFunction
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
|
||||||
;!TODO
|
////////////////////////////////////////////////////////////////////////
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
BLOCK #30-$,#C7 ; #C7 - "RST 0" opcode
|
||||||
; <[NOT USED]> ;
|
RST_30: JP MOUSE_DRV.API
|
||||||
BLOCK #30-$,#FF ;
|
.RET: OUT (SLOT0),A
|
||||||
A0030: JP RST_30 ;
|
JP MOUSE_HANDLER
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
////////////////////////////////////////////////////////////////////////
|
||||||
;
|
|
||||||
|
|
||||||
;
|
|
||||||
RST_30:
|
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
|
|
||||||
;!FIXIT
|
;!FIXIT
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
////////////////////////////////////////////////////////////////////////
|
||||||
; <[MAIN INT]> ;
|
; <[MAIN INT]> ;
|
||||||
BLOCK #38-$,#FF ;
|
BLOCK #38-$,#C7 ;
|
||||||
A0038: ;
|
/*
|
||||||
// JP RST_38 ;
|
;!TEST SIO INT
|
||||||
; RST_38: ;
|
; reg 0 - error reset
|
||||||
; INT_: PUSH AF ;
|
IF KEYBOARD_INT_ENABLED && MOUSE_INT_ENABLED == 0
|
||||||
; EX AF,AF' ;
|
PUSH AF
|
||||||
; PUSH AF ;
|
; reg 0 - error reset
|
||||||
; PUSH BC ;
|
LD A,%0011'0000
|
||||||
; PUSH DE ;
|
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||||||
; PUSH HL ;
|
; reg 0 - return from int
|
||||||
; EXX ;
|
LD A,%0011'1000
|
||||||
; PUSH BC ;
|
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||||||
; PUSH DE ;
|
POP AF
|
||||||
; PUSH HL ;
|
ELSEIF MOUSE_INT_ENABLED && KEYBOARD_INT_ENABLED == 0
|
||||||
; PUSH IX ;
|
PUSH AF
|
||||||
; PUSH IY ;
|
; reg 0 - error reset
|
||||||
; CALL KEYSCAN ;
|
LD A,%0011'0000
|
||||||
; LD C,#80 ;
|
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||||||
; RST #30 ;
|
; reg 0 - return from int
|
||||||
; POP IY ;
|
LD A,%0011'1000
|
||||||
; POP IX ;
|
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||||||
; POP HL ;
|
POP AF
|
||||||
; POP DE ;
|
ELSEIF MOUSE_INT_ENABLED && KEYBOARD_INT_ENABLED
|
||||||
; POP BC ;
|
PUSH AF
|
||||||
; EXX ;
|
; reg 0 - error reset
|
||||||
; POP HL ;
|
LD A,%0011'0000
|
||||||
; POP DE ;
|
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||||||
; POP BC ;
|
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||||||
; POP AF ;
|
; reg 0 - return from int
|
||||||
; EX AF,AF' ;
|
LD A,%0011'1000
|
||||||
; POP AF ;
|
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||||||
|
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||||||
|
POP AF
|
||||||
|
ENDIF
|
||||||
EI ;
|
EI ;
|
||||||
RETI ;
|
RETI ;
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
*/
|
||||||
;
|
RST_38_DRV: JP .Portal
|
||||||
|
BLOCK RST_38_IM1.Portal - $,0
|
||||||
|
.Portal: PUSH AF
|
||||||
|
LD A,(DRV_PAGE.MAIN_PAGE_NUMBER)
|
||||||
|
OUT (SLOT0),A
|
||||||
|
POP AF
|
||||||
|
EI
|
||||||
|
RETI
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
;
|
;
|
||||||
KEYSCAN: RET ;!FIXIT
|
DRV_PAGE.KEYSCAN: RET ;!FIXIT
|
||||||
;
|
;
|
||||||
|
|
||||||
;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
////////////////////////////////////////////////////////////////////////
|
||||||
; <[ NMI ]> ;
|
; <[ NMI ]> ;
|
||||||
NMI: RETN ;
|
DRV_PAGE.NMI: RETN ;
|
||||||
BLOCK #66-$,#FF ;
|
BLOCK #66-$,#C7;
|
||||||
A0066: JP NMI ;
|
A0066: JP DRV_PAGE.NMI ;
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
////////////////////////////////////////////////////////////////////////
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
;-------------------------------;
|
;-------------------------------;
|
||||||
;ADRST10 EQU #00 ;!!!!!
|
;ADRST10 EQU #00 ; ;!!!!!
|
||||||
;-------------------------------;
|
;-------------------------------;
|
||||||
;!FIXIT
|
;!FIXIT
|
||||||
RST_10 PUSH HL
|
; DRV_PAGE.RST_10:
|
||||||
LD L,C
|
; PUSH HL
|
||||||
LD H,ADRST10/256
|
; LD L,C
|
||||||
LD C,(HL)
|
; LD H,ADRST10/256
|
||||||
INC H
|
; LD C,(HL)
|
||||||
LD H,(HL)
|
; INC H
|
||||||
LD L,C
|
; LD H,(HL)
|
||||||
EX (SP),HL
|
; LD L,C
|
||||||
RET
|
; EX (SP),HL
|
||||||
|
; RET
|
||||||
|
|
||||||
;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
////////////////////////////////////////////////////////////////////////
|
||||||
; <[DRIVE PAGE SWITCH]> ;
|
; <[DRIVE PAGE SWITCH]> ;
|
||||||
BLOCK #7E-$,0 ;
|
BLOCK PORTAL.RSTx18_SWITCH_ADDRESS-$-(PORTAL.out_DRV.switch - PORTAL.out_DRV),#C7
|
||||||
PORTAL.toMAIN: ;
|
PORTAL.out_DRV: PUSH BC
|
||||||
PUSH BC ;
|
.RETBANK+2: LD BC,SLOT0 + 0*256; ;!!!!! ReScnDRV ¨á¯®«ì§ã¥â íâ® § 票¥
|
||||||
RETBANK+2: ;
|
.switch: OUT (C),B
|
||||||
LD BC,0*256+SLOT0 ;
|
ASSERT $!=84,'-> Portal error!';
|
||||||
OUT (C),B ;
|
;Entry point from DSS main page
|
||||||
ASSERT $!=84,'-> Portal error!';
|
LD (.RETBANK),A
|
||||||
;Entry point from DSS main page ; !FIXIT ¥á«¨ 2 à § ¯à¨«¥â¥âì íâã â®çªã ¢å®¤ , â® § áàñâáï RETBANK
|
POP BC
|
||||||
LD (RETBANK),A ;
|
POP AF
|
||||||
POP BC ;
|
.ADCALL+1: CALL DISPATCH ; ¯ âç¨âáï INTDISK
|
||||||
POP AF ;
|
JR NC,PORTAL.out_DRV
|
||||||
ADCALL+1: ;
|
OR DSS_Error.DRV_MASK
|
||||||
CALL DISPATCH ; ¯ âç¨âáï INTDISK
|
SCF
|
||||||
JR PORTAL.toMAIN ;
|
JP PORTAL.out_DRV
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
////////////////////////////////////////////////////////////////////////
|
||||||
;
|
|
||||||
/*
|
|
||||||
push hl
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
;!FIXIT çñâ ¥ â® âãâ
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
LD B,#00; ;
|
|
||||||
OUT (C),A ;
|
|
||||||
;--- ;
|
|
||||||
POP BC ;
|
|
||||||
RET ;
|
|
||||||
PORTAL.outDRV: ;
|
|
||||||
RET ;
|
|
||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
|
||||||
;
|
|
||||||
|
|
||||||
;
|
////////////////////////////////////////////////////////////////////////
|
||||||
DISPATCH
|
MOUSE_HANDLER: POP AF
|
||||||
CALL INITDVC
|
CALL MOUSE_DRV.API
|
||||||
|
PUSH AF
|
||||||
|
.CorePage EQU $$$ + 1
|
||||||
|
LD A,#FF
|
||||||
|
JP RST_30.RET
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
DRV_PAGE.LDRIVE: DB #00
|
||||||
|
|
||||||
|
DISPATCH:
|
||||||
LD HL,INTDISK
|
LD HL,INTDISK
|
||||||
LD (ADCALL),HL
|
LD (PORTAL.out_DRV.ADCALL),HL
|
||||||
LD A,(LDRIVE)
|
INITDVC_RET_DRIVE:
|
||||||
|
CALL INITDVC
|
||||||
|
LD A,(DRV_PAGE.LDRIVE)
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
INCLUDE 'dss/Drivers/media/shared.asm'
|
||||||
|
INCLUDE 'dss/Drivers/media/ata_atapi-drv.asm'
|
||||||
|
INCLUDE 'dss/Drivers/media/fdd-drv.asm'
|
||||||
|
INCLUDE 'dss/Drivers/media/ram_disk-drv.asm'
|
||||||
|
INCLUDE "dss/Drivers/input/MOUSE.ASM"
|
||||||
|
/////////////////////////// [ DRIVE TABLES ] \\\\\\\\\\\\\\\\\\\\\\\\\\\;
|
||||||
|
;
|
||||||
|
;--------------------------[shared.asm table]--------------------------;
|
||||||
|
DEVICE EQU $
|
||||||
|
.TBL_Entry EQU 3
|
||||||
|
.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry
|
||||||
|
.End EQU DEVICE.Size + 1 ; ¤«ï á⮯-¡ ©â #FF
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
;
|
;
|
||||||
|
|
||||||
LDRIVE DB #00
|
;
|
||||||
|
;--------------------------[shared.asm table]--------------------------;
|
||||||
|
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
|
;+01 LONG SECTOR OFFSET
|
||||||
|
;+05 LONG SIZE IN SECTORS
|
||||||
|
;+09 BYTE PARTITION RECORD NUMBER (in drive MBR)
|
||||||
|
;+10 WORD Sector Size
|
||||||
|
;+12 BYTE Removable Media Byte flags
|
||||||
|
;+13_15 FREE
|
||||||
|
;
|
||||||
|
LOGDRV EQU DEVICE + DEVICE.End
|
||||||
|
.TBL_Entry EQU 16
|
||||||
|
.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry
|
||||||
|
;!TODO ᤥ« âì áâàãªâãன
|
||||||
|
.PHISICAL_DRV_NUMBER EQU 0
|
||||||
|
.SECTOR_OFFSET EQU 1
|
||||||
|
.SIZE_IN_SECTORS EQU 5
|
||||||
|
.PARTITION_RECORD_NUM EQU 9
|
||||||
|
.SECTOR_SIZE EQU 10 ; word
|
||||||
|
.MediaParameters EQU 12 ; bit0=1 removable, bit1=1 drive changed, bit7..2 reserved
|
||||||
|
.Reserved_1 EQU 13
|
||||||
|
.Reserved_2 EQU 14
|
||||||
|
.Reserved_3 EQU 15
|
||||||
|
; ‚•Ž„: L - «®£¨ç¥áª¨© ®¬¥à ¢ â ¡«¨æ¥
|
||||||
|
; ‚›•Ž„: IY - ç «® § ¯¨á¨
|
||||||
|
; <20>Ž<EFBFBD>’ˆ’: HL, IY. HL<-->DE
|
||||||
|
; MACRO LOGDRV_ENTRY_FIND tbl_addr
|
||||||
|
; LD H,0
|
||||||
|
; ADD HL,HL
|
||||||
|
; ADD HL,HL
|
||||||
|
; ADD HL,HL
|
||||||
|
; ADD HL,HL
|
||||||
|
; ;LD B,H
|
||||||
|
; ;LD C,L
|
||||||
|
; EX DE,HL
|
||||||
|
; LD IY,tbl_addr
|
||||||
|
; ADD IY,DE
|
||||||
|
; ENDM
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;
|
||||||
|
|
||||||
INCLUDE 'disk_x.asm'
|
;
|
||||||
INCLUDE 'ide_drv0.asm'
|
;-----------------------[ram_disk-drv.asm table]-----------------------;
|
||||||
INCLUDE 'fdd_drv0.asm'
|
; ’€<E28099>‹ˆ–€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆ‘Š€ ˆ …ƒŽ RAM-DISK ID
|
||||||
;INCLUDE 'ram_drv0.asm'
|
; Log Number: DB RAM_Drive_Log_Number, RAM_Drive_ID ;(BIOS 0-15), (Block ID for BIOS)
|
||||||
INCLUDE 'ram_drv1.asm'
|
RAMDTBL EQU LOGDRV + LOGDRV.Size
|
||||||
|
.TBL_Entry EQU 2
|
||||||
|
.Size EQU .TBL_Entry * MAX_RAMDRIVES
|
||||||
|
; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
|
||||||
|
; DB #FF
|
||||||
|
; EDUP
|
||||||
|
; .Size EQU $-RAMDTBL
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;
|
||||||
|
////////////////////////////////////////////////////////////////////////;
|
||||||
|
|
||||||
DB 0
|
|
||||||
|
///////////////////////// [ DRIVE TABLES COPY] \\\\\\\\\\\\\\\\\\\\\\\\\;
|
||||||
ENDMODULE
|
MODULE OLD_TABLES
|
||||||
|
;
|
||||||
|
;--------------------------[shared.asm table]--------------------------;
|
||||||
|
DEVICE EQU @RAMDTBL + @RAMDTBL.Size
|
||||||
|
.TBL_Entry EQU @DEVICE.TBL_Entry
|
||||||
|
.Size: EQU @DEVICE.Size
|
||||||
|
.End EQU @DEVICE.End
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;--------------------------[shared.asm table]--------------------------;
|
||||||
|
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
||||||
|
;+01 LONG SECTOR OFFSET
|
||||||
|
;+05 LONG SIZE IN SECTORS
|
||||||
|
;+09 FREE
|
||||||
|
;+15
|
||||||
|
LOGDRV EQU DEVICE + DEVICE.End
|
||||||
|
.TBL_Entry EQU @LOGDRV.TBL_Entry
|
||||||
|
.Size EQU @LOGDRV.Size
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;-----------------------[ram_disk-drv.asm table]-----------------------;
|
||||||
|
; ’€<E28099>‹ˆ–€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆ‘Š€ ˆ …ƒŽ RAM-DISK ID
|
||||||
|
; Log Number: DB RAM_Drive_Log_Number, RAM_Drive_ID ;(BIOS 0-15), (Block ID for BIOS)
|
||||||
|
RAMDTBL EQU LOGDRV + LOGDRV.Size
|
||||||
|
.TBL_Entry EQU @RAMDTBL.TBL_Entry
|
||||||
|
.Size EQU @RAMDTBL.Size
|
||||||
|
; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
|
||||||
|
; DB #FF
|
||||||
|
; EDUP
|
||||||
|
; .Size EQU $-RAMDTBL
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;
|
||||||
|
ENDMODULE
|
||||||
|
////////////////////////////////////////////////////////////////////////;
|
||||||
|
;DISPLAY "DEVICE start: ", /H, DEVICE
|
||||||
|
;DISPLAY "Old DEVICE start: ", /H, OLD_TABLES.DEVICE
|
||||||
|
;DISPLAY "LOGDRV start: ", /H, LOGDRV
|
||||||
|
;DISPLAY "Old LOGDRV start: ", /H, OLD_TABLES.LOGDRV
|
||||||
|
;DISPLAY "RAMDTBL start: ", /H, RAMDTBL
|
||||||
|
;DISPLAY "Old RAMDTBL start: ", /H, OLD_TABLES.RAMDTBL
|
||||||
|
|
||||||
|
;
|
||||||
|
;DRV_TEMP_BUFFER:
|
||||||
|
|
||||||
|
;---------[256 bytes stack for return pages of RST #18 callers]--------;
|
||||||
|
; #3F00 - #3FFF
|
||||||
|
DRV_PAGE.RSTx18_RET_PAGES EQU #3FFF
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; ASSERT ((#4000-DRV_TEMP_BUFFER-256) > (DEVICE.Size + LOGDRV.Size + RAMDTBL.Size)), "No space for DRV_TEMP_BUFFER in DRV-MAIN page"
|
||||||
|
; ENDMODULE
|
||||||
; OUTEND
|
; OUTEND
|
||||||
;[END]
|
;[END]
|
||||||
735
DSS/DSS-MAIN.ASM
Normal file
735
DSS/DSS-MAIN.ASM
Normal file
@ -0,0 +1,735 @@
|
|||||||
|
|
||||||
|
;[BEGIN]
|
||||||
|
;//MODULE: DOS-MAIN AUTHOR: Denis Parinov
|
||||||
|
;//CREATE: A LONG TIME AGO :)
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;[ ] 㢥«¨ç¨âì ¤«¨ã PATH ¨ áâப¨ BAT
|
||||||
|
;[ ] ¯ãâì ⥪ã饣® ª â «®£ ¢ DIR ¢ë¢®¤¨âáï á £«îª®¬ ¥á«¨ ® ¤«¨¥¥ 256 ¡ ©â®¢
|
||||||
|
;[ ] ¯ãâì ¢ ¯à¨£« 襨¨ ª®á®«¨ ¢ë¢®¤¨âáï á £«îª®¬ ¥á«¨ ¯ãâì ¤«¨¥¥ 256 ¡ ©â®¢
|
||||||
|
;[ ] ;!FIXIT ª ª®©-â® ¡ £ ¯à¨ ª®â®à®¬ ¥á«¨ ¥â ¤¨áª ¨ ¥£® ¯®«¥§âì, â® ¢áñ «®¬ ¥âáï
|
||||||
|
;R12 24-07-2023 BAO Check minimum BIOS version on boot
|
||||||
|
;R11 17-04-2023 BAO OPTIMIZED BUFFERS, FREED UP 768 BYTES FOR CODE
|
||||||
|
;R10 14-04-2023 BAO €¢ à¨©ë© § ¢¨á® á ¢ë¢®¤®¬ á®®¡é¥¨ï ¯à¨ áâ à⥠á¨á⥬ë, ¥á«¨ ¥â ᢮¡®¤®© ¯ ¬ïâ¨
|
||||||
|
;R09 08-04-2023 BAO ‘®ªà 饨¥ à §¬¥à â ¡«¨æë API ¤® 96 äãªæ¨© (0 - #5F). (Ž¯æ¨® «ì® ¯à¨ ª®¬¯¨«ï樨)
|
||||||
|
;R08 15-04-2003 DNS RENAMED FN. OPEN AND CLOSE
|
||||||
|
;R07 31-03-2003 DNS NEW DEPLOYING ROUTINE
|
||||||
|
;R06 31-03-2003 DNS RELAYOUTING MEMORY
|
||||||
|
;R05 27-03-2003 DNS CHANGE DRV. INIT. METHOD
|
||||||
|
;R04 27-03-2003 DNS DRIVERS MOVE TO SPECIAL PAGE
|
||||||
|
;R03 14-03-2003 DNS CODE OPTIMIZATION
|
||||||
|
;R02 19-11-2002 DNS ADD ENVIRONMENT INITIALIZATION
|
||||||
|
;R01 14-11-2002 DNS CUT AND MOVE BPB-STRUCT
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
; OUTPUT './Build/system.dos'
|
||||||
|
|
||||||
|
; MODULE MAIN
|
||||||
|
//SPRINTER EQU 2000
|
||||||
|
|
||||||
|
includelua 'Shared_includes/lua/Functions.lua'
|
||||||
|
include 'shared_includes/structures/FileSystem.inc'
|
||||||
|
include 'shared_includes/constants/sp2000.inc'
|
||||||
|
INCLUDE 'defines.inc'
|
||||||
|
include 'Structures.inc'
|
||||||
|
include 'shared_includes/constants/standart_colors.inc'
|
||||||
|
include 'shared_includes/constants/bios_equ.inc'
|
||||||
|
include 'shared_includes/constants/dss_equ.inc'
|
||||||
|
include 'shared_includes/macroses/accelerator.z80'
|
||||||
|
include 'shared_includes/macroses/macros.z80'
|
||||||
|
INCLUDE 'VERSION.INC'
|
||||||
|
INCLUDE 'DSS_MACROSES.Z80'
|
||||||
|
|
||||||
|
;PAGEDRV EQU #00
|
||||||
|
|
||||||
|
; DIRPAGE EQU 0
|
||||||
|
; FATPAGE EQU 1
|
||||||
|
; TXTPAGE EQU 2
|
||||||
|
; ENVPAGE EQU 2
|
||||||
|
; DRVPAGE EQU 3
|
||||||
|
; ENVPAGE EQU 3
|
||||||
|
; DRVPAGE EQU 4
|
||||||
|
|
||||||
|
; TXTADDR EQU #C000
|
||||||
|
; ENVADDR EQU #E400
|
||||||
|
|
||||||
|
; DIR EQU #C000
|
||||||
|
; FAT EQU #C000
|
||||||
|
|
||||||
|
|
||||||
|
;
|
||||||
|
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
|
||||||
|
ORG 0
|
||||||
|
;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
; <[CLOSE TASK]> ;
|
||||||
|
RST_0x00: JP RETFAR ; ;EXECUTE.ASM R12
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
; <[BIOS API]> ;
|
||||||
|
_mInfoBLOCK 8-$,#FF ;
|
||||||
|
RST_0x08: PUSH AF ;
|
||||||
|
LD A,SYS_PORT.BIOS ;
|
||||||
|
OUT (SYS_PORT.ON),A ;
|
||||||
|
POP AF ;
|
||||||
|
RET ;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
; <[DSS API]> ;
|
||||||
|
_mInfoBLOCK #10-$,#FF ;
|
||||||
|
RST_0x10: JP RST_10 ;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
; <[DRIVE API]> ;
|
||||||
|
_mInfoBLOCK #18-$,#FF ;
|
||||||
|
;A0018 JP INTDISK ;
|
||||||
|
RST_0x18: PUSH AF ;
|
||||||
|
PUSH BC ;
|
||||||
|
DRV_PG_NUMBER+2: ;
|
||||||
|
LD BC,0*256+SLOT0 ;
|
||||||
|
JP PORTAL.out_MAIN ;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
; <[NOT USED]> ;
|
||||||
|
_mInfoBLOCK #20-$,#FF ;
|
||||||
|
RST_0x20: JP RST_20 ;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
RST_20:
|
||||||
|
RST_28:
|
||||||
|
NOPS: LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
; <[NOT USED]> ;
|
||||||
|
_mInfoBLOCK #28-$,#FF ;
|
||||||
|
RST_0x28: JP RST_28 ;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
; <[MOUSE API]> ;
|
||||||
|
_mInfoBLOCK #30-$,#FF ;
|
||||||
|
RST_0x30: PUSH AF
|
||||||
|
.drv_page+1: LD A,#FF
|
||||||
|
OUT (SLOT0),A
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
; <[MAIN INT]>
|
||||||
|
_mInfoBLOCK #38-$,#FF
|
||||||
|
;¤«ï ⮣®, ç⮡ á®äâë ¬®£«¨ ¬¥ïâì ®¡à ¡®â稪 ᢮©.
|
||||||
|
RST_38_IM1: JP .Handler
|
||||||
|
.Handler: CALL INTx38_Handler
|
||||||
|
EI
|
||||||
|
RETI
|
||||||
|
;
|
||||||
|
.Portal: PUSH AF
|
||||||
|
LD A,(RST_0x30.drv_page)
|
||||||
|
OUT (SLOT0),A
|
||||||
|
;POP AF
|
||||||
|
PUSH HL
|
||||||
|
LD HL,(RST_38_IM1+1)
|
||||||
|
XOR A
|
||||||
|
CP H
|
||||||
|
JR NZ,.error
|
||||||
|
LD A,low .Handler
|
||||||
|
CP L
|
||||||
|
JR NZ,.error
|
||||||
|
POP HL
|
||||||
|
POP AF
|
||||||
|
CALL INTx38_Handler
|
||||||
|
JR .Portal
|
||||||
|
;
|
||||||
|
.error: POP HL
|
||||||
|
POP AF
|
||||||
|
JR .Portal
|
||||||
|
;
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
;
|
||||||
|
;NMI: RETN
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
; <[ NMI ]> ;
|
||||||
|
_mInfoBLOCK #66-$,#FF ;
|
||||||
|
NMI_0x66: RETN ;JP NMI ;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
;
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
;
|
||||||
|
RST_10: PUSH HL
|
||||||
|
LD L,C
|
||||||
|
IF SHORT_RSTx10_TABLE
|
||||||
|
;[ ] R09
|
||||||
|
LD H,A
|
||||||
|
LD A,+(DSS_API_TABLE.low_short)
|
||||||
|
SUB C
|
||||||
|
JR C,.error
|
||||||
|
LD A,H
|
||||||
|
;[ ] R09
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
LD H,high DSS_API_TABLE
|
||||||
|
LD C,(HL)
|
||||||
|
INC H
|
||||||
|
LD H,(HL)
|
||||||
|
LD L,C
|
||||||
|
EX (SP),HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
IF SHORT_RSTx10_TABLE
|
||||||
|
;[ ] R09
|
||||||
|
.error: POP HL
|
||||||
|
JR NOPS
|
||||||
|
;[ ] R09
|
||||||
|
ENDIF
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
; <[DRIVE PAGE SWITCH]> ;
|
||||||
|
_mInfoBLOCK #80-$,0 ;
|
||||||
|
;ENTER: ;
|
||||||
|
PORTAL.out_MAIN: ;
|
||||||
|
IN A,(C) ;
|
||||||
|
OUT (C),B ;
|
||||||
|
ASSERT $!=84,'-> Portal error!';
|
||||||
|
POP BC ;
|
||||||
|
RET ;
|
||||||
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
;R01
|
||||||
|
; Area for boot sector BootSector.
|
||||||
|
;BootSector _sBOOT_SECTOR_PARAMS ,{ "DSS_","0"+VERS,".",MODF/10+"0",MODF-(MODF/10)*10+"0" }
|
||||||
|
; end boot sector
|
||||||
|
;R01
|
||||||
|
|
||||||
|
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
CLEAR_BUFFER_AND_INIT_PROC:
|
||||||
|
;------[CLEAR BUFFERS]------;
|
||||||
|
;R07 ;R11
|
||||||
|
XOR A
|
||||||
|
LD HL,CLEAR_ZONE.start
|
||||||
|
LD DE,CLEAR_ZONE.start+1
|
||||||
|
LD BC,CLEAR_ZONE.size-1
|
||||||
|
LD (HL),A
|
||||||
|
LDIR
|
||||||
|
LD HL,':'*256 + 'X'
|
||||||
|
LD (CORE_BUFFERS.CurrentPath),HL
|
||||||
|
LD A,'\' ;
|
||||||
|
LD (CORE_BUFFERS.CurrentDirectory),A
|
||||||
|
LD (CORE_BUFFERS.WorkDirectory),A
|
||||||
|
;
|
||||||
|
LD A,#FF
|
||||||
|
LD (CORE_BUFFERS.FS_Buffer.DRIVE),A
|
||||||
|
;
|
||||||
|
;R07 ;R11
|
||||||
|
;R11
|
||||||
|
LD HL,CORE_BUFFERS.FM_BUF
|
||||||
|
LD (HL),'.'
|
||||||
|
;R11
|
||||||
|
;---------------------------;
|
||||||
|
;R02
|
||||||
|
;LD B,#FF ;INIT ENVIRONMENT
|
||||||
|
CALL INITENV
|
||||||
|
; IFN CLASSIC_CURSOR
|
||||||
|
CALL SETUP_CURSORS
|
||||||
|
; ENDIF
|
||||||
|
;R02
|
||||||
|
JP VERSION
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
INTx38_Handler: PUSH AF
|
||||||
|
EX AF,AF'
|
||||||
|
PUSH AF
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
PUSH IX
|
||||||
|
PUSH IY
|
||||||
|
CALL KEYSCAN
|
||||||
|
LD C,Dss.Mouse.GetPackets
|
||||||
|
RST ToDSS.Mouse
|
||||||
|
;CALL M_INT
|
||||||
|
; IFN CLASSIC_CURSOR
|
||||||
|
CALL cursor_interrupt; ¢¥ªâ®à ®¡á«ã¦. ªãàá®à ;!!!!! VASIL
|
||||||
|
; ENDIF
|
||||||
|
POP IY
|
||||||
|
POP IX
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
POP BC
|
||||||
|
EXX
|
||||||
|
POP HL
|
||||||
|
POP DE
|
||||||
|
POP BC
|
||||||
|
POP AF
|
||||||
|
EX AF,AF'
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
;R03
|
||||||
|
;R07Allocate memory
|
||||||
|
; LD BC,#03C2
|
||||||
|
; RST ToBIOS
|
||||||
|
; LD HL,BANKTBL
|
||||||
|
; LD C,A
|
||||||
|
; LD B,#FF
|
||||||
|
;VERINIT INC B
|
||||||
|
; PUSH BC
|
||||||
|
; PUSH HL
|
||||||
|
; LD A,C
|
||||||
|
; LD C,#C4
|
||||||
|
; RST ToBIOS
|
||||||
|
; POP HL
|
||||||
|
; POP BC
|
||||||
|
; LD (HL),A
|
||||||
|
; INC HL
|
||||||
|
; JR NC,VERINIT
|
||||||
|
;R07;R03
|
||||||
|
;R07 JP INIT2 ;R03
|
||||||
|
; DS $/256+1*256-$,0 c:\bin\menu
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;MEMTAB: BLOCK 256,0
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
_mInfoALIGN 256,0
|
||||||
|
;------------------------------------------------------------------------------------------------------------------------;
|
||||||
|
GO_ZERO EQU #0000
|
||||||
|
;FUNCTION ADDRESS ARRAY
|
||||||
|
DSS_API_TABLE: ;DS 512 ;,0
|
||||||
|
;...............................................[LOW ADDRESS ]:
|
||||||
|
; 0 1 2 3 4 5 6 7 8 9 DEC HEX
|
||||||
|
DB low F_START, low CHDISK_FN, low CURDISK_FN,low DISKINF, low NOPS, low NOPS, low NOPS, low NOPS, low SCANDRV, low BOOTDSK ; 0 00..09
|
||||||
|
DB low CREATE, low CREATE.NEW, low NOPS, low NOPS, low DEL_FN, low NOPS, low RENAME, low OPEN_FN, low CLOSE_FN, low READ ; 1 0A..13
|
||||||
|
DB low WRITE, low MOVE_FP, low ATTRIB, low GET_D_T, low PUT_D_T, low F_FIRST_FN,low F_NEXT, low MKDIR.B, low RMDIR, low CHDIR_FN ; 2 14..1D
|
||||||
|
DB low CURRDIR_FN,low NOPS, low NOPS, low SYSTIME, low SETTIME, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 3 1E..27
|
||||||
|
DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low WAITKEY, low SCANKEY ; 4 28..31
|
||||||
|
DB low ECHOKEY, low CTRLKEY, low NOPS, low K_CLEAR, low K_SETUP, low TESTKEY, low SETWIN, low SETWIN1, low SETWIN2, low SETWIN3 ; 5 32..3B
|
||||||
|
DB low FREEMEM, low GETMEM, low RETMEM, low SETMEM, low EXEC, low LEAVE, low GET_ERR, low GSWITCH, low DOSNAME, low EX_PATH ; 6 3C..45
|
||||||
|
DB low ENVIRON, low APPINFO, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 7 46..4F
|
||||||
|
DB low SETVMOD, low GETVMOD, low LOCATE, low CURSOR, low SELPAGE, low SCROLL, low CLEAR, low RDCHAR, low WRCHAR, low WINCOPY ; 8 50..59
|
||||||
|
DB low WINREST, low PUTCHAR, low PCHARS, low LIB_SUB, low NOPS, low PRINT ; 9 5A..5F
|
||||||
|
|
||||||
|
;[ ] R09
|
||||||
|
.low_short EQU $ - DSS_API_TABLE
|
||||||
|
IFN SHORT_RSTx10_TABLE
|
||||||
|
;
|
||||||
|
DB low NOPS, low NOPS, low NOPS, low NOPS ; 9 60..63
|
||||||
|
DB low NOPS, low NOPS, low NOPS, low NOPS, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 10 64..6D
|
||||||
|
DUP 13
|
||||||
|
DB low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO, low GO_ZERO ; 110-239 6E-EF
|
||||||
|
EDUP
|
||||||
|
DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 24 F0..F9
|
||||||
|
DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; END ; 25 FA..FF
|
||||||
|
;
|
||||||
|
ELSE ;!TODO free space
|
||||||
|
|
||||||
|
_mInfoBLOCK DSS_API_TABLE+#100 - $,0
|
||||||
|
;[ ] R09
|
||||||
|
ENDIF
|
||||||
|
;...............................................[HIGH ADDRESS]:
|
||||||
|
DB high F_START, high CHDISK_FN, high CURDISK_FN,high DISKINF,high NOPS, high NOPS, high NOPS, high NOPS, high SCANDRV, high BOOTDSK
|
||||||
|
DB high CREATE, high CREATE.NEW,high NOPS, high NOPS, high DEL_FN, high NOPS, high RENAME, high OPEN_FN,high CLOSE_FN,high READ
|
||||||
|
DB high WRITE, high MOVE_FP, high ATTRIB, high GET_D_T,high PUT_D_T,high F_FIRST_FN,high F_NEXT, high MKDIR.B,high RMDIR, high CHDIR_FN
|
||||||
|
DB high CURRDIR_FN,high NOPS, high NOPS, high SYSTIME,high SETTIME,high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
|
||||||
|
DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high WAITKEY, high SCANKEY
|
||||||
|
DB high ECHOKEY, high CTRLKEY, high NOPS, high K_CLEAR,high K_SETUP,high TESTKEY, high SETWIN, high SETWIN1,high SETWIN2, high SETWIN3
|
||||||
|
DB high FREEMEM, high GETMEM, high RETMEM, high SETMEM, high EXEC, high LEAVE, high GET_ERR,high GSWITCH,high DOSNAME, high EX_PATH
|
||||||
|
DB high ENVIRON, high APPINFO, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
|
||||||
|
DB high SETVMOD, high GETVMOD, high LOCATE, high CURSOR, high SELPAGE,high SCROLL, high CLEAR, high RDCHAR, high WRCHAR, high WINCOPY
|
||||||
|
DB high WINREST, high PUTCHAR, high PCHARS, high LIB_SUB,high NOPS, high PRINT
|
||||||
|
|
||||||
|
;[ ] R09
|
||||||
|
.high_short EQU $ - DSS_API_TABLE - .low_short
|
||||||
|
IFN SHORT_RSTx10_TABLE
|
||||||
|
;
|
||||||
|
DB high NOPS, high NOPS, high NOPS, high NOPS
|
||||||
|
DB high NOPS, high NOPS, high NOPS, high NOPS, high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO
|
||||||
|
DUP 13
|
||||||
|
DB high GO_ZERO, high GO_ZERO, high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO,high GO_ZERO,high GO_ZERO, high GO_ZERO
|
||||||
|
EDUP
|
||||||
|
DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
|
||||||
|
DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS ; END
|
||||||
|
;
|
||||||
|
ELSE
|
||||||
|
;!TODO free space
|
||||||
|
;_mInfoBLOCK DSS_API_TABLE+#200 - $,0
|
||||||
|
;[ ] R09
|
||||||
|
ENDIF
|
||||||
|
; DB low WINREST, low PUTCHAR, low PCHARS, low NOPS, low NOPS, low PRINT, low NOPS, low NOPS, low NOPS, low NOPS ; 9 5A..63
|
||||||
|
; DB high WINREST,high PUTCHAR,high PCHARS, high NOPS, high NOPS, high PRINT, high NOPS, high NOPS, high NOPS, high NOPS
|
||||||
|
;---------------------------------------------------------------------------------------------------------------------------------------------------------------;
|
||||||
|
;[INCLUDE]
|
||||||
|
;!TODO § ¬¥¨âì ¯®-¬ ªá¨¬®¬ã ¢áñ ¢ KEYINTER.ASM ¢ë§®¢ë ¡¨®á
|
||||||
|
INCLUDE "KEYINTER.ASM"
|
||||||
|
INCLUDE "API.ASM"
|
||||||
|
INCLUDE "DOS_Proc.asm"
|
||||||
|
INCLUDE "FS_Module.asm"
|
||||||
|
INCLUDE "Procedures.asm"
|
||||||
|
;INCLUDE "drivers/drv_to_sys_errors.asm" ; !TODO
|
||||||
|
|
||||||
|
; [ ] 26/06/2024& read only 64kb cluster ; !TODO cluster 64kb
|
||||||
|
CHECK_64kb_CLUSTER:
|
||||||
|
LD HL,(CORE_BUFFERS.FS_Buffer.BytesPerCluster)
|
||||||
|
; CF=0
|
||||||
|
ADC HL,HL
|
||||||
|
LD A,DSS_Error.sys.WRITE_PROTECT
|
||||||
|
RET NZ
|
||||||
|
CCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
;!FIXIT ª ¡ãä¥à ¬
|
||||||
|
; Œ áᨢ «®£. ®¬¥à®¢ ¡ ®ª à áè¨à¥¨ï DSS
|
||||||
|
BANKTBL: BLOCK USING_MEMPAGES+1,#FF ; +1 ¤«ï COREPAGE
|
||||||
|
HANDBUF: BLOCK HANDBUF.SIZE,0
|
||||||
|
;
|
||||||
|
; ; FAT_DIRECTORY_RECORD ; !HARDCODE
|
||||||
|
MASKARE: BLOCK 8,0 ; ¨¬ï ä ©«
|
||||||
|
BLOCK 3,0 ; à áè.
|
||||||
|
BLOCK 21,0 ; 11+21=32
|
||||||
|
;
|
||||||
|
DISPLAY "DOS-MAIN end address: ",/H,$-1
|
||||||
|
;
|
||||||
|
|
||||||
|
;!TODO ª ¡ãä¥à ¬!
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
/*
|
||||||
|
; 259
|
||||||
|
CurrentPath: DB 'X'
|
||||||
|
DB ':'
|
||||||
|
CurrentDirectory: DB '\'
|
||||||
|
.DEPTH: EQU DIRECTORY_PATH_LENGTH
|
||||||
|
BLOCK CurrentDirectory.DEPTH,0 ; ¥ .DEPTH-1 ç⮡ ¡ë« 0 ¢ ª®æ¥
|
||||||
|
;
|
||||||
|
; 257
|
||||||
|
WorkDirectory: DB '\'
|
||||||
|
.DEPTH: EQU DIRECTORY_PATH_LENGTH
|
||||||
|
BLOCK WorkDirectory.DEPTH,0 ; ¥ .DEPTH-1 ç⮡ ¡ë« 0 ¢ ª®æ¥
|
||||||
|
|
||||||
|
; 516
|
||||||
|
*/
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
;
|
||||||
|
;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < <
|
||||||
|
;
|
||||||
|
;
|
||||||
|
CLEAR_ZONE.start EQU $
|
||||||
|
|
||||||
|
MODULE CORE_BUFFERS
|
||||||
|
BUFFERSplace _sBuffers=$
|
||||||
|
FM_BUF _sFM = BUFFERSplace.FileManipulator
|
||||||
|
.Size EQU _sFM
|
||||||
|
.FullSize EQU FMCOUNT*FM_BUF.Size
|
||||||
|
FS_Buffer _sFS_Buffer = BUFFERSplace.FS_Buffer
|
||||||
|
EXEBUFF _sEXE_HEADER = BUFFERSplace.EXE_Header
|
||||||
|
XSTACK _sStack = BUFFERSplace.Stack
|
||||||
|
.Spoint EQU XSTACK + _sStack
|
||||||
|
BUFFER EQU BUFFERSplace.Buffer
|
||||||
|
SECTOR_BUFFER EQU BUFFER ;!TODO ®â¤¥«¨âì SECTOR_BUFFER ®â BUFFER
|
||||||
|
MemoryTable EQU BUFFERSplace.MemoryTable
|
||||||
|
CurrentPath EQU BUFFERSplace.CurrentPath
|
||||||
|
CurrentDirectory EQU BUFFERSplace.CurrentDirectory
|
||||||
|
.DEPTH EQU DIRECTORY_PATH_LENGTH
|
||||||
|
WorkDirectory EQU BUFFERSplace.WorkDirectory
|
||||||
|
.DEPTH EQU DIRECTORY_PATH_LENGTH
|
||||||
|
ENDMODULE
|
||||||
|
;
|
||||||
|
; CurrentPath EQU CORE_BUFFERS.BUFFERSplace + _sBuffers
|
||||||
|
; CurrentDirectory EQU CurrentPath + 2
|
||||||
|
; .DEPTH: EQU DIRECTORY_PATH_LENGTH
|
||||||
|
; ;
|
||||||
|
; WorkDirectory EQU CurrentDirectory + 1 + CurrentDirectory.DEPTH
|
||||||
|
; .DEPTH: EQU DIRECTORY_PATH_LENGTH
|
||||||
|
;
|
||||||
|
CLEAR_ZONE.size EQU _sBuffers
|
||||||
|
|
||||||
|
|
||||||
|
ASSERT (CLEAR_ZONE.start + _sBuffers)<#4000, "Warning!!! OUT OF SLOT0"
|
||||||
|
|
||||||
|
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||||
|
DISPLAY "CLEAR_ZONE.start ", /H, CLEAR_ZONE.start
|
||||||
|
DISPLAY "CLEAR_ZONE.Size ", /H, CLEAR_ZONE.size
|
||||||
|
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||||
|
DISPLAY "Consist: "
|
||||||
|
DISPLAY " FM_BUF ", /H, CORE_BUFFERS.FM_BUF
|
||||||
|
DISPLAY " FM_BUF.Size: ", /H, CORE_BUFFERS.FM_BUF.Size
|
||||||
|
DISPLAY " FM_BUF.FullSize ", /H, CORE_BUFFERS.FM_BUF.FullSize
|
||||||
|
DISPLAY " FS_Buffer ", /H, CORE_BUFFERS.FS_Buffer
|
||||||
|
DISPLAY " FS_Buffer.Size ", /H, CORE_BUFFERS.EXEBUFF - CORE_BUFFERS.FS_Buffer
|
||||||
|
DISPLAY " EXEBUFF ", /H, CORE_BUFFERS.EXEBUFF
|
||||||
|
DISPLAY " Size ", /H, CORE_BUFFERS.XSTACK - CORE_BUFFERS.EXEBUFF
|
||||||
|
DISPLAY " XSTACK ", /H, CORE_BUFFERS.XSTACK
|
||||||
|
DISPLAY " Size ", /H, CORE_BUFFERS.BUFFER - CORE_BUFFERS.XSTACK
|
||||||
|
DISPLAY " BUFFER ", /H, CORE_BUFFERS.BUFFER
|
||||||
|
DISPLAY " Size ", /H, CORE_BUFFERS.MemoryTable - CORE_BUFFERS.BUFFER
|
||||||
|
DISPLAY " MemoryTable ", /H, CORE_BUFFERS.MemoryTable
|
||||||
|
DISPLAY " Size ", /H, _sBuffers - (CORE_BUFFERS.MemoryTable - CORE_BUFFERS.BUFFERSplace)
|
||||||
|
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||||
|
DISPLAY "CLEAR_ZONE.End ", /H, CLEAR_ZONE.start + CLEAR_ZONE.size
|
||||||
|
DISPLAY "--- --- --- --- --- --- --- ---"
|
||||||
|
|
||||||
|
EXPORT CORE_BUFFERS.BUFFERSplace
|
||||||
|
EXPORT CORE_BUFFERS.FM_BUF
|
||||||
|
EXPORT CORE_BUFFERS.FS_Buffer
|
||||||
|
EXPORT CORE_BUFFERS.EXEBUFF
|
||||||
|
EXPORT CORE_BUFFERS.XSTACK
|
||||||
|
EXPORT CORE_BUFFERS.BUFFER
|
||||||
|
EXPORT CORE_BUFFERS.SECTOR_BUFFER
|
||||||
|
EXPORT CORE_BUFFERS.MemoryTable
|
||||||
|
EXPORT CORE_BUFFERS.CurrentDirectory
|
||||||
|
EXPORT CORE_BUFFERS.WorkDirectory
|
||||||
|
/*
|
||||||
|
;R11 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||||||
|
FM_BUF _sFM=$
|
||||||
|
.Size EQU _sFM
|
||||||
|
.FullSize EQU FMCOUNT*FM_BUF.Size
|
||||||
|
|
||||||
|
;????? ¥ £à㧨âáï «¨ ¯®«®áâìî ᥪâ®à ¢ 512 ¡ ©â®¢ ¯à¨ § £à㧪¥ åí¤¥à ?
|
||||||
|
EXEBUFF _sEXE_HEADER=$+FM_BUF.FullSize
|
||||||
|
; EXEBUFF:
|
||||||
|
; DB "EXE"
|
||||||
|
; DB #00
|
||||||
|
; OFFCOD1 DW #0000
|
||||||
|
; OFFCOD2 DW #0000
|
||||||
|
; LOADER DW #0000
|
||||||
|
; DW #0000
|
||||||
|
; DW #0000
|
||||||
|
; DW #0000
|
||||||
|
; LD_ADDR DW #0000
|
||||||
|
; PC_REG DW #0000
|
||||||
|
; SP_REG DW #0000
|
||||||
|
; BLOCK 512-($-EXEBUFF),0
|
||||||
|
|
||||||
|
;(!!!HERE STACK FOR EXEC!!!)
|
||||||
|
; BLOCK 255,0
|
||||||
|
;XSTACK DB #00
|
||||||
|
XSTACK EQU EXEBUFF+_sEXE_HEADER+255
|
||||||
|
|
||||||
|
BUFFER EQU XSTACK+1
|
||||||
|
SECTOR_BUFFER EQU BUFFER
|
||||||
|
;R11 ////////////////////////////////
|
||||||
|
*/
|
||||||
|
|
||||||
|
;
|
||||||
|
;> > > > > > > > > > > > > > > > BUFFERS < < < < < < < < < < < < < < < <
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||
|
; § âàñâáï ¯®á«¥ ¨¨æ¨ «¨§ 樨
|
||||||
|
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||
|
|
||||||
|
|
||||||
|
; <20>¥à¢ë© áâ àâ á¨á⥬ë, ¯®á«¥ ¨¨æ¨ «¨§ 樨 ¤à¥á ¢ â ¡«¨æ¥ ¬¥ï¥âáï VERSION
|
||||||
|
F_START: DI
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
;LD (.saveDRV),A
|
||||||
|
LD H,A
|
||||||
|
LD (.saveDRV),HL ; H - ®¬¥à ãáâனá⢠, L - ®¬¥à à §¤¥« ãáâனá⢥
|
||||||
|
;
|
||||||
|
|
||||||
|
;R12
|
||||||
|
LD HL,0 ; ¯¨á âì ¢ ¨ªã¤
|
||||||
|
LD C,BIOS.FN_VERSION
|
||||||
|
RST ToBIOS
|
||||||
|
JR C,.err_oldBIOS
|
||||||
|
EX DE,HL
|
||||||
|
LD DE,MINIMUM_BIOS_VERSION
|
||||||
|
SBC HL,DE
|
||||||
|
JR C,.err_oldBIOS
|
||||||
|
; LD A,(.saveDRV+1)
|
||||||
|
; CP 2 ;¯à®¢¥àª § £à㧪ã á ¤¨áª¥âë, ¥á«¨ á ¤¨áª¥âë, â® ¬®¦® ¯à®¨£®à¨âì § ¯ã᪠BIOS ¨¦¥ 2.55
|
||||||
|
; JR NC,.err_oldBIOS
|
||||||
|
; LD HL,#C9AF ; XOR A : RET opcodes
|
||||||
|
; LD (DRV_CONTENT + INITDVC.if_old),HL
|
||||||
|
;
|
||||||
|
|
||||||
|
.good: CALL DEPLOY ;R07 ;íâ ¯à®æ¥¤ãà § âàñâáï ¯®á«¥ ¨á¯®«¥¨ï
|
||||||
|
RET C ;R10
|
||||||
|
CALL KEYBOARD_INIT
|
||||||
|
CALL PRINT_INIT
|
||||||
|
LD C,Dss.Mouse.Init
|
||||||
|
RST ToDSS.Mouse
|
||||||
|
LD A,(VMODE)
|
||||||
|
LD C,Dss.Mouse.SetVideoMode
|
||||||
|
RST ToDSS.Mouse
|
||||||
|
;CALL INITDVC ;R05
|
||||||
|
;R05
|
||||||
|
LD C,Dss.DRV.Init
|
||||||
|
RST ToDSS.DRV
|
||||||
|
LD (LDRIVE),A
|
||||||
|
;R05
|
||||||
|
.saveDRV+1:
|
||||||
|
;[x] 17.12.2023 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
LD HL,0 ; H - ®¬¥à ãáâனá⢠, L - ®¬¥à à §¤¥« ãáâனá⢥
|
||||||
|
;LD A,H
|
||||||
|
;LD A,0
|
||||||
|
;
|
||||||
|
;LD B,1
|
||||||
|
CALL BOOTDSK.SET
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
EI
|
||||||
|
;Set new address fn. VERSION
|
||||||
|
LD HL,DSS_API_TABLE
|
||||||
|
LD (HL),low VERSION ;R03
|
||||||
|
INC H
|
||||||
|
LD (HL),high VERSION ;R03
|
||||||
|
JP CLEAR_BUFFER_AND_INIT_PROC
|
||||||
|
;
|
||||||
|
;R12
|
||||||
|
.err_oldBIOS:
|
||||||
|
IN A,(SLOT0)
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD HL,.err_oldBIOS_message + SLOT3.MEM_ADDR
|
||||||
|
;LD C,Dss.PChars
|
||||||
|
;RST ToDSS
|
||||||
|
CALL PCHARS
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
.err_oldBIOS_message:
|
||||||
|
DB "\r\nWARNING! This version of DSS requires BIOS v"
|
||||||
|
DB STR_MINIMUM_BIOS_VERSION
|
||||||
|
DZ " or later to boot from IDE."
|
||||||
|
;
|
||||||
|
|
||||||
|
DEPLOY: ;Allocate memory
|
||||||
|
LD BC,USING_MEMPAGES*256 + BIOS.GetMem
|
||||||
|
RST ToBIOS
|
||||||
|
RET C ;R10
|
||||||
|
LD C,A
|
||||||
|
|
||||||
|
IN A,(SLOT3)
|
||||||
|
PUSH AF
|
||||||
|
IN A,(SLOT0)
|
||||||
|
LD (DRV_CONTENT + DRV_PAGE.MAIN_PAGE_NUMBER),A ;!TEST
|
||||||
|
OUT (SLOT3),A
|
||||||
|
|
||||||
|
LD A,C
|
||||||
|
LD HL,BANKTBL + #C000
|
||||||
|
LD C,BIOS.GetMemBlkPages
|
||||||
|
RST ToBIOS
|
||||||
|
; ¤®«¦ ¨¤â¨ ¯®á«¥ GetMemBlkPages, ç⮡ ¢¬¥áâ®
|
||||||
|
; § ªàë¢ èª¨ #FF ¯®áâ ¢¨âì áâà ¨æã COREPAGE
|
||||||
|
LD HL,BANKTBL + COREPAGE
|
||||||
|
IN A,(SLOT0)
|
||||||
|
LD (HL),A
|
||||||
|
; ¤«ï API ¤à ©¢¥à ¬ë誨
|
||||||
|
LD (MOUSE_HANDLER.CorePage),A
|
||||||
|
LD A,(BANKTBL + DRVPAGE)
|
||||||
|
LD (RST_0x30.drv_page),A
|
||||||
|
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
|
||||||
|
SET_PAGE_X DRVPAGE
|
||||||
|
|
||||||
|
PUSH AF
|
||||||
|
LD HL,DRV_CONTENT
|
||||||
|
LD DE,#C000
|
||||||
|
LD BC,DRV_CONTENT.SIZE
|
||||||
|
LDIR
|
||||||
|
IN A,(SLOT3)
|
||||||
|
LD (DRV_PG_NUMBER),A
|
||||||
|
POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
AND A ;R10
|
||||||
|
RET
|
||||||
|
|
||||||
|
IF ENVVALUE != CORE_BUFFERS.BUFFER
|
||||||
|
ASSERT "Warning! ENVVALUE != BUFFER"
|
||||||
|
//BLOCK 1000,0
|
||||||
|
ENDIF
|
||||||
|
|
||||||
|
;--- --- --- --- [Build version] --- --- --- ---;
|
||||||
|
; C_OSTYPE
|
||||||
|
;--- --- --- --- --- --- --- --- --- --- --- ---;
|
||||||
|
|
||||||
|
DISPLAY "FAT MODULE SIZE: ",/A,FAT_MODULE_SIZE
|
||||||
|
DISPLAY "DEPLOY end address: ",/H,$
|
||||||
|
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||;
|
||||||
|
DISPLAY "Space for DRV-MAIN: ",/A,#4000-$," bytes."
|
||||||
|
DRV_CONTENT:
|
||||||
|
DISP 0
|
||||||
|
INCLUDE 'DRV-MAIN.ASM'
|
||||||
|
ENT
|
||||||
|
DRV_CONTENT.SIZE EQU $-DRV_CONTENT
|
||||||
|
|
||||||
|
BIN_END_ADDRESS EQU $
|
||||||
|
|
||||||
|
DISPLAY "END ADDRESS: ",/H,BIN_END_ADDRESS
|
||||||
|
DISPLAY "Memory leacks when > ",/H, #4000+SUBLOAD_SIZE*512
|
||||||
|
ASSERT $ < (#4001+SUBLOAD_SIZE*512),'-> Memory leack!!!';
|
||||||
|
ASSERT DRV_CONTENT.SIZE < #4001,'-> Drivers code size > #4000!!!';
|
||||||
|
;[END]
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
; DTA DB " "
|
||||||
|
; DB " "
|
||||||
|
; DB #20
|
||||||
|
; DW 0,0,0,0,0
|
||||||
|
; DW 0
|
||||||
|
; DW 0
|
||||||
|
; CLUSTER DW 0
|
||||||
|
; SIZE DW 0,0
|
||||||
|
; ASCIIZ DB "FILENAME.EXT",#00
|
||||||
|
|
||||||
|
|
||||||
|
;R06
|
||||||
|
;R06 BUFFER
|
||||||
|
;R06 SECTOR_BUFFER DB ". ",#10
|
||||||
|
;R06 DW 0,0,0,0,0
|
||||||
|
;R06 DW #0000
|
||||||
|
;R06 DW #0000
|
||||||
|
;R06 DW #0000
|
||||||
|
;R06 DW #0000,0000
|
||||||
|
;R06 DB ".. ",#10
|
||||||
|
;R06 DW 0,0,0,0,0
|
||||||
|
;R06 DW #0000
|
||||||
|
;R06 DW #0000
|
||||||
|
;R06 DW #0000
|
||||||
|
;R06 DW #0000,0000
|
||||||
|
;R06 DS 512-64 ;,0
|
||||||
@ -1,20 +1,142 @@
|
|||||||
;
|
;
|
||||||
MACRO _mSavePath
|
; MACRO BUFFER_KEYINTER
|
||||||
; PUSH HL
|
; _mInfoALIGN 256,0
|
||||||
; LD HL,BACK_CUR_PATH
|
; ;KEYBOARD BUFFER
|
||||||
; EX (SP),HL
|
; SBUF: BLOCK 64,0
|
||||||
; CALL SAVE_CUR_PATH
|
|
||||||
ENDM
|
|
||||||
|
; HEAD DB #00
|
||||||
|
; HOST DB #00
|
||||||
|
|
||||||
|
; K_LOCK EQU $-KEYFLAG
|
||||||
|
; LANG_L EQU 7
|
||||||
|
; PAUSE_L EQU 6
|
||||||
|
; RES5_L EQU 5
|
||||||
|
; RES4_L EQU 4
|
||||||
|
; NUM_L EQU 3
|
||||||
|
; SCRL_L EQU 2
|
||||||
|
; INS_L EQU 1
|
||||||
|
; CAPS_L EQU 0
|
||||||
|
; KEYFLAG DB #02 ;D0-Key Pressed
|
||||||
|
|
||||||
|
; K_SHIFT EQU $-KEYFLAG
|
||||||
|
; L_SHIFT EQU 7
|
||||||
|
; R_SHIFT EQU 6
|
||||||
|
; X_CTRL EQU 5
|
||||||
|
; X_ALT EQU 4
|
||||||
|
; L_CTRL EQU 3
|
||||||
|
; L_ALT EQU 2
|
||||||
|
; R_CTRL EQU 1
|
||||||
|
; R_ALT EQU 0
|
||||||
|
; KEYCTRL DB #00
|
||||||
|
|
||||||
|
; KEYFLG EQU $-KEYFLAG
|
||||||
|
; FLAG_E0 EQU 7
|
||||||
|
; FLAG_F0 EQU 6
|
||||||
|
; FLAG_E1 EQU 5
|
||||||
|
; FLAG_04 EQU 4
|
||||||
|
; FLAG_03 EQU 3
|
||||||
|
; FLAG_02 EQU 2
|
||||||
|
; FLAG_01 EQU 1
|
||||||
|
; FLAG_00 EQU 0
|
||||||
|
; DB #00
|
||||||
|
|
||||||
|
; SOUND_K EQU $-KEYFLAG
|
||||||
|
; FLAG_S7 EQU 7
|
||||||
|
; FLAG_S6 EQU 6
|
||||||
|
; FLAG_S5 EQU 5
|
||||||
|
; FLAG_S4 EQU 4
|
||||||
|
; FLAG_S3 EQU 3
|
||||||
|
; FLAG_S2 EQU 2
|
||||||
|
; SF_ALT EQU 1
|
||||||
|
; SF_BUFF EQU 0
|
||||||
|
; DB #03
|
||||||
|
; ;
|
||||||
|
; ; D15 - LShift
|
||||||
|
; ; D14 - RShift
|
||||||
|
; ; D13 - CTRL
|
||||||
|
; ; D12 - ALT
|
||||||
|
; ; D11 - LCTRL
|
||||||
|
; ; D10 - LALT
|
||||||
|
; ; D9 - RCTRL
|
||||||
|
; ; D8 - RALT
|
||||||
|
; ; D7 - Language Lock
|
||||||
|
; ; D6 - Reserved
|
||||||
|
; ; D5 - Reserved
|
||||||
|
; ; D4 - Reserved
|
||||||
|
; ; D3 - Num Lock
|
||||||
|
; ; D2 - Scroll Lock
|
||||||
|
; ; D1 - Insert Lock
|
||||||
|
; ; D0 - Caps Lock
|
||||||
|
; ;
|
||||||
|
; ; D15 - Keystroke
|
||||||
|
; ; D14
|
||||||
|
; ; D13 \
|
||||||
|
; ; D12 \
|
||||||
|
; ; D11 -- Position code (0...5Ah)
|
||||||
|
; ; D10 /
|
||||||
|
; ; D9 /
|
||||||
|
; ; D8
|
||||||
|
; ; D7..D0 - ASCII code
|
||||||
|
; ;
|
||||||
|
; ENDM
|
||||||
;
|
;
|
||||||
|
|
||||||
;
|
;
|
||||||
MACRO _mRestorePath
|
; MACRO TABLE_XLAT_T
|
||||||
; CALL BACK_CUR_PATH
|
; _mInfoALIGN 256,0
|
||||||
|
; ; 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||||
|
; XLAT_T: DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00
|
||||||
|
; DB #00,#37,#29,#00,#36,#10,#02,#00,#00,#00,#2A,#1E,#1D,#11,#03,#00 ;10
|
||||||
|
; DB #00,#2C,#2B,#1F,#12,#05,#04,#00,#00,#38,#2D,#20,#14,#13,#06,#00 ;20
|
||||||
|
; DB #00,#2F,#2E,#22,#21,#15,#07,#00,#00,#00,#30,#23,#16,#08,#09,#00 ;30
|
||||||
|
; DB #00,#31,#24,#17,#18,#0B,#0A,#00,#00,#32,#33,#25,#26,#19,#0C,#00 ;40
|
||||||
|
; DB #00,#00,#27,#00,#1A,#0D,#00,#00,#1C,#34,#28,#1B,#00,#35,#00,#00 ;50
|
||||||
|
; DB #00,#00,#00,#00,#00,#00,#0E,#00,#00,#51,#00,#54,#57,#00,#00,#00 ;60
|
||||||
|
; DB #50,#4F,#52,#55,#56,#58,#01,#49,#45,#4D,#53,#4C,#4B,#59,#48,#00 ;70
|
||||||
|
; DB #00,#00,#00,#41,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 ;80
|
||||||
|
; ENDM
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
; ‚•Ž„: L - «®£¨ç¥áª¨© ®¬¥à ¢ â ¡«¨æ¥
|
||||||
|
; ‚›•Ž„: IY - ç «® § ¯¨á¨
|
||||||
|
; <20>Ž<EFBFBD>’ˆ’: HL, DE, IY.
|
||||||
|
MACRO LOGDRV_ENTRY_FIND tbl_addr
|
||||||
|
LD H,0
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
EX DE,HL
|
||||||
|
LD IY,tbl_addr
|
||||||
|
ADD IY,DE
|
||||||
ENDM
|
ENDM
|
||||||
;
|
;
|
||||||
|
|
||||||
;
|
;
|
||||||
MACRO _mRestorStackAfterRestorePath
|
MACRO _CALC_DEVICE_ENTRY tbl_addr
|
||||||
; POP HL ;CLEAR STACK "BACK_CUR_PATH"
|
CP DSS_MAX_DRIVES_AMOUNT+1
|
||||||
|
JR C,.norm
|
||||||
|
; Error!
|
||||||
|
LD A,DSS_MAX_DRIVES_AMOUNT
|
||||||
|
.norm: LD C,A
|
||||||
|
ADD A,A
|
||||||
|
ADD A,C
|
||||||
|
LD C,A
|
||||||
|
LD B,0
|
||||||
|
LD HL,tbl_addr
|
||||||
|
ADD HL,BC
|
||||||
|
ENDM
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
MACRO SET_PAGE_X new_page
|
||||||
|
LD A,(BANKTBL+new_page)
|
||||||
|
LD B,A
|
||||||
|
LD C,SLOT3
|
||||||
|
IN A,(SLOT3)
|
||||||
|
OUT (C),B
|
||||||
ENDM
|
ENDM
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -69,4 +191,30 @@
|
|||||||
MACRO C_OSRELEASE
|
MACRO C_OSRELEASE
|
||||||
DB "Estex DSS",0
|
DB "Estex DSS",0
|
||||||
ENDM
|
ENDM
|
||||||
|
;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
;
|
||||||
|
; MACRO _mSavePath force
|
||||||
|
; IF SAVE_PATH_MACRO
|
||||||
|
; PUSH HL
|
||||||
|
; IF force==1
|
||||||
|
; LD HL,BACK_CUR_PATH.force
|
||||||
|
; ELSE
|
||||||
|
; LD HL,BACK_CUR_PATH
|
||||||
|
; ENDIF
|
||||||
|
; EX (SP),HL
|
||||||
|
; CALL SAVE_CUR_PATH
|
||||||
|
; ENDIF
|
||||||
|
; ENDM
|
||||||
|
; MACRO _mRestorePath
|
||||||
|
; IF SAVE_PATH_MACRO
|
||||||
|
; CALL BACK_CUR_PATH.force
|
||||||
|
; ENDIF
|
||||||
|
; ENDM
|
||||||
|
; MACRO _mRestorStackAfterRestorePath
|
||||||
|
; IF SAVE_PATH_MACRO
|
||||||
|
; POP HL ;CLEAR STACK "BACK_CUR_PATH"
|
||||||
|
; ENDIF
|
||||||
|
; ENDM
|
||||||
;
|
;
|
||||||
241
DSS/ENVIRON.ASM
241
DSS/ENVIRON.ASM
@ -1,241 +0,0 @@
|
|||||||
;[BEGIN]
|
|
||||||
;//MODULE: ENVIRON
|
|
||||||
;//CREATE: 10-11-2002 AUTHOR: Denis Parinov
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;Rev Date Name Description
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;R01 19-11-2002 DNS CORRECT DE ADDRESS IN GETENV
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
|
|
||||||
; LD HL,MYVAR
|
|
||||||
; CALL SETENV
|
|
||||||
; LD HL,MYVAR2
|
|
||||||
; LD DE,MYBUF
|
|
||||||
; CALL GETENV
|
|
||||||
|
|
||||||
|
|
||||||
ENVIRON:
|
|
||||||
INC B
|
|
||||||
JR Z,INITENV ;B=FF
|
|
||||||
DEC B
|
|
||||||
JR Z,READENV ;B=0
|
|
||||||
DEC B
|
|
||||||
JP Z,GETENV ;B=1
|
|
||||||
DEC B
|
|
||||||
JP Z,SETENV ;B=2
|
|
||||||
LD A,DSS_Error.sys.INVALID_FUNCTION
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
INITENV LD A,ENVPAGE
|
|
||||||
CALL BANK
|
|
||||||
PUSH AF
|
|
||||||
LD DE,ENVIRONMENT
|
|
||||||
XOR A
|
|
||||||
LD (DE),A
|
|
||||||
INC DE
|
|
||||||
LD HL,DEFAULT_ENV
|
|
||||||
LD BC,DEF_ENV_SIZE
|
|
||||||
LDIR
|
|
||||||
LD (DE),A
|
|
||||||
EX DE,HL
|
|
||||||
LD DE,ENVIRONMENT
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
LD (ENVSIZE),HL
|
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
READENV:
|
|
||||||
PUSH HL
|
|
||||||
LD A,ENVPAGE
|
|
||||||
CALL BANK
|
|
||||||
LD H,A
|
|
||||||
LD C,SLOT3
|
|
||||||
IN L,(C)
|
|
||||||
EXX
|
|
||||||
LD HL,ENVIRONMENT
|
|
||||||
INC HL
|
|
||||||
POP DE
|
|
||||||
LD BC,(ENVSIZE)
|
|
||||||
EXX
|
|
||||||
;
|
|
||||||
.loop: OUT (C),L
|
|
||||||
EXX
|
|
||||||
LD A,(HL)
|
|
||||||
EXX
|
|
||||||
OUT (C),H
|
|
||||||
EXX
|
|
||||||
LD (DE),A
|
|
||||||
INC HL
|
|
||||||
INC DE
|
|
||||||
DEC BC
|
|
||||||
LD A,B
|
|
||||||
OR C
|
|
||||||
EXX
|
|
||||||
JR NZ,.loop
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
GETENV
|
|
||||||
PUSH DE
|
|
||||||
CALL ENV_EX
|
|
||||||
|
|
||||||
LD A,ENVPAGE
|
|
||||||
CALL BANK
|
|
||||||
EX AF,AF'
|
|
||||||
|
|
||||||
CALL F_ENV
|
|
||||||
POP DE
|
|
||||||
LD A,0
|
|
||||||
LD (DE),A
|
|
||||||
JR NC,GE_1
|
|
||||||
GE_0 LD A,(HL)
|
|
||||||
LDI
|
|
||||||
OR A
|
|
||||||
JR NZ,GE_0
|
|
||||||
DEC DE ;R01
|
|
||||||
LD A,#FF
|
|
||||||
|
|
||||||
GE_1 EX AF,AF'
|
|
||||||
OUT (SLOT3),A
|
|
||||||
EX AF,AF'
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
SETENV: CALL ENV_EX
|
|
||||||
;
|
|
||||||
LD A,ENVPAGE
|
|
||||||
CALL BANK
|
|
||||||
PUSH AF
|
|
||||||
;
|
|
||||||
CALL F_ENV
|
|
||||||
JR NC,PENV
|
|
||||||
XOR A
|
|
||||||
CPIR
|
|
||||||
LD A,B
|
|
||||||
OR C
|
|
||||||
JR Z,PENV
|
|
||||||
LDIR
|
|
||||||
; DEC DE
|
|
||||||
PENV LD A,(ENVVALUE)
|
|
||||||
OR A
|
|
||||||
JR Z,CLR_ENV
|
|
||||||
LD HL,ENVNAME
|
|
||||||
F_EVN2 LD A,(HL)
|
|
||||||
LDI
|
|
||||||
CP "="
|
|
||||||
JR NZ,F_EVN2
|
|
||||||
LD HL,ENVVALUE
|
|
||||||
F_EVN3 LD A,(HL)
|
|
||||||
LDI
|
|
||||||
OR A
|
|
||||||
JR NZ,F_EVN3
|
|
||||||
CLR_ENV XOR A
|
|
||||||
LD (DE),A
|
|
||||||
LD HL,ENVIRONMENT
|
|
||||||
EX DE,HL
|
|
||||||
SBC HL,DE
|
|
||||||
LD (ENVSIZE),HL
|
|
||||||
;
|
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
|
|
||||||
; RET:
|
|
||||||
; DE - VAR VALUE
|
|
||||||
; HL - VAR ADDRESS
|
|
||||||
; BC - ENVIRONMENT SIZE
|
|
||||||
F_ENV LD HL,ENVIRONMENT
|
|
||||||
LD BC,(ENVSIZE)
|
|
||||||
PUSH HL
|
|
||||||
F_EVN0 POP DE
|
|
||||||
LD DE,ENVNAME
|
|
||||||
XOR A
|
|
||||||
CPIR
|
|
||||||
PUSH HL
|
|
||||||
F_EVN1 LD A,(HL)
|
|
||||||
OR A
|
|
||||||
JR Z,END_OF_ENV
|
|
||||||
LD A,(DE)
|
|
||||||
CP (HL)
|
|
||||||
INC HL
|
|
||||||
INC DE
|
|
||||||
DEC BC
|
|
||||||
JR NZ,F_EVN0
|
|
||||||
CP "="
|
|
||||||
JR NZ,F_EVN1
|
|
||||||
SCF
|
|
||||||
END_OF_ENV
|
|
||||||
POP DE
|
|
||||||
RET
|
|
||||||
|
|
||||||
ENV_EX LD B,32
|
|
||||||
LD DE,ENVNAME
|
|
||||||
ENV_E0 XOR A
|
|
||||||
LD (DE),A
|
|
||||||
LD (ENVVALUE),A
|
|
||||||
ENV_E1 LD A,(HL)
|
|
||||||
INC HL
|
|
||||||
CP "="
|
|
||||||
JR Z,EQUAL_SG
|
|
||||||
OR A
|
|
||||||
JR Z,ENV_E3
|
|
||||||
CALL UPPER
|
|
||||||
LD (DE),A
|
|
||||||
INC DE
|
|
||||||
DJNZ ENV_E1
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
ENV_E3 LD A,"="
|
|
||||||
LD (DE),A
|
|
||||||
INC DE
|
|
||||||
XOR A
|
|
||||||
LD (DE),A
|
|
||||||
INC DE
|
|
||||||
RET
|
|
||||||
|
|
||||||
EQUAL_SG:
|
|
||||||
LD (DE),A
|
|
||||||
INC DE
|
|
||||||
XOR A
|
|
||||||
LD (DE),A
|
|
||||||
LD DE,ENVVALUE
|
|
||||||
LD (DE),A
|
|
||||||
LD C,#FF
|
|
||||||
ENV_E2 LD A,(HL)
|
|
||||||
LDI
|
|
||||||
OR A
|
|
||||||
RET Z
|
|
||||||
DJNZ ENV_E2
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
ENVNAME EQU EXEBUFF ;DS 32
|
|
||||||
ENVVALUE EQU BUFFER //#3800 ; BUFFER ;DS 128
|
|
||||||
|
|
||||||
ENVSIZE DW 1 ;E_END-ENVIRONMENT ;160
|
|
||||||
|
|
||||||
ENVIRONMENT EQU ENVADDR
|
|
||||||
|
|
||||||
DEFAULT_ENV
|
|
||||||
; DB "SYSTEM=C:\\system.exe",0
|
|
||||||
; DB "PATH=\\SYSTEM\\;\\COMMAND\\;",0
|
|
||||||
DB 0 ; "",0
|
|
||||||
DEF_ENV_SIZE EQU $-DEFAULT_ENV
|
|
||||||
|
|
||||||
; DB 0
|
|
||||||
; DB "SYSTEM=C:\system.exe",0
|
|
||||||
; DB "PATH=C:\;\FN\;",0
|
|
||||||
; DB "OS=ESTEX",0
|
|
||||||
; DB "VAR1=000",0
|
|
||||||
; DB "OSNAME=ESTEX 2002",0
|
|
||||||
; DB 0
|
|
||||||
;E_END
|
|
||||||
|
|
||||||
;[END]
|
|
||||||
1228
DSS/EXECUTE.ASM
1228
DSS/EXECUTE.ASM
File diff suppressed because it is too large
Load Diff
473
DSS/FAT_X.ASM
473
DSS/FAT_X.ASM
@ -1,473 +0,0 @@
|
|||||||
|
|
||||||
;[BEGIN]
|
|
||||||
;//MODULE: FAT_X
|
|
||||||
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
|
||||||
;//UPDATE: 24-10-1999 DNS Restore module
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;Rev Date Name Description
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;R01 10-02-1999 DNS UPGRADE FAT CASH
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
|
|
||||||
R_CLUST LD HL,#0001
|
|
||||||
LD (G_CLUST.num),HL
|
|
||||||
RET
|
|
||||||
|
|
||||||
G_CLUST:
|
|
||||||
.num+1: LD HL,#0001
|
|
||||||
G_CLUS1: INC HL
|
|
||||||
CALL R_F_FAT
|
|
||||||
CP 10
|
|
||||||
SCF
|
|
||||||
RET Z
|
|
||||||
LD A,D
|
|
||||||
OR E
|
|
||||||
JR NZ,G_CLUS1
|
|
||||||
LD (G_CLUST.num),HL
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
; HL - CLUSTER
|
|
||||||
|
|
||||||
INC_FAT PUSH HL
|
|
||||||
CALL G_CLUST
|
|
||||||
POP DE
|
|
||||||
RET C
|
|
||||||
PUSH HL
|
|
||||||
PUSH HL
|
|
||||||
EX DE,HL
|
|
||||||
INC_FA2 CALL R_F_FAT
|
|
||||||
EX DE,HL
|
|
||||||
JR NC,INC_FA2
|
|
||||||
EX DE,HL
|
|
||||||
POP DE
|
|
||||||
CALL W_T_FAT
|
|
||||||
POP HL
|
|
||||||
LD DE,(FatBuffer.ENDCLUS)
|
|
||||||
CALL W_T_FAT
|
|
||||||
CALL WR_FAT
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;R01
|
|
||||||
|
|
||||||
; HL - CLUSTER
|
|
||||||
; DE - (CLUSTER)
|
|
||||||
|
|
||||||
R_F_FAT EX DE,HL
|
|
||||||
LD HL,(MAX_CLU)
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
EX DE,HL
|
|
||||||
LD A,10
|
|
||||||
RET C
|
|
||||||
EXX
|
|
||||||
LD A,FATPAGE
|
|
||||||
CALL BANK
|
|
||||||
EXX
|
|
||||||
PUSH HL
|
|
||||||
PUSH AF
|
|
||||||
LD A,(FatBuffer.FAT_TYP)
|
|
||||||
CP "2"
|
|
||||||
JP Z,R_F_F12
|
|
||||||
R_F_F16 LD A,H
|
|
||||||
LD B,A
|
|
||||||
AND #0F
|
|
||||||
LD H,A
|
|
||||||
LD A,B
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
AND #0F ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
|
|
||||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
|
||||||
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
|
|
||||||
CP C
|
|
||||||
CALL NZ,RE_FAT ; A <> C - READ NEW BLOCK FAT
|
|
||||||
LD DE,FAT
|
|
||||||
ADD HL,DE
|
|
||||||
LD E,(HL)
|
|
||||||
INC HL
|
|
||||||
LD D,(HL)
|
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LD HL,#FFEF
|
|
||||||
XOR A ;DssErr.sys.NO_ERROR
|
|
||||||
SBC HL,DE
|
|
||||||
POP HL
|
|
||||||
;LD A,DssErr.sys.NO_ERROR
|
|
||||||
RET
|
|
||||||
|
|
||||||
;R01; HL - CLUSTER
|
|
||||||
;R01; DE - (CLUSTER)
|
|
||||||
;R01
|
|
||||||
;R01R_F_FAT EX DE,HL
|
|
||||||
;R01 LD HL,(MAX_CLU)
|
|
||||||
;R01 AND A
|
|
||||||
;R01 SBC HL,DE
|
|
||||||
;R01 EX DE,HL
|
|
||||||
;R01 LD A,10
|
|
||||||
;R01 RET C
|
|
||||||
;R01 PUSH HL
|
|
||||||
;R01 LD A,(FAT_TYP)
|
|
||||||
;R01 CP "2"
|
|
||||||
;R01 JP Z,R_F_F12
|
|
||||||
;R01R_F_F16 LD DE,768 ; DE - CLUSTERS IN CASH
|
|
||||||
;R01 XOR A
|
|
||||||
;R01R_F_00H INC A ; HL - CLUSTER
|
|
||||||
;R01 SBC HL,DE
|
|
||||||
;R01 JP NC,R_F_00H
|
|
||||||
;R01 ADD HL,DE
|
|
||||||
;R01 ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
|
||||||
;R01 DEC A
|
|
||||||
;R01 LD BC,(FATCASH) ; A - ELEMENT OF CASH
|
|
||||||
;R01 CP C
|
|
||||||
;R01 CALL NZ,RE_FAT
|
|
||||||
;R01 LD DE,FAT
|
|
||||||
;R01 ADD HL,DE
|
|
||||||
;R01 LD E,(HL)
|
|
||||||
;R01 INC HL
|
|
||||||
;R01 LD D,(HL)
|
|
||||||
;R01 LD HL,#FFEF
|
|
||||||
;R01 AND A
|
|
||||||
;R01 SBC HL,DE
|
|
||||||
;R01 POP HL
|
|
||||||
;R01 LD A,0
|
|
||||||
;R01 RET
|
|
||||||
;R01
|
|
||||||
;R01R_F_F12 LD D,H
|
|
||||||
;R01 LD E,L
|
|
||||||
;R01 ADD HL,HL
|
|
||||||
;R01 ADD HL,DE
|
|
||||||
;R01 RR H
|
|
||||||
;R01 RR L
|
|
||||||
;R01 PUSH AF
|
|
||||||
;R01 EX DE,HL
|
|
||||||
;R01 LD HL,(B_P_S)
|
|
||||||
;R01 LD B,H
|
|
||||||
;R01 LD C,L
|
|
||||||
;R01 ADD HL,HL
|
|
||||||
;R01 ADD HL,BC
|
|
||||||
;R01 EX DE,HL
|
|
||||||
;R01 XOR A ; DE - SIZE SECTOR * 3
|
|
||||||
;R01R_F_00 INC A ; HL - FAT OFFSET
|
|
||||||
;R01 SBC HL,DE
|
|
||||||
;R01 JP NC,R_F_00
|
|
||||||
;R01 ADD HL,DE
|
|
||||||
;R01 DEC A
|
|
||||||
|
|
||||||
R_F_F12 LD D,H
|
|
||||||
LD E,L
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,DE
|
|
||||||
RR H
|
|
||||||
RR L ;CLUSTER * 1.5
|
|
||||||
PUSH AF
|
|
||||||
LD A,H
|
|
||||||
LD B,A
|
|
||||||
AND #1F
|
|
||||||
LD H,A
|
|
||||||
LD A,B
|
|
||||||
RLCA
|
|
||||||
RLCA
|
|
||||||
RLCA
|
|
||||||
AND #07
|
|
||||||
LD BC,(FATCASH)
|
|
||||||
CP C
|
|
||||||
CALL NZ,RE_FAT
|
|
||||||
LD DE,FAT
|
|
||||||
ADD HL,DE
|
|
||||||
POP AF
|
|
||||||
LD E,(HL)
|
|
||||||
INC HL
|
|
||||||
LD D,(HL)
|
|
||||||
JR C,R_F_F01
|
|
||||||
LD A,D
|
|
||||||
AND #0F
|
|
||||||
LD D,A
|
|
||||||
JR R_F_F02
|
|
||||||
|
|
||||||
R_F_F01 LD A,E
|
|
||||||
AND #F0
|
|
||||||
LD E,A
|
|
||||||
RR D
|
|
||||||
RR E
|
|
||||||
RR D
|
|
||||||
RR E
|
|
||||||
RR D
|
|
||||||
RR E
|
|
||||||
RR D
|
|
||||||
RR E
|
|
||||||
R_F_F02 POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LD HL,#0FEF
|
|
||||||
XOR A ; ®¡ã«ï¥¬ CF ¨ ãáâ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = ã«î
|
|
||||||
SBC HL,DE
|
|
||||||
POP HL
|
|
||||||
RET
|
|
||||||
|
|
||||||
; HL - CLUSTER
|
|
||||||
; DE - (CLUSTER)
|
|
||||||
|
|
||||||
W_T_FAT PUSH DE
|
|
||||||
EX DE,HL
|
|
||||||
LD HL,(MAX_CLU)
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
EX DE,HL
|
|
||||||
POP DE
|
|
||||||
LD A,10
|
|
||||||
RET C
|
|
||||||
EXX
|
|
||||||
LD A,FATPAGE
|
|
||||||
CALL BANK
|
|
||||||
EXX
|
|
||||||
PUSH HL
|
|
||||||
PUSH AF
|
|
||||||
LD A,1
|
|
||||||
LD (FATCASH+1),A
|
|
||||||
LD A,(FatBuffer.FAT_TYP)
|
|
||||||
CP "2"
|
|
||||||
JP Z,W_T_F12
|
|
||||||
W_T_F16 PUSH DE
|
|
||||||
LD A,H
|
|
||||||
LD B,A
|
|
||||||
AND #0F
|
|
||||||
LD H,A
|
|
||||||
LD A,B
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
AND #0F ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
|
|
||||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
|
||||||
LD BC,(FATCASH) ; C - BLOCK FAT IN CASH
|
|
||||||
CP C
|
|
||||||
CALL NZ,RE_FAT ; A <> C - READ NEW BLOCK FAT
|
|
||||||
LD DE,FAT
|
|
||||||
ADD HL,DE
|
|
||||||
POP DE
|
|
||||||
LD (HL),E
|
|
||||||
INC HL
|
|
||||||
LD (HL),D
|
|
||||||
POP AF
|
|
||||||
POP HL
|
|
||||||
OUT (SLOT3),A
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
W_T_F12 PUSH DE
|
|
||||||
LD D,H
|
|
||||||
LD E,L
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,DE
|
|
||||||
RR H
|
|
||||||
RR L ;CLUSTER * 1.5
|
|
||||||
PUSH AF
|
|
||||||
LD A,H
|
|
||||||
LD B,A
|
|
||||||
AND #1F
|
|
||||||
LD H,A
|
|
||||||
LD A,B
|
|
||||||
RLCA
|
|
||||||
RLCA
|
|
||||||
RLCA
|
|
||||||
AND #07
|
|
||||||
LD BC,(FATCASH)
|
|
||||||
CP C
|
|
||||||
CALL NZ,RE_FAT
|
|
||||||
LD DE,FAT
|
|
||||||
ADD HL,DE
|
|
||||||
POP AF
|
|
||||||
POP DE
|
|
||||||
JP C,W_T_F01
|
|
||||||
LD (HL),E
|
|
||||||
INC HL
|
|
||||||
LD A,(HL)
|
|
||||||
AND #F0
|
|
||||||
OR D
|
|
||||||
LD (HL),A
|
|
||||||
POP AF
|
|
||||||
POP HL
|
|
||||||
OUT (SLOT3),A
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
W_T_F01 SLA E
|
|
||||||
RL D
|
|
||||||
RL E
|
|
||||||
RL D
|
|
||||||
RL E
|
|
||||||
RL D
|
|
||||||
RL E
|
|
||||||
RL D
|
|
||||||
LD A,(HL)
|
|
||||||
AND #0F
|
|
||||||
OR E
|
|
||||||
LD (HL),A
|
|
||||||
INC HL
|
|
||||||
LD (HL),D
|
|
||||||
POP AF
|
|
||||||
POP HL
|
|
||||||
OUT (SLOT3),A
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;R01
|
|
||||||
; A - NEW FAT BLOCK
|
|
||||||
|
|
||||||
RE_FAT PUSH HL
|
|
||||||
PUSH AF
|
|
||||||
LD A,(FATCASH+1)
|
|
||||||
OR A
|
|
||||||
CALL NZ,WR_FAT_
|
|
||||||
POP AF
|
|
||||||
LD L,A
|
|
||||||
LD H,0
|
|
||||||
LD (FATCASH),HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL ;FAT BLOCK * 16 = SECTOR OF FAT
|
|
||||||
LD DE,(FatBuffer.FAT_FRM)
|
|
||||||
ADD HL,DE
|
|
||||||
EX DE,HL
|
|
||||||
LD IX,0
|
|
||||||
ADD IX,DE
|
|
||||||
LD HL,0 ;HL:IX - SECTOR FAT FOR READING
|
|
||||||
LD DE,FAT ; DE - FAT ADDRESS
|
|
||||||
LD A,(FatBuffer.DRIVE)
|
|
||||||
; LD B,16
|
|
||||||
; LD C,5
|
|
||||||
LD BC,16*256 + 5 ;ॣ B: 16 * 512 = 8192 (CASH SIZE)
|
|
||||||
RST #18
|
|
||||||
POP HL
|
|
||||||
RET
|
|
||||||
|
|
||||||
WR_FAT EXX
|
|
||||||
LD A,FATPAGE
|
|
||||||
CALL BANK
|
|
||||||
EXX
|
|
||||||
PUSH AF
|
|
||||||
CALL WR_FAT_
|
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
RET
|
|
||||||
|
|
||||||
WR_FAT_ LD HL,(FATCASH)
|
|
||||||
LD H,0
|
|
||||||
LD (FATCASH),HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL ;FAT BLOCK * 16 = SECTOR OF FAT
|
|
||||||
|
|
||||||
PUSH HL
|
|
||||||
LD B,H
|
|
||||||
LD C,L ;BC - BLOCK OF FAT
|
|
||||||
LD DE,16
|
|
||||||
ADD HL,DE ;+ SIZE CASH (16 SECTORS)
|
|
||||||
|
|
||||||
LD DE,(BootSector.S_P_F)
|
|
||||||
LD A,16
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
JR C,WALLFAT
|
|
||||||
EX DE,HL
|
|
||||||
LD HL,16
|
|
||||||
; AND A ;âãâ â®ç® CF ¥ ¢§¢¥¤ñ
|
|
||||||
SBC HL,DE
|
|
||||||
JP C,FATERR
|
|
||||||
LD A,L
|
|
||||||
WALLFAT LD H,B
|
|
||||||
LD L,C
|
|
||||||
LD DE,(FatBuffer.FAT_FRM)
|
|
||||||
ADD HL,DE
|
|
||||||
EX DE,HL
|
|
||||||
LD IX,0
|
|
||||||
ADD IX,DE
|
|
||||||
LD HL,0 ;HL:IX - SECTOR OF FAT FOR SAVE
|
|
||||||
LD DE,FAT
|
|
||||||
LD B,A
|
|
||||||
LD C,6
|
|
||||||
LD A,(FatBuffer.DRIVE)
|
|
||||||
PUSH BC
|
|
||||||
RST #18
|
|
||||||
POP BC
|
|
||||||
POP HL
|
|
||||||
LD DE,(FatBuffer.FAT2_XX)
|
|
||||||
ADD HL,DE
|
|
||||||
EX DE,HL
|
|
||||||
LD IX,0
|
|
||||||
ADD IX,DE
|
|
||||||
LD DE,FAT
|
|
||||||
LD HL,0
|
|
||||||
LD A,(FatBuffer.DRIVE)
|
|
||||||
LD C,6
|
|
||||||
RST #18
|
|
||||||
RET
|
|
||||||
;R01
|
|
||||||
|
|
||||||
;R01WR_FAT LD HL,(FATCASH)
|
|
||||||
;R01 LD H,0
|
|
||||||
;R01 LD (FATCASH),HL
|
|
||||||
;R01 LD E,L
|
|
||||||
;R01 LD D,H
|
|
||||||
;R01 ADD HL,HL
|
|
||||||
;R01 ADD HL,DE
|
|
||||||
;R01 PUSH HL
|
|
||||||
;R01 LD B,H
|
|
||||||
;R01 LD C,L
|
|
||||||
;R01 INC HL
|
|
||||||
;R01 INC HL
|
|
||||||
;R01 INC HL
|
|
||||||
;R01 LD DE,(S_P_F)
|
|
||||||
;R01 LD A,3
|
|
||||||
;R01 AND A
|
|
||||||
;R01 SBC HL,DE
|
|
||||||
;R01 JP C,WR_FAT1
|
|
||||||
;R01 EX DE,HL
|
|
||||||
;R01 LD HL,3
|
|
||||||
;R01 AND A
|
|
||||||
;R01 SBC HL,DE
|
|
||||||
;R01 JP C,FATERR
|
|
||||||
;R01 LD A,L
|
|
||||||
;R01WR_FAT1 LD H,B
|
|
||||||
;R01 LD L,C
|
|
||||||
;R01 LD DE,(FAT_FRM)
|
|
||||||
;R01 ADD HL,DE
|
|
||||||
;R01 EX DE,HL
|
|
||||||
;R01 LD IX,0
|
|
||||||
;R01 ADD IX,DE
|
|
||||||
;R01 LD DE,FAT
|
|
||||||
;R01 LD HL,0
|
|
||||||
;R01 LD B,A
|
|
||||||
;R01 LD C,6
|
|
||||||
;R01 LD A,(DRIVE)
|
|
||||||
;R01 PUSH BC
|
|
||||||
;R01 RST #18
|
|
||||||
;R01 POP BC
|
|
||||||
;R01 POP HL
|
|
||||||
;R01 LD DE,(FAT2_XX)
|
|
||||||
;R01 ADD HL,DE
|
|
||||||
;R01 EX DE,HL
|
|
||||||
;R01 LD IX,0
|
|
||||||
;R01 ADD IX,DE
|
|
||||||
;R01 LD DE,FAT
|
|
||||||
;R01 LD HL,0
|
|
||||||
;R01 LD A,(DRIVE)
|
|
||||||
;R01 LD C,6
|
|
||||||
;R01 RST #18
|
|
||||||
;R01 RET
|
|
||||||
|
|
||||||
FATERR: POP HL
|
|
||||||
; SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
FATCASH DW #0000
|
|
||||||
MAX_CLU DW #0FF0
|
|
||||||
|
|
||||||
;//MODULE: FAT_X
|
|
||||||
;[END]
|
|
||||||
|
|
||||||
|
|
||||||
366
DSS/FDD_DRV0.ASM
366
DSS/FDD_DRV0.ASM
@ -1,366 +0,0 @@
|
|||||||
|
|
||||||
; Disk Driver Specification ver. 2.00
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Initialization
|
|
||||||
;
|
|
||||||
;Function : Initialization device(s)
|
|
||||||
;
|
|
||||||
;Input : C = 00h
|
|
||||||
; IX - Environment
|
|
||||||
;Output : A = Amount drive support
|
|
||||||
; HL = Size driver
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Open
|
|
||||||
;
|
|
||||||
;Function : Open disk
|
|
||||||
;
|
|
||||||
;Input : C = 01h
|
|
||||||
; A - Drive
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Close
|
|
||||||
;
|
|
||||||
;Function : Close disk
|
|
||||||
;
|
|
||||||
;Input : C = 02h
|
|
||||||
; A - Drive
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Media check
|
|
||||||
;
|
|
||||||
;Function : Checking change line
|
|
||||||
;
|
|
||||||
;Input : C = 03h
|
|
||||||
; A - Drive
|
|
||||||
;Output : A = 00h disk no changed
|
|
||||||
; A = 0FFh disk changed
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Get BPB
|
|
||||||
;
|
|
||||||
;Function : Get Block Parameters BIOS
|
|
||||||
;
|
|
||||||
;Input : C = 04h
|
|
||||||
; DE - Address
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Input
|
|
||||||
;
|
|
||||||
;Function : Input from disk
|
|
||||||
;
|
|
||||||
;Input : C = 05h
|
|
||||||
; HL:IX - Logical Block (sector)
|
|
||||||
; DE - Address
|
|
||||||
; B - Sector count
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Output
|
|
||||||
;
|
|
||||||
;Function : Output to disk
|
|
||||||
;
|
|
||||||
;Input : C = 06h
|
|
||||||
; HL:IX - Logical Block (sector)
|
|
||||||
; DE - Address
|
|
||||||
; B - Sector count
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Removable
|
|
||||||
;
|
|
||||||
;Function : Checking change line
|
|
||||||
;
|
|
||||||
;Input : C = 07h
|
|
||||||
; A - Drive
|
|
||||||
;Output : A = 00h Removable
|
|
||||||
; A = FFh Nonremovable
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Generic IOCTL
|
|
||||||
;
|
|
||||||
;Function : Generic Input Output Control
|
|
||||||
;
|
|
||||||
;Input : C = 08h
|
|
||||||
; B - Subcommand
|
|
||||||
; DE = 55AAh Magic Number
|
|
||||||
; Subcommand
|
|
||||||
;----------------------
|
|
||||||
; 00h - Get Device Parameters
|
|
||||||
; 01h - Read track
|
|
||||||
; 02h - Test track
|
|
||||||
; 80h - Set Device Parameters
|
|
||||||
; 81h - Write track
|
|
||||||
; 82h - Format track
|
|
||||||
;Output :
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;
|
|
||||||
; Errors:
|
|
||||||
; 0 (00h) - NO ERRORS
|
|
||||||
; 1 (01h) - BAD COMMAND
|
|
||||||
; 2 (02h) - BAD DRIVE NUMBER
|
|
||||||
; 3 (03h) - UNKNOW FORMAT
|
|
||||||
; 4 (04h) - NOT READY
|
|
||||||
; 5 (05h) - SEEK ERROR
|
|
||||||
; 6 (06h) - SECTOR NOT FOUND
|
|
||||||
; 7 (07h) - CRC ERROR
|
|
||||||
; 8 (08h) - WRITE PROTECT
|
|
||||||
; 9 (09h) - READ ERROR
|
|
||||||
; 10 (0Ah) - WRITE ERROR
|
|
||||||
; 11 (0Bh) - FAILURE
|
|
||||||
; 12 (0Ch) - BUSY (DEVICE OPENED)
|
|
||||||
; 13 (0Dh) - RESERVED
|
|
||||||
|
|
||||||
R_COM EQU #0F ;Command/Status
|
|
||||||
R_TRK EQU #3F ;Track
|
|
||||||
R_SEC EQU #5F ;Sector
|
|
||||||
R_DAT EQU #7F ;Data
|
|
||||||
R_DSK EQU #FF ;Drive Control
|
|
||||||
|
|
||||||
COM_B EQU #1B
|
|
||||||
|
|
||||||
FDDRIVE:
|
|
||||||
INC C
|
|
||||||
DEC C
|
|
||||||
JP Z,.INIT ;#00
|
|
||||||
DEC C
|
|
||||||
JP Z,.RESE ;#01
|
|
||||||
DEC C
|
|
||||||
JP Z,.STAT ;#02
|
|
||||||
DEC C
|
|
||||||
JP Z,.CHEK ;#03
|
|
||||||
DEC C
|
|
||||||
JP Z,.GBPB ;#04
|
|
||||||
DEC C
|
|
||||||
JP Z,.READD ;#05
|
|
||||||
DEC C
|
|
||||||
JP Z,.WRITED ;#06
|
|
||||||
DEC C
|
|
||||||
JP Z,.REMOV_F ;#07
|
|
||||||
DEC C
|
|
||||||
JP Z,.IOCTL_F ;#08
|
|
||||||
DEC C
|
|
||||||
JP Z,.RESRV_F ;#09
|
|
||||||
.RESRV_F:
|
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
;Commands for restart #18
|
|
||||||
.INIT: LD A,2 ;ª®«¨ç¥á⢮ FDD ¢ ª®¬¯¥ ;!FIXIT ¥á«¨ ®âª«îçã ¢ <20>ˆŽ‘?
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
.RESE: LD C,#51
|
|
||||||
RST ToBIOS
|
|
||||||
RET
|
|
||||||
|
|
||||||
.STAT: XOR A
|
|
||||||
RET
|
|
||||||
;!FIXIT ¯à®¢¥àïâì ‚ƒ93 ª®£¤ íâ® á⠥⠢®§¬®¦ë¬
|
|
||||||
.CHEK: LD A,#FF
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;DE - ADDRESS
|
|
||||||
|
|
||||||
.GBPB: LD IX,0
|
|
||||||
LD HL,0
|
|
||||||
PUSH DE
|
|
||||||
PUSH AF
|
|
||||||
LD BC,#0155
|
|
||||||
RST ToBIOS
|
|
||||||
POP DE
|
|
||||||
POP HL
|
|
||||||
RET C
|
|
||||||
LD BC,#0018
|
|
||||||
ADD HL,BC
|
|
||||||
LD E,(HL)
|
|
||||||
PUSH DE
|
|
||||||
LD A,D
|
|
||||||
LD C,#58
|
|
||||||
RST ToBIOS
|
|
||||||
LD A,H
|
|
||||||
POP HL
|
|
||||||
PUSH HL
|
|
||||||
LD H,A
|
|
||||||
POP AF
|
|
||||||
LD C,#59
|
|
||||||
RST ToBIOS
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
;READTR:
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
.READD: LD C,#55
|
|
||||||
RST ToBIOS
|
|
||||||
RET
|
|
||||||
|
|
||||||
.WRITED:
|
|
||||||
LD C,#56
|
|
||||||
RST ToBIOS
|
|
||||||
RET
|
|
||||||
|
|
||||||
; 00 - GET DEVICE PARAMETERS
|
|
||||||
; 01 - READ TRACK
|
|
||||||
; 02 - TEST TRACK
|
|
||||||
; 80 - SET DEVICE PARAMETERS
|
|
||||||
; 81 - WRITE TRACK
|
|
||||||
; 82 - FORMAT TRACK
|
|
||||||
|
|
||||||
|
|
||||||
.IOCTL_F:
|
|
||||||
BIT 7,B
|
|
||||||
JR NZ,.O_CTL_F
|
|
||||||
INC B
|
|
||||||
DEC B
|
|
||||||
JP Z,.FGETPRM
|
|
||||||
; DEC B
|
|
||||||
; JP Z,FRDTRAC
|
|
||||||
; DEC B
|
|
||||||
; JP Z,FCHTRAC
|
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
.O_CTL_F:
|
|
||||||
RES 7,B
|
|
||||||
INC B
|
|
||||||
DEC B
|
|
||||||
JP Z,.FSETPRM
|
|
||||||
; DEC B
|
|
||||||
; JP Z,FWRTRAC
|
|
||||||
; DEC B
|
|
||||||
; JP Z,FFRTRAC
|
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
|
|
||||||
; HL:DE - SECTORS ON LOGICAL DISK
|
|
||||||
; HL' - CYLINDERS ON PHISICAL DISK
|
|
||||||
; DE' - HEADS ON PHISICAL DISK
|
|
||||||
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
|
||||||
; A' - PHISICAL DRIVE NUMBER
|
|
||||||
; A - EXTENDED INFORMATION
|
|
||||||
; D0...D3 - "0" RESERVED (MAY BE OTHER)
|
|
||||||
; D4 - DEVICE MASTER/SLAVE
|
|
||||||
; D5 - "1" RESERVED
|
|
||||||
; D6 - ADDRESSING MODE LBA/CHS
|
|
||||||
; D7 - "1" RESERVED
|
|
||||||
|
|
||||||
.FGETPRM:
|
|
||||||
EX DE,HL
|
|
||||||
LD BC,#55AA
|
|
||||||
AND A
|
|
||||||
SBC HL,BC
|
|
||||||
LD L,A
|
|
||||||
LD A,DSS_Error.drv.GENERAL_FAILURE
|
|
||||||
SCF
|
|
||||||
RET NZ
|
|
||||||
LD A,L
|
|
||||||
AND #0F
|
|
||||||
PUSH AF
|
|
||||||
LD C,#58
|
|
||||||
RST ToBIOS
|
|
||||||
JR C,.NONEF
|
|
||||||
PUSH HL
|
|
||||||
PUSH DE
|
|
||||||
LD A,H
|
|
||||||
LD H,0
|
|
||||||
.MULL1 ADD HL,HL
|
|
||||||
DEC A
|
|
||||||
JR NZ,.MULL1
|
|
||||||
; HL - SECTOR PER CYLLINDER
|
|
||||||
LD B,H
|
|
||||||
LD C,L
|
|
||||||
LD HL,0
|
|
||||||
EX AF,AF'
|
|
||||||
XOR A
|
|
||||||
.MULL2 EX AF,AF'
|
|
||||||
ADD HL,BC
|
|
||||||
ADC A,0
|
|
||||||
DEC DE
|
|
||||||
EX AF,AF'
|
|
||||||
LD A,D
|
|
||||||
OR E
|
|
||||||
JR NZ,.MULL2
|
|
||||||
EX AF,AF'
|
|
||||||
LD E,A
|
|
||||||
EX DE,HL
|
|
||||||
EXX
|
|
||||||
POP DE
|
|
||||||
POP HL
|
|
||||||
POP AF
|
|
||||||
EX AF,AF'
|
|
||||||
LD A,B
|
|
||||||
LD C,L
|
|
||||||
LD B,0
|
|
||||||
LD L,H
|
|
||||||
LD H,B
|
|
||||||
EX DE,HL
|
|
||||||
EXX
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
.NONEF POP AF
|
|
||||||
LD A,DSS_Error.drv.INVALID_DRIVE
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
|
|
||||||
; HL:DE - SECTORS ON LOGICAL DISK
|
|
||||||
; HL' - CYLINDERS ON PHISICAL DISK
|
|
||||||
; DE' - HEADS ON PHISICAL DISK
|
|
||||||
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
|
||||||
; A' - EXTENDED INFORMATION
|
|
||||||
; D0...D3 - "0" RESERVED (MAY BE OTHER)
|
|
||||||
; D4 - DEVICE MASTER/SLAVE
|
|
||||||
; D5 - "1" RESERVED
|
|
||||||
; D6 - ADDRESSING MODE LBA/CHS
|
|
||||||
; D7 - "1" RESERVED
|
|
||||||
|
|
||||||
.FSETPRM:
|
|
||||||
PUSH AF
|
|
||||||
EXX
|
|
||||||
EX DE,HL
|
|
||||||
LD H,L
|
|
||||||
LD L,C
|
|
||||||
POP AF
|
|
||||||
AND #0F
|
|
||||||
PUSH AF
|
|
||||||
PUSH HL
|
|
||||||
PUSH DE
|
|
||||||
LD C,#58
|
|
||||||
RST ToBIOS
|
|
||||||
POP DE
|
|
||||||
POP HL
|
|
||||||
JR C,.NONEF
|
|
||||||
POP AF
|
|
||||||
LD C,#59
|
|
||||||
RST ToBIOS
|
|
||||||
RET C
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
.REMOV_F:
|
|
||||||
LD A,1
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;==============================================
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
13
DSS/FS/CDFS.ASM
Normal file
13
DSS/FS/CDFS.ASM
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
; INITDISK - ¨¨æ¨ «¨§ æ¨ï ¡ãª¢ë ¤¨áª - ¯¥à¥¥á⨠ªã᮪ ¢ RD_BPB
|
||||||
|
; LOADDIR - § £à㧪 á CDFS ¤¨à¥ªâ®à¨¨ ¨ ¤ ¯â æ¨ï ¯®¤ FAT
|
||||||
|
;
|
||||||
|
/*
|
||||||
|
‘¤¥« âì ¯à®¢¥àªã ä â:
|
||||||
|
CHECK_ROOT_CLUSTER
|
||||||
|
|
||||||
|
|
||||||
|
-= RST ToDSS.FS =-
|
||||||
|
RD_BPB - shared_fs.asm - ¡à âì ᨣ âãàã #AA55 ¨«¨ ¨§ CDFS.RD_BPB ¨ ¤ «¥¥ 㦥 RST_FS
|
||||||
|
LOADDIR
|
||||||
|
|
||||||
|
*/
|
||||||
2780
DSS/FS/FAT.asm
Normal file
2780
DSS/FS/FAT.asm
Normal file
File diff suppressed because it is too large
Load Diff
8
DSS/FS_Module.asm
Normal file
8
DSS/FS_Module.asm
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
INCLUDE "FS/FAT.ASM"
|
||||||
|
INCLUDE "FS/CDFS.ASM"
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
READ_BPB ; <20>à®ç¨â âì BPB ¢ SECTOR_BUFFER
|
||||||
|
|
||||||
|
*/
|
||||||
706
DSS/IDE_DRV0.ASM
706
DSS/IDE_DRV0.ASM
@ -1,706 +0,0 @@
|
|||||||
;---------------------------------------------------------------
|
|
||||||
;Rev Date Name Description
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;R02 06-08-2001 DNS Secondary IDE
|
|
||||||
;R01 06-08-2001 DNS Fixed BUG with partitions on Second hard disk
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;
|
|
||||||
; Disk Driver Specification ver. 2.20
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Initialization
|
|
||||||
;
|
|
||||||
;Function : Initialization device(s)
|
|
||||||
;
|
|
||||||
;Input : C = 00h
|
|
||||||
; IX - Environment
|
|
||||||
;Output : A = Amount drive support
|
|
||||||
; HL = Size driver
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Open
|
|
||||||
;
|
|
||||||
;Function : Open disk
|
|
||||||
;
|
|
||||||
;Input : C = 01h
|
|
||||||
; A - Drive
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Close
|
|
||||||
;
|
|
||||||
;Function : Close disk
|
|
||||||
;
|
|
||||||
;Input : C = 02h
|
|
||||||
; A - Drive
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Media check
|
|
||||||
;
|
|
||||||
;Function : Checking change line
|
|
||||||
;
|
|
||||||
;Input : C = 03h
|
|
||||||
; A - Drive
|
|
||||||
;Output : A = 00h disk no changed
|
|
||||||
; A = 0FFh disk changed
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Get BPB
|
|
||||||
;
|
|
||||||
;Function : Get Block Parameters BIOS
|
|
||||||
;
|
|
||||||
;Input : C = 04h
|
|
||||||
; DE - Address
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Input
|
|
||||||
;
|
|
||||||
;Function : Input from disk
|
|
||||||
;
|
|
||||||
;Input : C = 05h
|
|
||||||
; HL:IX - Logical Block (sector)
|
|
||||||
; DE - Address
|
|
||||||
; B - Sector count
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Output
|
|
||||||
;
|
|
||||||
;Function : Output to disk
|
|
||||||
;
|
|
||||||
;Input : C = 06h
|
|
||||||
; HL:IX - Logical Block (sector)
|
|
||||||
; DE - Address
|
|
||||||
; B - Sector count
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Removable
|
|
||||||
;
|
|
||||||
;Function : Checking change line
|
|
||||||
;
|
|
||||||
;Input : C = 07h
|
|
||||||
; A - Drive
|
|
||||||
;Output : A = 00h Removable
|
|
||||||
; A = FFh Nonremovable
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Generic IOCTL
|
|
||||||
;
|
|
||||||
;Function : Generic Input Output Control
|
|
||||||
;
|
|
||||||
;Input : C = 08h
|
|
||||||
; B - Subcommand
|
|
||||||
; DE = 55AAh Magic Number
|
|
||||||
; Subcommand
|
|
||||||
;----------------------
|
|
||||||
; 00h - Get Device Parameters
|
|
||||||
; 01h - Read track
|
|
||||||
; 02h - Test track
|
|
||||||
; 80h - Set Device Parameters
|
|
||||||
; 81h - Write track
|
|
||||||
; 82h - Format track
|
|
||||||
;Output :
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Read Long
|
|
||||||
;
|
|
||||||
;Function : Reading sectors from disk
|
|
||||||
;
|
|
||||||
;Input : C = 0Ah
|
|
||||||
; HL:IX - Logical Block (sector)
|
|
||||||
; DE - Address
|
|
||||||
; B - Sector count
|
|
||||||
; A'- Page
|
|
||||||
;Output : A'- Next Page
|
|
||||||
; HL:IX - Next Logical Block (sector)
|
|
||||||
; DE - Next Address
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;[]===========================================================[]
|
|
||||||
;Procedure : Write Long
|
|
||||||
;
|
|
||||||
;Function : Writing sectors to disk
|
|
||||||
;
|
|
||||||
;Input : C = 0Bh
|
|
||||||
; HL:IX - Logical Block (sector)
|
|
||||||
; DE - Address
|
|
||||||
; B - Sector count
|
|
||||||
; A'- Page
|
|
||||||
;Output : A'- Next Page
|
|
||||||
; HL:IX - Next Logical Block (sector)
|
|
||||||
; DE - Next Address
|
|
||||||
;
|
|
||||||
;[]===========================================================[]
|
|
||||||
;
|
|
||||||
; Errors:
|
|
||||||
; 0 (00h) - NO ERRORS
|
|
||||||
; 1 (01h) - BAD COMMAND
|
|
||||||
; 2 (02h) - BAD DRIVE NUMBER
|
|
||||||
; 3 (03h) - UNKNOW FORMAT
|
|
||||||
; 4 (04h) - NOT READY
|
|
||||||
; 5 (05h) - SEEK ERROR
|
|
||||||
; 6 (06h) - SECTOR NOT FOUND
|
|
||||||
; 7 (07h) - CRC ERROR
|
|
||||||
; 8 (08h) - WRITE PROTECT
|
|
||||||
; 9 (09h) - READ ERROR
|
|
||||||
; 10 (0Ah) - WRITE ERROR
|
|
||||||
; 11 (0Bh) - FAILURE
|
|
||||||
; 12 (0Ch) - BUSY (DEVICE OPENED)
|
|
||||||
; 13 (0Dh) - RESERVED
|
|
||||||
|
|
||||||
LD_DSK EQU 16
|
|
||||||
|
|
||||||
IDE0 EQU #0C1C0
|
|
||||||
IDE1 EQU #0C1C8
|
|
||||||
PART EQU #C000
|
|
||||||
|
|
||||||
HDDRIVE INC C
|
|
||||||
DEC C
|
|
||||||
JP Z,INIT_H ;#00
|
|
||||||
DEC C
|
|
||||||
JP Z,RESE_H ;#01
|
|
||||||
DEC C
|
|
||||||
JP Z,STAT_H ;#02
|
|
||||||
DEC C
|
|
||||||
JP Z,CHEK_H ;#03
|
|
||||||
DEC C
|
|
||||||
JP Z,GBPB_H ;#04
|
|
||||||
DEC C
|
|
||||||
JP Z,READH ;#05
|
|
||||||
DEC C
|
|
||||||
JP Z,WRITEH ;#06
|
|
||||||
DEC C
|
|
||||||
JP Z,REMOV_H ;#07
|
|
||||||
DEC C
|
|
||||||
JP Z,IOCTL_H ;#08
|
|
||||||
DEC C
|
|
||||||
JP Z,RESR_H ;#09
|
|
||||||
DEC C
|
|
||||||
JP Z,LREADH ;#0A
|
|
||||||
DEC C
|
|
||||||
JP Z,LWRITEH ;#0B
|
|
||||||
RESR_H LD A,DSS_Error.drv.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
;Commands for restart #18
|
|
||||||
INIT_H PUSH IY
|
|
||||||
LD HL,LOGDRV
|
|
||||||
LD (OFFSECT),HL
|
|
||||||
LD IX,DEVICE_CFG
|
|
||||||
LD C,#5F
|
|
||||||
RST ToBIOS
|
|
||||||
XOR A
|
|
||||||
LD B,(IX+2) ;HDD
|
|
||||||
CP B
|
|
||||||
JR Z,NO_HARDS
|
|
||||||
LD C,#80
|
|
||||||
NX_DVCI PUSH BC
|
|
||||||
LD A,C
|
|
||||||
LD (DRV),A
|
|
||||||
CALL PARTIT
|
|
||||||
POP BC
|
|
||||||
INC C
|
|
||||||
DJNZ NX_DVCI
|
|
||||||
;R02
|
|
||||||
;R02 LD A,#80
|
|
||||||
;R02 LD (DRV),A
|
|
||||||
;R02 LD C,SLOT3
|
|
||||||
;R02 IN B,(C)
|
|
||||||
;R02 LD A,SYSPAGE
|
|
||||||
;R02 OUT (C),A
|
|
||||||
;R02 LD HL,IDE0
|
|
||||||
;R02 CALL YEP_DRV
|
|
||||||
;R02 OUT (C),B
|
|
||||||
;R02 CALL NZ,PARTIT
|
|
||||||
;R02
|
|
||||||
;R02 LD A,#81
|
|
||||||
;R02 LD (DRV),A
|
|
||||||
;R02 LD C,SLOT3
|
|
||||||
;R02 IN B,(C)
|
|
||||||
;R02 LD A,SYSPAGE
|
|
||||||
;R02 OUT (C),A
|
|
||||||
;R02 LD HL,IDE1
|
|
||||||
;R02 CALL YEP_DRV
|
|
||||||
;R02 OUT (C),B
|
|
||||||
;R02 CALL NZ,PARTIT
|
|
||||||
NO_HARDS
|
|
||||||
POP IY
|
|
||||||
LD HL,(OFFSECT)
|
|
||||||
LD DE,LOGDRV
|
|
||||||
XOR A
|
|
||||||
SBC HL,DE
|
|
||||||
RET Z
|
|
||||||
LD DE,LD_DSK
|
|
||||||
DRVCLC INC A
|
|
||||||
SBC HL,DE
|
|
||||||
JR NZ,DRVCLC
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
DEVICE_CFG EQU #4000
|
|
||||||
; DB 0 ;LEN
|
|
||||||
; DB 0 ;FDD COUNT
|
|
||||||
; DB 0 ;HDD COUNT
|
|
||||||
; DB 0 ;CDROM COUNT
|
|
||||||
; DS 28 ;RESERVED
|
|
||||||
|
|
||||||
YEP_DRV LD A,#FF
|
|
||||||
; CP (HL)
|
|
||||||
; RET NZ
|
|
||||||
INC HL
|
|
||||||
CP (HL)
|
|
||||||
RET NZ
|
|
||||||
INC HL
|
|
||||||
CP (HL)
|
|
||||||
RET NZ
|
|
||||||
INC HL
|
|
||||||
CP (HL)
|
|
||||||
RET NZ
|
|
||||||
INC HL
|
|
||||||
CP (HL)
|
|
||||||
RET NZ
|
|
||||||
INC HL
|
|
||||||
CP (HL)
|
|
||||||
RET
|
|
||||||
|
|
||||||
;+00 ;SECTORS PER TRACK
|
|
||||||
;+01 ;TRACKS PER CYLLINDER
|
|
||||||
;+02 ;RESERVED
|
|
||||||
;+03 ;HDD/DRIVE/LBA
|
|
||||||
;+04 ;SECTOR PER CYLINDER LOW
|
|
||||||
;+05 ;SECTOR PER CYLINDER HIGH
|
|
||||||
;+06 ;RESERVED
|
|
||||||
;+07 ;RESERVED
|
|
||||||
|
|
||||||
DRVHD_H EQU 0
|
|
||||||
SC_PT_H EQU 1
|
|
||||||
HEADS_H EQU 2
|
|
||||||
CYL_L_H EQU 3
|
|
||||||
CYL_H_H EQU 4
|
|
||||||
SPCLL_H EQU 5
|
|
||||||
SPCLH_H EQU 6
|
|
||||||
|
|
||||||
|
|
||||||
;IDE0 DB #FF ;DRIVE/HEAD REGISTER ;00
|
|
||||||
; DB #FF ;SECTORS PER TRACK ;01
|
|
||||||
; DB #FF ;HEADS ;02
|
|
||||||
; DB #FF ;CYLINDERS LOW ;03
|
|
||||||
; DB #FF ;CYLINDERS HIGH ;04
|
|
||||||
; DB #FF ;SECTOR PER CYLINDER LOW ;05
|
|
||||||
; DB #FF ;SECTOR PER CYLINDER HIGH ;06
|
|
||||||
; DB #FF ;RESERVED ;07
|
|
||||||
|
|
||||||
;IDE1 DB #FF ;DRIVE/HEAD REGISTER ;00
|
|
||||||
; DB #FF ;SECTORS PER TRACK ;01
|
|
||||||
; DB #FF ;HEADS ;02
|
|
||||||
; DB #FF ;CYLINDERS LOW ;03
|
|
||||||
; DB #FF ;CYLINDERS HIGH ;04
|
|
||||||
; DB #FF ;SECTOR PER CYLINDER LOW ;05
|
|
||||||
; DB #FF ;SECTOR PER CYLINDER HIGH ;06
|
|
||||||
; DB #FF ;RESERVED ;07
|
|
||||||
|
|
||||||
LOGDRV DS 12*LD_DSK
|
|
||||||
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
|
|
||||||
;+01 LONG SECTOR OFFSET
|
|
||||||
;+05 LONG SIZE IN SECTORS
|
|
||||||
;+09 FREE
|
|
||||||
;+15
|
|
||||||
|
|
||||||
SELHDD PUSH DE
|
|
||||||
PUSH BC
|
|
||||||
PUSH HL
|
|
||||||
LD L,A
|
|
||||||
LD H,0
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
EX DE,HL
|
|
||||||
LD IY,LOGDRV
|
|
||||||
ADD IY,DE
|
|
||||||
LD C,(IY+1)
|
|
||||||
LD B,(IY+2)
|
|
||||||
LD E,(IY+3)
|
|
||||||
LD D,(IY+4)
|
|
||||||
POP HL
|
|
||||||
ADD IX,BC
|
|
||||||
ADC HL,DE
|
|
||||||
LD A,(IY+0) ;DRIVE NUMBER
|
|
||||||
POP BC
|
|
||||||
POP DE
|
|
||||||
RET
|
|
||||||
|
|
||||||
; 00 - GET DEVICE PARAMETERS
|
|
||||||
; 01 - READ TRACK
|
|
||||||
; 02 - TEST TRACK
|
|
||||||
; 80 - SET DEVICE PARAMETERS
|
|
||||||
; 81 - WRITE TRACK
|
|
||||||
; 82 - FORMAT TRACK
|
|
||||||
|
|
||||||
|
|
||||||
IOCTL_H BIT 7,B
|
|
||||||
JR NZ,O_CTL_H
|
|
||||||
INC B
|
|
||||||
DEC B
|
|
||||||
JP Z,HGETPRM
|
|
||||||
DEC B
|
|
||||||
JP Z,HRDTRAC
|
|
||||||
DEC B
|
|
||||||
JP Z,HCHTRAC
|
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
O_CTL_H RES 7,B
|
|
||||||
INC B
|
|
||||||
DEC B
|
|
||||||
JP Z,HSETPRM
|
|
||||||
DEC B
|
|
||||||
JP Z,HWRTRAC
|
|
||||||
DEC B
|
|
||||||
JP Z,HFRTRAC
|
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
HRDTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
HCHTRAC LD B,L
|
|
||||||
CALL CHECKH
|
|
||||||
RET
|
|
||||||
|
|
||||||
HSETPRM AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
HWRTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
HFRTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
; HL:DE - SECTORS ON LOGICAL DISK
|
|
||||||
; HL' - CYLINDERS ON PHISICAL DISK
|
|
||||||
; DE' - HEADS ON PHISICAL DISK
|
|
||||||
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
|
||||||
; A' - PHISICAL DRIVE NUMBER
|
|
||||||
; A - DRIVE/HEAD REGISTER PHISICAL DISK
|
|
||||||
; D0...D3 - "0" RESERVED (MAY BE OTHER)
|
|
||||||
; D4 - DEVICE MASTER/SLAVE
|
|
||||||
; D5 - "1" RESERVED
|
|
||||||
; D6 - ADDRESSING MODE LBA/CHS
|
|
||||||
; D7 - "1" RESERVED
|
|
||||||
|
|
||||||
HGETPRM EX DE,HL
|
|
||||||
LD BC,#55AA
|
|
||||||
AND A
|
|
||||||
SBC HL,BC
|
|
||||||
LD L,A
|
|
||||||
LD A,DSS_Error.drv.GENERAL_FAILURE
|
|
||||||
SCF
|
|
||||||
RET NZ
|
|
||||||
PUSH IY
|
|
||||||
LD H,0
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
LD B,H
|
|
||||||
LD C,L
|
|
||||||
LD IY,LOGDRV ;!FIXIT åॠâãâ ¨¤¥ªáë©?
|
|
||||||
ADD IY,BC
|
|
||||||
LD E,(IY+5)
|
|
||||||
LD D,(IY+6)
|
|
||||||
LD L,(IY+7)
|
|
||||||
LD H,(IY+8)
|
|
||||||
|
|
||||||
LD A,(IY+0)
|
|
||||||
LD C,A
|
|
||||||
LD IY,IDE0 ;!FIXIT IDE CHANELS âã⠢ᥣ® 2 ª « à ¡®â îâ
|
|
||||||
AND #0F
|
|
||||||
JR Z,GELH1
|
|
||||||
LD IY,IDE1
|
|
||||||
GELH1 IN A,(SLOT3)
|
|
||||||
PUSH AF
|
|
||||||
LD A,SYS_PAGE
|
|
||||||
OUT (SLOT3),A
|
|
||||||
|
|
||||||
LD A,(IY+DRVHD_H) ;HDD/DRV
|
|
||||||
EXX
|
|
||||||
LD L,(IY+CYL_L_H) ;CYLINDER LOW
|
|
||||||
LD H,(IY+CYL_H_H) ;CYLINDER HIGH
|
|
||||||
LD E,(IY+HEADS_H) ;HEADS
|
|
||||||
LD D,0
|
|
||||||
LD C,(IY+SC_PT_H) ;SECTORS
|
|
||||||
LD B,0
|
|
||||||
EXX
|
|
||||||
EX AF,AF'
|
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LD A,C
|
|
||||||
EX AF,AF'
|
|
||||||
POP IY
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
REMOV_H LD A,1
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
RESE_H XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
STAT_H XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
CHEK_H LD A,#FF
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;HL:IX - SECTOR
|
|
||||||
; DE - ADDRESS
|
|
||||||
|
|
||||||
GBPB_H PUSH IY
|
|
||||||
PUSH DE
|
|
||||||
LD L,A
|
|
||||||
LD H,0
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
ADD HL,HL
|
|
||||||
LD B,H
|
|
||||||
LD C,L
|
|
||||||
LD IY,LOGDRV
|
|
||||||
ADD IY,BC
|
|
||||||
LD E,(IY+1)
|
|
||||||
LD D,(IY+2)
|
|
||||||
LD L,(IY+3)
|
|
||||||
LD H,(IY+4)
|
|
||||||
LD XL,E
|
|
||||||
LD XH,D
|
|
||||||
LD A,(IY+0)
|
|
||||||
POP DE
|
|
||||||
POP IY
|
|
||||||
LD BC,#0155
|
|
||||||
RST ToBIOS
|
|
||||||
RET
|
|
||||||
|
|
||||||
;HL:IX - SECTOR
|
|
||||||
; DE - ADDRESS
|
|
||||||
; B - COUNTER
|
|
||||||
; A'- PAGE
|
|
||||||
;READ SECTOR
|
|
||||||
LREADH PUSH IY
|
|
||||||
CALL SELHDD
|
|
||||||
LD C,#52 ; A - HDD NUMBER +128
|
|
||||||
RST ToBIOS
|
|
||||||
POP IY
|
|
||||||
RET
|
|
||||||
|
|
||||||
;HL:IX - SECTOR
|
|
||||||
; DE - ADDRESS
|
|
||||||
; B - COUNTER
|
|
||||||
; A'- PAGE
|
|
||||||
;WRITE SECTOR
|
|
||||||
LWRITEH PUSH IY
|
|
||||||
CALL SELHDD
|
|
||||||
LD C,#53 ; A - HDD NUMBER +128
|
|
||||||
RST ToBIOS
|
|
||||||
POP IY
|
|
||||||
RET
|
|
||||||
|
|
||||||
;HL:IX - SECTOR
|
|
||||||
; DE - ADDRESS
|
|
||||||
; B - COUNTER
|
|
||||||
;WRITE SECTOR
|
|
||||||
WRITEH PUSH IY
|
|
||||||
CALL SELHDD
|
|
||||||
LD C,#56 ; A - HDD NUMBER +128
|
|
||||||
RST ToBIOS
|
|
||||||
POP IY
|
|
||||||
RET
|
|
||||||
|
|
||||||
;HL:IX - SECTOR
|
|
||||||
; DE - ADDRESS
|
|
||||||
; B - COUNTER
|
|
||||||
;READ SECTOR
|
|
||||||
READH PUSH IY
|
|
||||||
CALL SELHDD
|
|
||||||
LD C,#55 ; A - HDD NUMBER +128
|
|
||||||
RST ToBIOS
|
|
||||||
POP IY
|
|
||||||
RET
|
|
||||||
|
|
||||||
;HL:IX - SECTOR
|
|
||||||
; DE - ADDRESS
|
|
||||||
; B - COUNTER
|
|
||||||
;CHECK SECTOR
|
|
||||||
CHECKH PUSH IY
|
|
||||||
CALL SELHDD
|
|
||||||
LD C,#54 ; A - HDD NUMBER +128
|
|
||||||
RST ToBIOS
|
|
||||||
POP IY
|
|
||||||
RET
|
|
||||||
|
|
||||||
;-----------------
|
|
||||||
EASYDOS
|
|
||||||
MEDIDOS
|
|
||||||
HIGHDOS LD E,(IY+08)
|
|
||||||
LD D,(IY+09)
|
|
||||||
LD L,(IY+10)
|
|
||||||
LD H,(IY+11)
|
|
||||||
LD IX,(CURSECL)
|
|
||||||
ADD IX,DE
|
|
||||||
LD DE,(CURSECH)
|
|
||||||
ADC HL,DE
|
|
||||||
LD D,XH
|
|
||||||
LD E,XL
|
|
||||||
LD IX,(OFFSECT)
|
|
||||||
LD (IX+1),E ;BPB SECTOR
|
|
||||||
LD (IX+2),D
|
|
||||||
LD (IX+3),L
|
|
||||||
LD (IX+4),H
|
|
||||||
; LD DE,(CURSECL)
|
|
||||||
; LD HL,(CURSECH)
|
|
||||||
; LD (IX+1),E ;START DISK
|
|
||||||
; LD (IX+2),D
|
|
||||||
; LD (IX+3),L
|
|
||||||
; LD (IX+4),H
|
|
||||||
LD E,(IY+12)
|
|
||||||
LD D,(IY+13)
|
|
||||||
LD L,(IY+14)
|
|
||||||
LD H,(IY+15)
|
|
||||||
LD (IX+5),E ;SIZE DISK
|
|
||||||
LD (IX+6),D
|
|
||||||
LD (IX+7),L
|
|
||||||
LD (IX+8),H
|
|
||||||
LD A,(DRV)
|
|
||||||
LD (IX+0),A
|
|
||||||
LD DE,LD_DSK ; DSKITEM
|
|
||||||
ADD IX,DE
|
|
||||||
LD (OFFSECT),IX
|
|
||||||
NXTPART LD DE,#10
|
|
||||||
ADD IY,DE
|
|
||||||
POP BC
|
|
||||||
DJNZ DOSAGA
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
PARTIT IN A,(SLOT3)
|
|
||||||
PUSH AF
|
|
||||||
LD A,#FF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
CALL PARTIT1
|
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
RET
|
|
||||||
|
|
||||||
PARTIT1 LD IX,0
|
|
||||||
LD DE,0
|
|
||||||
LD (EXTDOSL),DE ;R01
|
|
||||||
LD (EXTDOSH),IX ;R01
|
|
||||||
PARTIT2 LD (CURSECL),DE
|
|
||||||
LD (CURSECH),IX
|
|
||||||
CALL LOADSEC
|
|
||||||
LD HL,(PART+510)
|
|
||||||
LD DE,#AA55
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
JR NZ,NODEFIN
|
|
||||||
LD IY,PART+#01BE
|
|
||||||
LD B,4
|
|
||||||
DOSAGA PUSH BC
|
|
||||||
LD A,(IY+4)
|
|
||||||
CP 5
|
|
||||||
JR NZ,NOEXTDS
|
|
||||||
SUBLEV PUSH IY
|
|
||||||
LD DE,(CURSECL)
|
|
||||||
LD IX,(CURSECH)
|
|
||||||
PUSH DE
|
|
||||||
PUSH IX
|
|
||||||
CALL EXTDOS
|
|
||||||
POP IX
|
|
||||||
POP DE
|
|
||||||
LD (CURSECL),DE
|
|
||||||
LD (CURSECH),IX
|
|
||||||
CALL LOADSEC
|
|
||||||
POP IY
|
|
||||||
JP NXTPART
|
|
||||||
NOEXTDS CP #0F
|
|
||||||
JP Z,SUBLEV
|
|
||||||
CP #0E
|
|
||||||
JP Z,HIGHDOS
|
|
||||||
CP 6
|
|
||||||
JP Z,HIGHDOS
|
|
||||||
CP 4
|
|
||||||
JP Z,MEDIDOS
|
|
||||||
CP 1
|
|
||||||
JP Z,EASYDOS
|
|
||||||
POP BC
|
|
||||||
OR A
|
|
||||||
RET Z
|
|
||||||
NODEFIN SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
EXTDOS
|
|
||||||
LD HL,(EXTDOSL)
|
|
||||||
LD DE,(EXTDOSH)
|
|
||||||
LD A,L
|
|
||||||
OR H
|
|
||||||
OR E
|
|
||||||
OR D
|
|
||||||
LD E,(IY+08)
|
|
||||||
LD D,(IY+09)
|
|
||||||
LD L,(IY+10)
|
|
||||||
LD H,(IY+11)
|
|
||||||
JP NZ,EXTDOS2
|
|
||||||
LD (EXTDOSL),DE
|
|
||||||
LD (EXTDOSH),HL
|
|
||||||
LD IX,(EXTDOSH)
|
|
||||||
JP PARTIT2
|
|
||||||
|
|
||||||
EXTDOS2 LD IX,(EXTDOSL)
|
|
||||||
ADD IX,DE
|
|
||||||
PUSH IX
|
|
||||||
LD DE,(EXTDOSH)
|
|
||||||
ADC HL,DE
|
|
||||||
PUSH HL
|
|
||||||
POP IX
|
|
||||||
POP DE
|
|
||||||
JP PARTIT2
|
|
||||||
|
|
||||||
LOADSEC PUSH IY
|
|
||||||
LD IX,(CURSECL)
|
|
||||||
LD HL,(CURSECH)
|
|
||||||
LD DE,PART
|
|
||||||
LD BC,#0155
|
|
||||||
LD A,(DRV)
|
|
||||||
RST ToBIOS
|
|
||||||
POP IY
|
|
||||||
RET
|
|
||||||
|
|
||||||
DRV DB #00 ;PHISICAL DRIVE NUMBER
|
|
||||||
|
|
||||||
CURSECL DW #0000 ;CURRENT SECTOR LOADED
|
|
||||||
CURSECH DW #0000
|
|
||||||
|
|
||||||
EXTDOSL DW #0000 ;CURRENT PARTITION TABLE
|
|
||||||
EXTDOSH DW #0000
|
|
||||||
|
|
||||||
OFFSECT DW LOGDRV ;POINTER ON CURRENT DISK RECORD
|
|
||||||
|
|
||||||
;=======================================================
|
|
||||||
920
DSS/INTMOUSE.ASM
920
DSS/INTMOUSE.ASM
@ -1,920 +0,0 @@
|
|||||||
|
|
||||||
;[BEGIN]
|
|
||||||
;//MODULE: INTMOUSE
|
|
||||||
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
|
||||||
;//UPDATE: 24-10-1999 DNS Restore module
|
|
||||||
|
|
||||||
CMOUSE EQU #1B ; !FIXIT sp2000.inc
|
|
||||||
DMOUSE EQU #1A ; !FIXIT sp2000.inc
|
|
||||||
|
|
||||||
; MOUSE SOFTWARE SPECIFICATION
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 00h (INITIALIZATION)
|
|
||||||
;
|
|
||||||
; RETURN: NC - MOUSE PRESENT
|
|
||||||
; C - MOUSE ABSENT
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 01h (SHOW MOUSE CURSOR)
|
|
||||||
;
|
|
||||||
; RETURN: NC - DONE
|
|
||||||
; C - MOUSE ON SCREEN
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 02h (HIDE MOUSE CURSOR)
|
|
||||||
;
|
|
||||||
; RETURN: NC - DONE
|
|
||||||
; C - NONE MOUSE
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 03h (READ MOUSE STATE)
|
|
||||||
;
|
|
||||||
; RETURN: HL - X COORD
|
|
||||||
; DE - Y COORD
|
|
||||||
; A - BUTTONS D2-D0 (MIDDLE,RIGHT,LEFT)
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 04h (GOTO MOUSE CURSOR)
|
|
||||||
;
|
|
||||||
; INPUT: HL - X COORD
|
|
||||||
; DE - Y COORD
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 05h (RESERVED)
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 06h (RESERVED)
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 07h (SET VERT. BOUNDS)
|
|
||||||
;
|
|
||||||
; INPUT: HL - Y MIN
|
|
||||||
; DE - Y MAX
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 08h (SET HORZ. BOUNDS)
|
|
||||||
;
|
|
||||||
; INPUT: HL - X MIN
|
|
||||||
; DE - X MAX
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 09h (LOAD CURSOR)
|
|
||||||
;
|
|
||||||
; INPUT: IX - CURSOR IMAGE
|
|
||||||
; H - HEIGHT CURSOR
|
|
||||||
; L - WIDTH CURSOR
|
|
||||||
; D - Y HOT SPOT
|
|
||||||
; E - X HOT SPOT
|
|
||||||
; B = 0
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 0Ah (SET CURSOR IN TEXT MODES)
|
|
||||||
;
|
|
||||||
; INPUT: H - AND SIMBOL MASK
|
|
||||||
; L - XOR SIMBOL MASK
|
|
||||||
; D - AND ATTRIBUT MASK
|
|
||||||
; E - XOR ATTRIBUT MASK
|
|
||||||
; B = 0
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 0Bh (RETURN CURSOR)
|
|
||||||
;
|
|
||||||
; INPUT: IX - CURSOR IMAGE BUFFER
|
|
||||||
; OUTPUT: H - HEIGHT CURSOR
|
|
||||||
; L - WIDTH CURSOR
|
|
||||||
; D - Y HOT SPOT
|
|
||||||
; E - X HOT SPOT
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 0Ch (RESERVED)
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 0Dh (RESERVED)
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 0Eh (GET SENSETIVE)
|
|
||||||
; OUTPUT: H - VERTICAL SENSETIVE
|
|
||||||
; L - HORIZONTAL SENSETIVE
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 0Fh (SET SENSETIVE)
|
|
||||||
; INPUT: H - VERTICAL SENSETIVE
|
|
||||||
; L - HORIZONTAL SENSETIVE
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 80h (MOUSE HARDWARE INTERRUPT)
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 81h (CHANGE VIDEO MODE)
|
|
||||||
; INPUT: A - MODE
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 82h (RESERVED)
|
|
||||||
;---------------------------------------------
|
|
||||||
; COMMAND 83h (MOUSE REFRESH)
|
|
||||||
;---------------------------------------------
|
|
||||||
; ERRORS: 0 - NO ERROR
|
|
||||||
; 1 - COMMAND NOT PRESENT
|
|
||||||
; 2 - DEVICE ABSENT
|
|
||||||
; 3 - CURSOR ON (UZHE)
|
|
||||||
; 4 - CURSOR OFF (UZHE)
|
|
||||||
; 5 - CURSOR IMAGE VERY BIG
|
|
||||||
|
|
||||||
INTMOUS BIT 7,C
|
|
||||||
JP NZ,EMOUSE
|
|
||||||
INC C
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_INIT
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_SHOW
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_HIDD
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_READ
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_GOTO
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_RESR
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_RESR
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_VERT
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_HORZ
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_CURS
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_MASK
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_BCUR
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_RESR
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_RESR
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_GSEN
|
|
||||||
DEC C
|
|
||||||
JP Z,MS_SENT
|
|
||||||
MS_RESR LD A,DSS_Error.mouse.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
EMOUSE RES 7,C
|
|
||||||
INC C
|
|
||||||
DEC C
|
|
||||||
JP Z,M_INT
|
|
||||||
DEC C
|
|
||||||
JP Z,M_MODE
|
|
||||||
DEC C
|
|
||||||
JR Z,M_RESR
|
|
||||||
DEC C
|
|
||||||
JP Z,M_REFR
|
|
||||||
M_RESR LD A,DSS_Error.mouse.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
MS_INIT DI
|
|
||||||
LD A,85
|
|
||||||
OUT (#10),A
|
|
||||||
LD A,45
|
|
||||||
OUT (#10),A
|
|
||||||
XOR A ;LD A,0
|
|
||||||
OUT (CMOUSE),A
|
|
||||||
INC A ;LD A,1
|
|
||||||
OUT (CMOUSE),A
|
|
||||||
DEC A ;LD A,0
|
|
||||||
OUT (CMOUSE),A
|
|
||||||
LD A,3
|
|
||||||
OUT (CMOUSE),A
|
|
||||||
LD A,#41
|
|
||||||
OUT (CMOUSE),A
|
|
||||||
LD A,4
|
|
||||||
OUT (CMOUSE),A
|
|
||||||
LD A,#47
|
|
||||||
OUT (CMOUSE),A
|
|
||||||
LD A,5
|
|
||||||
OUT (CMOUSE),A
|
|
||||||
LD A,#E0
|
|
||||||
OUT (CMOUSE),A
|
|
||||||
EI
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
MS_SHOW PUSH IX
|
|
||||||
PUSH HL
|
|
||||||
PUSH DE
|
|
||||||
EX AF,AF'
|
|
||||||
PUSH AF
|
|
||||||
LD HL,(PIX_X)
|
|
||||||
LD DE,(PIX_Y)
|
|
||||||
DI
|
|
||||||
CALL MOUSE
|
|
||||||
XOR A
|
|
||||||
LD (REFRESH+1),A
|
|
||||||
EI
|
|
||||||
POP AF
|
|
||||||
EX AF,AF'
|
|
||||||
POP DE
|
|
||||||
POP HL
|
|
||||||
POP IX
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
MS_HIDD PUSH IX
|
|
||||||
PUSH HL
|
|
||||||
PUSH DE
|
|
||||||
EX AF,AF'
|
|
||||||
PUSH AF
|
|
||||||
DI
|
|
||||||
LD A,1
|
|
||||||
LD (REFRESH+1),A
|
|
||||||
CALL RESTORE
|
|
||||||
EI
|
|
||||||
POP AF
|
|
||||||
EX AF,AF'
|
|
||||||
POP DE
|
|
||||||
POP HL
|
|
||||||
POP IX
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
MS_READ LD HL,(PIX_X)
|
|
||||||
LD DE,(PIX_Y)
|
|
||||||
LD A,(MB)
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
MS_GOTO PUSH IX
|
|
||||||
PUSH HL
|
|
||||||
PUSH DE
|
|
||||||
LD (PIX_X),HL
|
|
||||||
LD (PIX_Y),DE
|
|
||||||
EX AF,AF'
|
|
||||||
PUSH AF
|
|
||||||
DI
|
|
||||||
CALL REFRESH
|
|
||||||
EI
|
|
||||||
POP AF
|
|
||||||
EX AF,AF'
|
|
||||||
POP DE
|
|
||||||
POP HL
|
|
||||||
POP IX
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
MS_CURS PUSH BC
|
|
||||||
PUSH DE
|
|
||||||
PUSH HL
|
|
||||||
PUSH IX
|
|
||||||
LD A,L
|
|
||||||
LD (M_XSIZE),A
|
|
||||||
LD A,H
|
|
||||||
LD (M_YSIZE),A
|
|
||||||
LD C,E
|
|
||||||
LD B,0
|
|
||||||
LD (XHOT_SP),BC
|
|
||||||
LD C,D
|
|
||||||
LD B,0
|
|
||||||
LD (YHOT_SP),BC
|
|
||||||
EXX
|
|
||||||
LD A,(M_XSIZE)
|
|
||||||
LD C,A
|
|
||||||
LD B,0
|
|
||||||
LD A,(M_YSIZE)
|
|
||||||
LD HL,0
|
|
||||||
MSCURS1 ADD HL,BC
|
|
||||||
DEC A
|
|
||||||
JR NZ,MSCURS1
|
|
||||||
PUSH HL
|
|
||||||
LD BC,M_IMAGE.Size+1
|
|
||||||
AND A
|
|
||||||
SBC HL,BC
|
|
||||||
CCF
|
|
||||||
EXX
|
|
||||||
POP BC
|
|
||||||
POP HL
|
|
||||||
LD A,5
|
|
||||||
JR C,NOLOADM
|
|
||||||
LD DE,M_IMAGE
|
|
||||||
DI
|
|
||||||
LDIR
|
|
||||||
XOR A
|
|
||||||
NOLOADM POP HL
|
|
||||||
POP DE
|
|
||||||
POP BC
|
|
||||||
EI
|
|
||||||
RET
|
|
||||||
|
|
||||||
MS_BCUR PUSH IX
|
|
||||||
EXX
|
|
||||||
LD A,(M_XSIZE)
|
|
||||||
LD C,A
|
|
||||||
LD B,0
|
|
||||||
LD A,(M_YSIZE)
|
|
||||||
LD HL,0
|
|
||||||
MSBCUR1 ADD HL,BC
|
|
||||||
DEC A
|
|
||||||
JR NZ,MSBCUR1
|
|
||||||
PUSH HL
|
|
||||||
LD BC,M_IMAGE.Size+1
|
|
||||||
AND A
|
|
||||||
SBC HL,BC
|
|
||||||
CCF
|
|
||||||
EXX
|
|
||||||
POP BC
|
|
||||||
POP HL
|
|
||||||
LD A,5
|
|
||||||
JR C,NOSAVEM
|
|
||||||
LD DE,M_IMAGE
|
|
||||||
EX DE,HL
|
|
||||||
DI
|
|
||||||
LDIR
|
|
||||||
LD A,(M_XSIZE)
|
|
||||||
LD L,A
|
|
||||||
LD A,(M_YSIZE)
|
|
||||||
LD H,A
|
|
||||||
LD BC,(XHOT_SP)
|
|
||||||
LD E,C
|
|
||||||
LD BC,(YHOT_SP)
|
|
||||||
LD D,C
|
|
||||||
LD BC,0
|
|
||||||
XOR A
|
|
||||||
NOSAVEM EI
|
|
||||||
RET
|
|
||||||
|
|
||||||
MS_HORZ
|
|
||||||
LD (MIN_X),HL
|
|
||||||
LD (MAX_X),DE
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
MS_VERT
|
|
||||||
LD (MIN_Y),HL
|
|
||||||
LD (MAX_Y),DE
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
MS_MASK
|
|
||||||
LD (ANDXORS),HL
|
|
||||||
LD (ANDXORA),DE
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
; H - VERTICAL SENSETIVE
|
|
||||||
; L - HORIZONTAL SENSETIVE
|
|
||||||
|
|
||||||
MS_SENT
|
|
||||||
LD (SENSEXY),HL
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
MS_GSEN
|
|
||||||
LD HL,(SENSEXY)
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
MOUSET LD (REST_XT+1),HL
|
|
||||||
LD (REST_YT+1),DE
|
|
||||||
;Y
|
|
||||||
SRL D
|
|
||||||
RR E
|
|
||||||
SRL D
|
|
||||||
RR E
|
|
||||||
SRL D
|
|
||||||
RR E
|
|
||||||
LD D,E
|
|
||||||
;X
|
|
||||||
SRL H
|
|
||||||
RR L
|
|
||||||
SRL H
|
|
||||||
RR L
|
|
||||||
SRL H
|
|
||||||
RR L
|
|
||||||
LD E,L
|
|
||||||
|
|
||||||
IN A,(PORT_Y)
|
|
||||||
LD XH,A
|
|
||||||
IN A,(SLOT1)
|
|
||||||
LD XL,A
|
|
||||||
;
|
|
||||||
DI
|
|
||||||
;
|
|
||||||
LD A,#54
|
|
||||||
OUT (SLOT1),A
|
|
||||||
;
|
|
||||||
LD A,D
|
|
||||||
ADD A,A
|
|
||||||
ADD A,A ;Y * 4
|
|
||||||
LD L,A
|
|
||||||
LD H,#43 ;+ #4300
|
|
||||||
;
|
|
||||||
IN A,(RGMOD)
|
|
||||||
RRCA
|
|
||||||
AND #80
|
|
||||||
OR #01
|
|
||||||
ADD A,E
|
|
||||||
OUT (PORT_Y),A
|
|
||||||
INC L
|
|
||||||
LD A,(HL) ;SIMBOL
|
|
||||||
LD BC,(ANDXORS)
|
|
||||||
AND B
|
|
||||||
XOR C
|
|
||||||
LD (HL),A
|
|
||||||
INC L
|
|
||||||
LD A,(HL) ;ATTRIBUT
|
|
||||||
LD BC,(ANDXORA)
|
|
||||||
AND B
|
|
||||||
XOR C
|
|
||||||
LD (HL),A
|
|
||||||
;
|
|
||||||
LD A,XL
|
|
||||||
OUT (SLOT1),A
|
|
||||||
LD A,XH
|
|
||||||
OUT (PORT_Y),A
|
|
||||||
RET
|
|
||||||
|
|
||||||
RESTORT
|
|
||||||
REST_XT LD HL,#0000
|
|
||||||
REST_YT LD DE,#0000
|
|
||||||
;Y
|
|
||||||
SRL D
|
|
||||||
RR E
|
|
||||||
SRL D
|
|
||||||
RR E
|
|
||||||
SRL D
|
|
||||||
RR E
|
|
||||||
LD D,E
|
|
||||||
;X
|
|
||||||
SRL H
|
|
||||||
RR L
|
|
||||||
SRL H
|
|
||||||
RR L
|
|
||||||
SRL H
|
|
||||||
RR L
|
|
||||||
LD E,L
|
|
||||||
|
|
||||||
IN A,(PORT_Y)
|
|
||||||
LD XH,A
|
|
||||||
IN A,(SLOT1)
|
|
||||||
LD XL,A
|
|
||||||
;
|
|
||||||
DI
|
|
||||||
;
|
|
||||||
LD A,#50
|
|
||||||
OUT (SLOT1),A
|
|
||||||
;
|
|
||||||
LD A,D
|
|
||||||
ADD A,A
|
|
||||||
ADD A,A ;Y * 4
|
|
||||||
LD L,A
|
|
||||||
LD H,#43 ;+ #4300
|
|
||||||
;
|
|
||||||
IN A,(RGMOD)
|
|
||||||
RRCA
|
|
||||||
AND #80
|
|
||||||
OR #01
|
|
||||||
ADD A,E
|
|
||||||
OUT (PORT_Y),A
|
|
||||||
INC L
|
|
||||||
LD A,(HL) ;SIMBOL
|
|
||||||
LD (HL),A
|
|
||||||
INC L
|
|
||||||
LD A,(HL) ;ATTRIBUT
|
|
||||||
LD (HL),A
|
|
||||||
;
|
|
||||||
LD A,XL
|
|
||||||
OUT (SLOT1),A
|
|
||||||
LD A,XH
|
|
||||||
OUT (PORT_Y),A
|
|
||||||
RET
|
|
||||||
|
|
||||||
RESTORE:
|
|
||||||
.sw+1: LD A,#00
|
|
||||||
BIT 7,A
|
|
||||||
JP Z,RESTORT
|
|
||||||
RESTORG IN A,(SLOT3)
|
|
||||||
LD B,A
|
|
||||||
IN A,(PORT_Y)
|
|
||||||
LD C,A
|
|
||||||
PUSH BC
|
|
||||||
LD A,#50
|
|
||||||
OUT (SLOT3),A
|
|
||||||
REST_X LD HL,0
|
|
||||||
REST_Y LD DE,0
|
|
||||||
LD A,E
|
|
||||||
EX AF,AF'
|
|
||||||
REST_V LD A,#00
|
|
||||||
AND 1
|
|
||||||
LD DE,#C000 ;screen 0
|
|
||||||
JR Z,AA2
|
|
||||||
LD DE,#C000+320 ;screen 1
|
|
||||||
AA2 ADD HL,DE
|
|
||||||
REST_A LD A,0
|
|
||||||
LD XH,A
|
|
||||||
EX AF,AF'
|
|
||||||
REST_H
|
|
||||||
RS002 LD BC,10
|
|
||||||
OUT (PORT_Y),A
|
|
||||||
EX AF,AF'
|
|
||||||
LD (PUSH_HL),HL
|
|
||||||
LD D,H
|
|
||||||
LD E,L
|
|
||||||
LDIR
|
|
||||||
PUSH_HL+1: LD HL,#0000
|
|
||||||
; POP HL
|
|
||||||
EX AF,AF'
|
|
||||||
INC A
|
|
||||||
JR Z,RS003
|
|
||||||
DEC XH
|
|
||||||
JR NZ,RS002
|
|
||||||
RS003 POP BC
|
|
||||||
LD A,B
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LD A,C
|
|
||||||
OUT (PORT_Y),A
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;HL/DE - X/Y
|
|
||||||
|
|
||||||
MOUSE LD A,(MODE_M)
|
|
||||||
LD (RESTORE.sw),A
|
|
||||||
BIT 7,A
|
|
||||||
JP Z,MOUSET
|
|
||||||
MOUSEG CP #82 ;640x256x16
|
|
||||||
JR NZ,NOFX
|
|
||||||
SRL H
|
|
||||||
RR L
|
|
||||||
NOFX LD IX,M_IMAGE
|
|
||||||
LD A,(M_XSIZE)
|
|
||||||
LD C,A
|
|
||||||
LD B,0
|
|
||||||
LD (REALXS),BC
|
|
||||||
LD (REST_H+1),BC
|
|
||||||
LD C,B
|
|
||||||
LD (SKIPXF),BC
|
|
||||||
LD A,(M_YSIZE)
|
|
||||||
LD (REST_A+1),A
|
|
||||||
LD C,A
|
|
||||||
LD B,0
|
|
||||||
LD (REALYS),BC
|
|
||||||
LD BC,(YHOT_SP)
|
|
||||||
LD A,E
|
|
||||||
SUB C
|
|
||||||
LD E,A
|
|
||||||
JR NC,GOODY
|
|
||||||
NEG
|
|
||||||
LD E,A
|
|
||||||
LD A,(M_XSIZE)
|
|
||||||
LD C,A
|
|
||||||
LD B,0
|
|
||||||
LD A,(M_YSIZE)
|
|
||||||
SUB E
|
|
||||||
SKIPMY ADD IX,BC
|
|
||||||
DEC E
|
|
||||||
JR NZ,SKIPMY
|
|
||||||
LD C,A
|
|
||||||
LD (REALYS),BC
|
|
||||||
GOODY LD BC,(XHOT_SP)
|
|
||||||
AND A
|
|
||||||
SBC HL,BC
|
|
||||||
JR NC,GOODX
|
|
||||||
LD B,H
|
|
||||||
LD C,L
|
|
||||||
LD HL,0
|
|
||||||
AND A
|
|
||||||
SBC HL,BC
|
|
||||||
LD (SKIPXF),HL
|
|
||||||
LD A,(M_XSIZE)
|
|
||||||
SUB L
|
|
||||||
LD L,A
|
|
||||||
LD (REALXS),HL
|
|
||||||
LD HL,0
|
|
||||||
GOODX LD (REST_X+1),HL
|
|
||||||
LD (REST_Y+1),DE
|
|
||||||
|
|
||||||
PUSH HL
|
|
||||||
IN A,(SLOT3)
|
|
||||||
LD H,A
|
|
||||||
IN A,(PORT_Y)
|
|
||||||
LD L,A
|
|
||||||
EX (SP),HL
|
|
||||||
LD A,#5C
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LD A,E
|
|
||||||
EX AF,AF'
|
|
||||||
IN A,(RGMOD)
|
|
||||||
LD (REST_V+1),A
|
|
||||||
AND 1
|
|
||||||
LD DE,#C000 ;PAGE 0
|
|
||||||
JR Z,AA1
|
|
||||||
LD DE,#C000+320 ;PAGE 1
|
|
||||||
AA1 ADD HL,DE
|
|
||||||
LD D,XH
|
|
||||||
LD E,XL
|
|
||||||
EX DE,HL ;HL - BITMAP
|
|
||||||
LD BC,(REALYS)
|
|
||||||
LD XH,C
|
|
||||||
EX AF,AF'
|
|
||||||
MS002 LD BC,(SKIPXF)
|
|
||||||
ADD HL,BC
|
|
||||||
LD BC,(REALXS)
|
|
||||||
OUT (PORT_Y),A
|
|
||||||
EX AF,AF'
|
|
||||||
;USH DE
|
|
||||||
LD (PUSH_DE+1),DE
|
|
||||||
LDIR
|
|
||||||
PUSH_DE LD DE,#0000
|
|
||||||
; POP DE
|
|
||||||
EX AF,AF'
|
|
||||||
INC A
|
|
||||||
JR Z,MS003
|
|
||||||
DEC XH
|
|
||||||
JR NZ,MS002
|
|
||||||
MS003 POP BC
|
|
||||||
LD A,B
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LD A,C
|
|
||||||
OUT (PORT_Y),A
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
READ_M IN A,(CMOUSE)
|
|
||||||
RRCA
|
|
||||||
RET NC
|
|
||||||
IN A,(DMOUSE)
|
|
||||||
LD L,A
|
|
||||||
BIT 6,A
|
|
||||||
CCF
|
|
||||||
RET Z
|
|
||||||
TST_01 IN A,(CMOUSE)
|
|
||||||
RRCA
|
|
||||||
JP NC,TST_01
|
|
||||||
IN A,(DMOUSE)
|
|
||||||
LD E,A
|
|
||||||
BIT 6,A
|
|
||||||
CCF
|
|
||||||
RET NZ
|
|
||||||
TST_02 IN A,(CMOUSE)
|
|
||||||
RRCA
|
|
||||||
JR NC,TST_02
|
|
||||||
IN A,(DMOUSE)
|
|
||||||
LD D,A
|
|
||||||
BIT 6,A
|
|
||||||
CCF
|
|
||||||
RET NZ
|
|
||||||
LD A,E
|
|
||||||
AND #3F
|
|
||||||
LD E,A
|
|
||||||
LD A,L
|
|
||||||
AND #03
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
OR E
|
|
||||||
LD E,A
|
|
||||||
LD A,D
|
|
||||||
AND #3F
|
|
||||||
LD D,A
|
|
||||||
LD A,L
|
|
||||||
AND #0C
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
RRCA
|
|
||||||
OR D
|
|
||||||
LD D,A
|
|
||||||
LD A,L
|
|
||||||
RLCA
|
|
||||||
RLCA
|
|
||||||
RLCA
|
|
||||||
RES 6,A
|
|
||||||
JR NC,STBU
|
|
||||||
SET 6,A
|
|
||||||
STBU RLCA
|
|
||||||
RLCA
|
|
||||||
AND #03
|
|
||||||
LD (MB),A
|
|
||||||
CALL SENSE
|
|
||||||
LD A,E
|
|
||||||
LD (MX),A
|
|
||||||
LD A,D
|
|
||||||
LD (MY),A
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
MCORECT LD HL,(PIX_X)
|
|
||||||
LD DE,(MX)
|
|
||||||
LD D,0
|
|
||||||
BIT 7,E
|
|
||||||
JR NZ,DECX
|
|
||||||
ADD HL,DE
|
|
||||||
LD (PIX_X),HL
|
|
||||||
EX DE,HL
|
|
||||||
LD HL,(MAX_X)
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
JP NC,YCOO
|
|
||||||
LD HL,(MAX_X)
|
|
||||||
LD (PIX_X),HL
|
|
||||||
JP YCOO
|
|
||||||
DECX LD A,E
|
|
||||||
NEG
|
|
||||||
LD E,A
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
LD (PIX_X),HL
|
|
||||||
JR C,YCOO2
|
|
||||||
LD DE,(MIN_X)
|
|
||||||
SBC HL,DE
|
|
||||||
JR NC,YCOO
|
|
||||||
YCOO2 LD HL,(MIN_X)
|
|
||||||
LD (PIX_X),HL
|
|
||||||
|
|
||||||
YCOO LD HL,(PIX_Y)
|
|
||||||
LD DE,(MY)
|
|
||||||
LD D,0
|
|
||||||
BIT 7,E
|
|
||||||
JR NZ,DECY
|
|
||||||
ADD HL,DE
|
|
||||||
LD (PIX_Y),HL
|
|
||||||
EX DE,HL
|
|
||||||
|
|
||||||
LD HL,(MAX_Y)
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
RET NC
|
|
||||||
LD HL,(MAX_Y)
|
|
||||||
LD (PIX_Y),HL
|
|
||||||
RET
|
|
||||||
|
|
||||||
DECY LD A,E
|
|
||||||
NEG
|
|
||||||
LD E,A
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
LD (PIX_Y),HL
|
|
||||||
JR C,XCOO
|
|
||||||
LD DE,(MIN_Y)
|
|
||||||
SBC HL,DE
|
|
||||||
RET NC
|
|
||||||
XCOO LD HL,(MIN_Y)
|
|
||||||
LD (PIX_Y),HL
|
|
||||||
RET
|
|
||||||
|
|
||||||
SENSE LD HL,(SENSEXY)
|
|
||||||
LD A,L
|
|
||||||
OR L
|
|
||||||
RET Z
|
|
||||||
DEC A
|
|
||||||
RET Z
|
|
||||||
LD A,E
|
|
||||||
BIT 7,A
|
|
||||||
LD B,#FF
|
|
||||||
JR Z,SEN1
|
|
||||||
LD B,#7F
|
|
||||||
NEG
|
|
||||||
SEN1 INC B
|
|
||||||
SUB L
|
|
||||||
JR NC,SEN1
|
|
||||||
BIT 7,B
|
|
||||||
JR Z,SEN2
|
|
||||||
LD A,B
|
|
||||||
RES 7,A
|
|
||||||
NEG
|
|
||||||
LD B,A
|
|
||||||
SEN2 LD E,B
|
|
||||||
LD A,D
|
|
||||||
BIT 7,A
|
|
||||||
LD B,#FF
|
|
||||||
JR Z,SEN3
|
|
||||||
LD B,#7F
|
|
||||||
NEG
|
|
||||||
SEN3 INC B
|
|
||||||
SUB H
|
|
||||||
JR NC,SEN3
|
|
||||||
BIT 7,B
|
|
||||||
JR Z,SEN4
|
|
||||||
LD A,B
|
|
||||||
RES 7,A
|
|
||||||
NEG
|
|
||||||
LD B,A
|
|
||||||
SEN4 LD D,B
|
|
||||||
RET
|
|
||||||
|
|
||||||
M_MODE LD (MODE_M),A
|
|
||||||
OR A
|
|
||||||
JR Z,UNKMODE
|
|
||||||
CP 1
|
|
||||||
JR Z,UNKMODE
|
|
||||||
CP 2
|
|
||||||
JR Z,S320256
|
|
||||||
CP 3
|
|
||||||
JR Z,S640256
|
|
||||||
BIT 7,A
|
|
||||||
JR Z,UNKMODE
|
|
||||||
RES 7,A
|
|
||||||
CP 1
|
|
||||||
JR Z,S320256
|
|
||||||
CP 2
|
|
||||||
JR Z,S640256
|
|
||||||
UNKMODE XOR A ; ????? ¬®¦¥â âãâ ¤® .INVALID_COMMAND ?
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
S320256
|
|
||||||
LD HL,0 ;MIN X
|
|
||||||
LD DE,319 ;MAX X
|
|
||||||
CALL MS_HORZ
|
|
||||||
LD HL,0 ;MIN X
|
|
||||||
LD DE,255 ;MAX X
|
|
||||||
CALL MS_VERT
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
S640256
|
|
||||||
LD HL,0 ;MIN X
|
|
||||||
LD DE,639 ;MAX X
|
|
||||||
CALL MS_HORZ
|
|
||||||
LD HL,0 ;MIN X
|
|
||||||
LD DE,255 ;MAX X
|
|
||||||
CALL MS_VERT
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;Mouse Interrupt
|
|
||||||
M_INT IN A,(SLOT3)
|
|
||||||
LD B,A
|
|
||||||
IN A,(PORT_Y)
|
|
||||||
LD C,A
|
|
||||||
PUSH BC
|
|
||||||
CALL REFRESH ;Refresh mouse
|
|
||||||
CALL CONTROL
|
|
||||||
POP BC
|
|
||||||
LD A,B
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LD A,C
|
|
||||||
OUT (PORT_Y),A
|
|
||||||
RET
|
|
||||||
|
|
||||||
M_REFR CALL CONTROL
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
CONTROL CALL READ_M
|
|
||||||
RET NC
|
|
||||||
CALL MCORECT
|
|
||||||
LD A,#00
|
|
||||||
LD (REDY+1),A
|
|
||||||
RET
|
|
||||||
|
|
||||||
REFRESH LD A,#01
|
|
||||||
OR A
|
|
||||||
RET NZ
|
|
||||||
REDY LD A,#00
|
|
||||||
; OR A
|
|
||||||
; RET NZ
|
|
||||||
CALL RESTORE
|
|
||||||
LD HL,(PIX_X)
|
|
||||||
LD DE,(PIX_Y)
|
|
||||||
CALL MOUSE
|
|
||||||
LD A,#FF
|
|
||||||
LD (REDY+1),A
|
|
||||||
RET
|
|
||||||
|
|
||||||
MODE_M DB #03
|
|
||||||
|
|
||||||
PIX_X DW 160
|
|
||||||
PIX_Y DW 128
|
|
||||||
|
|
||||||
MX DB #00
|
|
||||||
MY DB #00
|
|
||||||
MB DB #00
|
|
||||||
MB_OLD DB #00 ; !FIXIT - ¥ 㦮?
|
|
||||||
MIN_X DW 0
|
|
||||||
MAX_X DW 319
|
|
||||||
MIN_Y DW 0
|
|
||||||
MAX_Y DW 255
|
|
||||||
SENSEXY
|
|
||||||
SENSE_X DB 0
|
|
||||||
SENSE_Y DB 0
|
|
||||||
|
|
||||||
XHOT_SP DW 0
|
|
||||||
YHOT_SP DW 0
|
|
||||||
|
|
||||||
ANDXORS DW #FF00
|
|
||||||
ANDXORA DW #FF77
|
|
||||||
|
|
||||||
M_XSIZE DB 10
|
|
||||||
M_YSIZE DB 14
|
|
||||||
SKIPXF DW 0
|
|
||||||
REALXS DW 0
|
|
||||||
REALYS DW 0
|
|
||||||
|
|
||||||
Xx EQU #00
|
|
||||||
Ww EQU #FE
|
|
||||||
Nn EQU #FF
|
|
||||||
|
|
||||||
;MS_BMP
|
|
||||||
M_IMAGE:
|
|
||||||
DB Xx,Xx,Nn,Nn,Nn,Nn,Nn,Nn,Nn,Nn
|
|
||||||
DB Xx,Ww,Xx,Nn,Nn,Nn,Nn,Nn,Nn,Nn
|
|
||||||
DB Xx,Ww,Ww,Xx,Nn,Nn,Nn,Nn,Nn,Nn
|
|
||||||
DB Xx,Ww,Ww,Ww,Xx,Nn,Nn,Nn,Nn,Nn
|
|
||||||
DB Xx,Ww,Ww,Ww,Ww,Xx,Nn,Nn,Nn,Nn
|
|
||||||
DB Xx,Ww,Ww,Ww,Ww,Ww,Xx,Nn,Nn,Nn
|
|
||||||
DB Xx,Ww,Ww,Ww,Ww,Ww,Ww,Xx,Nn,Nn
|
|
||||||
DB Xx,Ww,Ww,Ww,Ww,Xx,Xx,Xx,Xx,Nn
|
|
||||||
DB Xx,Ww,Ww,Xx,Ww,Xx,Nn,Nn,Nn,Nn
|
|
||||||
DB Xx,Ww,Xx,Xx,Ww,Ww,Xx,Nn,Nn,Nn
|
|
||||||
DB Xx,Xx,Nn,Nn,Xx,Ww,Xx,Nn,Nn,Nn
|
|
||||||
DB Xx,Nn,Nn,Nn,Xx,Ww,Ww,Xx,Nn,Nn
|
|
||||||
DB Nn,Nn,Nn,Nn,Nn,Xx,Xx,Nn,Nn,Nn
|
|
||||||
DB Nn,Nn,Nn,Nn,Nn,Nn,Nn,Nn,Nn,Nn
|
|
||||||
BLOCK 256-($-M_IMAGE),0
|
|
||||||
.Size EQU $-M_IMAGE
|
|
||||||
|
|
||||||
;//MODULE: INTMOUSE
|
|
||||||
;[END]
|
|
||||||
|
|
||||||
1686
DSS/KEYINTER.ASM
1686
DSS/KEYINTER.ASM
File diff suppressed because it is too large
Load Diff
@ -1,12 +1,13 @@
|
|||||||
+ function WINCOPY & WINREST не запрещают прерывания перед вызовом BIOS (используется вывод стеком!).
|
FIXED:
|
||||||
|
+ function WINCOPY & WINREST ¥ § ¯à¥é îâ ¯à¥àë¢ ¨ï ¯¥à¥¤ ¢ë§®¢®¬ BIOS (¨á¯®«ì§ã¥âáï ¢ë¢®¤ á⥪®¬!).
|
||||||
|
|
||||||
- при выводе на консоль длинного текста, экран не скролируется. Проверять на достижение 80 позиции!
|
+ ¯à¨ ¢ë¢®¤¥ ª®á®«ì ¤«¨®£® ⥪áâ , íªà ¥ áªà®«¨àã¥âáï. <20>஢¥àïâì ¤®á⨦¥¨¥ 80 ¯®§¨æ¨¨!
|
||||||
|
|
||||||
+ ошибка в функции SCROLL A=0.
|
? ®è¨¡ª ¢ äãªæ¨¨ SCROLL A=0.
|
||||||
|
|
||||||
+ ошибка при просмотре каталога в функциях установки атрибутов пропускаются системные файлы. п/п SEARCH MASK=#23
|
+ ®è¨¡ª ¯à¨ ¯à®á¬®âॠª â «®£ ¢ äãªæ¨ïå ãáâ ®¢ª¨ âਡã⮢ ¯à®¯ã᪠îâáï á¨áâ¥¬ë¥ ä ©«ë. ¯/¯ SEARCH MASK=#23
|
||||||
|
|
||||||
- игнорирование ошибок при записи системных областей FAT/DIR, невозможность отработать ошибку write-protect, так как она теряется при попытке записать измененный каталог на диск. Но возникает ошибка file not found так как сразо после создания система открывает файл.
|
- ¨£®à¨à®¢ ¨¥ ®è¨¡®ª ¯à¨ § ¯¨á¨ á¨á⥬ëå ®¡« á⥩ FAT/DIR, ¥¢®§¬®¦®áâì ®âà ¡®â âì ®è¨¡ªã write-protect, â ª ª ª ® â¥àï¥âáï ¯à¨ ¯®¯ë⪥ § ¯¨á âì ¨§¬¥¥ë© ª â «®£ ¤¨áª. <20>® ¢®§¨ª ¥â ®è¨¡ª file not found â ª ª ª áà §ã ¯®á«¥ á®§¤ ¨ï á¨á⥬ ®âªàë¢ ¥â ä ©«.
|
||||||
|
|
||||||
- ошибка разбора допустимого имени файла, если оно состоит из "." так как подрузомевается пробелы точка пробелы.
|
- ®è¨¡ª à §¡®à ¤®¯ãá⨬®£® ¨¬¥¨ ä ©« , ¥á«¨ ®® á®á⮨⠨§ "." â ª ª ª ¯®¤à §ã¬¥¢ ¥âáï ¯à®¡¥«ë â®çª ¯à®¡¥«ë.
|
||||||
|
|
||||||
|
|||||||
426
DSS/Procedures.asm
Normal file
426
DSS/Procedures.asm
Normal file
@ -0,0 +1,426 @@
|
|||||||
|
;!TODO Procedures
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; ‡ ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||||||
|
; ¢å®¤: de - ¤¥ì/¬¥áïæ
|
||||||
|
; hl - ç áë/¬¨ãâë
|
||||||
|
; b - ᥪã¤ë
|
||||||
|
; ix - £®¤
|
||||||
|
; ¢ë室: de - ¢à¥¬ï
|
||||||
|
; bc - ¬¥áïæ/¤¥ì
|
||||||
|
; ix - £®¤
|
||||||
|
;
|
||||||
|
;INPUT: D - DAY; E - MONTH
|
||||||
|
; H - HOUR; L - MINUTE
|
||||||
|
; B - SECOND (0...59)
|
||||||
|
; IX- YEAR (0...65535)
|
||||||
|
;OUTPUT: DE - hhhhhmmmmmmsssss h - hour, m - min, s - sec/2
|
||||||
|
; BC - yyyyyyymmmmddddd y - year, m - month, d - day
|
||||||
|
; (1980-2108)
|
||||||
|
MK_TIME:
|
||||||
|
LD A,L
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
SLA A
|
||||||
|
RL H
|
||||||
|
SLA A
|
||||||
|
RL H
|
||||||
|
SLA A
|
||||||
|
RL H
|
||||||
|
SRL B
|
||||||
|
OR B
|
||||||
|
LD L,A
|
||||||
|
|
||||||
|
LD BC,#F844 ;(-1980)
|
||||||
|
ADD IX,BC
|
||||||
|
LD A,E
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
AND #F0
|
||||||
|
LD B,XL
|
||||||
|
SLA A
|
||||||
|
RL B
|
||||||
|
OR D
|
||||||
|
LD C,A
|
||||||
|
EX DE,HL
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
;!TODO Procedures
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; <20> ᪮¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||||||
|
; ¢å®¤: de - ¢à¥¬ï
|
||||||
|
; bc - ¬¥áïæ/¤¥ì
|
||||||
|
; ix - £®¤
|
||||||
|
; ¢ë室: de - ¤¥ì/¬¥áïæ
|
||||||
|
; hl - ç áë/¬¨ãâë
|
||||||
|
; b - ᥪã¤ë
|
||||||
|
; ix - £®¤
|
||||||
|
;
|
||||||
|
;INPUT: DE - hhhhhmmmmmmsssss h - hour, m - min, s - sec/2
|
||||||
|
; BC - yyyyyyymmmmddddd y - year, m - month, d - day
|
||||||
|
; (1980-2108)
|
||||||
|
;OUTPUT: D - DAY; E - MONTH
|
||||||
|
; H - HOUR; L - MINUTE
|
||||||
|
; B - SECOND (0...59)
|
||||||
|
; IX- YEAR (0...65535)
|
||||||
|
RMKTIME:
|
||||||
|
EX DE,HL
|
||||||
|
LD A,C
|
||||||
|
AND #1F
|
||||||
|
LD D,A
|
||||||
|
SRL B
|
||||||
|
RR C
|
||||||
|
LD A,C
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
AND #0F
|
||||||
|
LD E,A
|
||||||
|
LD C,B
|
||||||
|
LD B,0
|
||||||
|
LD IX,1980
|
||||||
|
ADD IX,BC
|
||||||
|
LD A,L
|
||||||
|
AND #1F
|
||||||
|
ADD A,A
|
||||||
|
LD B,A
|
||||||
|
SRL H
|
||||||
|
RR L
|
||||||
|
SRL H
|
||||||
|
RR L
|
||||||
|
SRL H
|
||||||
|
RR L
|
||||||
|
SRL L
|
||||||
|
SRL L
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; [x] 25/01/2024
|
||||||
|
; ¢å®¤: D - ¤¥ì
|
||||||
|
; E - ¬¥áïæ
|
||||||
|
; IX - £®¤
|
||||||
|
; ¢ë室: H - ¤¥ì ¥¤¥«¨ (1 - ¢®áªà¥á¥ì¥)
|
||||||
|
CalcDayOfWeek: LD A,D
|
||||||
|
LD (.day),A
|
||||||
|
; x = (14 ? ¬¥áïæ) / 12
|
||||||
|
; y = £®¤ ? x
|
||||||
|
LD A,E
|
||||||
|
CP 3
|
||||||
|
LD A,0
|
||||||
|
JR NC,1F
|
||||||
|
DEC IX
|
||||||
|
LD A,12
|
||||||
|
1: ; y = IX
|
||||||
|
; m = ¬¥áïæ + 12 * x ? 2
|
||||||
|
ADD E
|
||||||
|
SUB 2
|
||||||
|
; m = A
|
||||||
|
; HL = (31 * m)
|
||||||
|
LD D,0
|
||||||
|
LD E,A
|
||||||
|
RLA
|
||||||
|
RLA
|
||||||
|
RLA
|
||||||
|
LD H,D
|
||||||
|
LD L,A
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
SBC HL,DE
|
||||||
|
; (31 * m) = HL
|
||||||
|
; BC = (31 * m) / 12
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
; D=0
|
||||||
|
LD E,12
|
||||||
|
CALL BC_Div_DE
|
||||||
|
; (31 * m) / 12 = BC
|
||||||
|
LD (.m31_12),BC
|
||||||
|
; y / 4
|
||||||
|
PUSH IX
|
||||||
|
POP BC
|
||||||
|
; D=0
|
||||||
|
LD E,4
|
||||||
|
CALL BC_Div_DE
|
||||||
|
; y / 4 = BC
|
||||||
|
PUSH BC
|
||||||
|
; y / 100
|
||||||
|
PUSH IX
|
||||||
|
POP BC
|
||||||
|
; D=0
|
||||||
|
LD E,100
|
||||||
|
CALL BC_Div_DE
|
||||||
|
; y / 100 = BC
|
||||||
|
PUSH BC
|
||||||
|
; y / 400
|
||||||
|
PUSH IX
|
||||||
|
POP BC
|
||||||
|
LD DE,400
|
||||||
|
CALL BC_Div_DE
|
||||||
|
; y / 400 = BC
|
||||||
|
; y/400 - y/100
|
||||||
|
AND A
|
||||||
|
LD H,B
|
||||||
|
LD L,C
|
||||||
|
POP DE
|
||||||
|
SBC HL,DE
|
||||||
|
; y/400 - y/100 = HL
|
||||||
|
; y/4 ? y/100 + y/400
|
||||||
|
POP DE
|
||||||
|
ADD HL,DE
|
||||||
|
; y/4 ? y/100 + y/400 + (31 * m)/12
|
||||||
|
.m31_12+1: LD DE,0
|
||||||
|
ADD HL,DE
|
||||||
|
; y + y/4 ? y/100 + y/400 + (31 * m)/12
|
||||||
|
EX DE,HL
|
||||||
|
ADD IX,DE
|
||||||
|
; ¤¥ì + y + y/4 ? y/100 + y/400 + (31 * m)/12
|
||||||
|
LD D,0
|
||||||
|
.day+1: LD E,0
|
||||||
|
ADD IX,DE
|
||||||
|
; 7000 + (¤¥ì + y + y/4 ? y/100 + y/400 + (31 * m)/12)
|
||||||
|
LD DE,7000
|
||||||
|
ADD IX,DE
|
||||||
|
; (7000 + (¤¥ì + y + y/4 ? y/100 + y/400 + (31 * m)/12)) mod 7
|
||||||
|
LD B,XH
|
||||||
|
LD C,XL
|
||||||
|
LD DE,7
|
||||||
|
CALL BC_Div_DE
|
||||||
|
; „¥ì<C2AD>¥¤¥«¨ = L
|
||||||
|
LD H,L
|
||||||
|
INC H
|
||||||
|
RET
|
||||||
|
; x = (14 ? ¬¥áïæ) / 12
|
||||||
|
; y = £®¤ ? x
|
||||||
|
; m = ¬¥áïæ + 12 * x ? 2
|
||||||
|
; „¥ì<C2AD>¥¤¥«¨ = (7000 + (¤¥ì + y + y/4 ? y/100 + y/400 + (31 * m)/12)) mod 7
|
||||||
|
; ‚ᥠ¤¥«¥¨ï 楫®ç¨á«¥ë¥ (®áâ ⮪ ®â¡à áë¢ ¥âáï).
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; a..z -> A..Z
|
||||||
|
UPPER: CP 'a'
|
||||||
|
RET C
|
||||||
|
CP 'z' + 1
|
||||||
|
JR NC,.CheckRUS
|
||||||
|
.Dec: SUB #20
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.CheckRUS: CP ' ' ; àãááª ï ¡ãª¢ , ª®¤ #A0
|
||||||
|
RET C
|
||||||
|
CP '¯'+1 ; àãááª ï ¡ãª¢ ¯, ª®¤ #AF + 1
|
||||||
|
JR C,.Dec
|
||||||
|
;
|
||||||
|
.BGUPPER: CP 'à' ; àãááª ï ¡ãª¢ à, ª®¤ #E0
|
||||||
|
RET C
|
||||||
|
CP 'ð' ; àãááª ï ¡ãª¢ ð, ª®¤ #F0
|
||||||
|
JR NC,.HGUPPER
|
||||||
|
SUB #50
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.HGUPPER: CP 'ñ' ; àãááª ï ¡ãª¢ ñ, ª®¤ #F1
|
||||||
|
RET NZ
|
||||||
|
DEC A
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;!TODO hardware
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; —⥨¥ ॣ¨áâ஢ CMOS
|
||||||
|
; ¢å®¤: d=®¬¥à ॣ¨áâà
|
||||||
|
RCMOS: LD C,BIOS.CMOS_RD
|
||||||
|
RST ToBIOS
|
||||||
|
;JP BCD2HEX
|
||||||
|
; INPUT : A - BCD
|
||||||
|
; OUTPUT: A - HEX
|
||||||
|
BCD2HEX:
|
||||||
|
LD E,A
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
AND #0F
|
||||||
|
LD D,A
|
||||||
|
ADD A,A
|
||||||
|
ADD A,A
|
||||||
|
ADD A,D
|
||||||
|
ADD A,A
|
||||||
|
LD D,A
|
||||||
|
LD A,E
|
||||||
|
AND #0F
|
||||||
|
ADD A,D
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
;!TODO hardware
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; ‡ ¯¨áì ॣ¨áâ஢ CMOS
|
||||||
|
; ¢å®¤: d=®¬¥à ॣ¨áâà
|
||||||
|
WCMOS: CALL HEX2BCD
|
||||||
|
LD C,BIOS.CMOS_WR
|
||||||
|
JP ToBIOS
|
||||||
|
|
||||||
|
; INPUT : A - HEX
|
||||||
|
; OUTPUT: A - BCD
|
||||||
|
HEX2BCD:
|
||||||
|
LD BC,#0AFF
|
||||||
|
.loop: INC C
|
||||||
|
SUB B
|
||||||
|
JR NC,.loop
|
||||||
|
ADD A,B
|
||||||
|
LD B,A
|
||||||
|
LD A,C
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
RLCA
|
||||||
|
AND #F0
|
||||||
|
OR B
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
;
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;BC/DE ==> BC, remainder in HL
|
||||||
|
; ¥ ¯®àâ¨â DE
|
||||||
|
BC_Div_DE:
|
||||||
|
ld hl,0
|
||||||
|
ld a,b
|
||||||
|
ld b,16
|
||||||
|
;shift the bits from BC into HL
|
||||||
|
.div_loop:
|
||||||
|
sla c
|
||||||
|
rla
|
||||||
|
adc hl,hl
|
||||||
|
sbc hl,de
|
||||||
|
jr nc,.div_inc_acc
|
||||||
|
add hl,de
|
||||||
|
db $FE ;this begins the instruction `cp *`, so it eats the next byte.
|
||||||
|
.div_inc_acc:
|
||||||
|
inc c
|
||||||
|
djnz .div_loop
|
||||||
|
ld b,a
|
||||||
|
ret
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
;
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
; HL:DE / A => DE:BC, H=0, L - ®áâ ⮪
|
||||||
|
DIV_by_Shifts:
|
||||||
|
LD C,A
|
||||||
|
DEC A
|
||||||
|
JR Z,.exit
|
||||||
|
;
|
||||||
|
AND E
|
||||||
|
LD B,A ; ®áâ ⮪
|
||||||
|
LD A,C
|
||||||
|
RRCA
|
||||||
|
;
|
||||||
|
.loop: SRL H
|
||||||
|
RR L
|
||||||
|
RR D
|
||||||
|
RR E
|
||||||
|
RRCA
|
||||||
|
JP NC,.loop
|
||||||
|
LD A,B
|
||||||
|
.exit: LD B,D
|
||||||
|
LD C,E
|
||||||
|
EX DE,HL
|
||||||
|
LD H,0
|
||||||
|
LD L,A
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
;===============================================================================================================================
|
||||||
|
MACRO PRINT_LINE_KERNEL_PANIC coordY, txtString, txtStringSize, txtColor
|
||||||
|
LD HL,txtString
|
||||||
|
LD BC,txtColor*256 + txtStringSize
|
||||||
|
LD DE,coordY * 256 + (80 - txtStringSize)/2
|
||||||
|
CALL .PRINT_LINE
|
||||||
|
ENDM ; 12 bytes
|
||||||
|
;
|
||||||
|
;-----------------------[]
|
||||||
|
; HL - á®®¡é¥¨¥
|
||||||
|
; E - ª®®à¤¨ â X ⥪á⮢®¬ íªà ¥
|
||||||
|
; BC - ¤«¨ á®®¡é¥¨ï
|
||||||
|
KERNEL_PANIC:
|
||||||
|
DI
|
||||||
|
;
|
||||||
|
PUSH DE
|
||||||
|
PUSH HL
|
||||||
|
PUSH BC
|
||||||
|
;
|
||||||
|
LD E,1
|
||||||
|
LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
|
||||||
|
RST ToBIOS
|
||||||
|
;
|
||||||
|
LD HL,#2050
|
||||||
|
LD DE,0
|
||||||
|
LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN
|
||||||
|
RST ToBIOS
|
||||||
|
;
|
||||||
|
LD A,1
|
||||||
|
OUT (SCREEN_SWITCH),A ; set scr-2
|
||||||
|
;
|
||||||
|
PRINT_LINE_KERNEL_PANIC 13, .kernel_panic, .kernel_panic.size, +(COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.RED)
|
||||||
|
PRINT_LINE_KERNEL_PANIC 18, .press_CAD, .press_CAD.size, +(COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE)
|
||||||
|
;
|
||||||
|
POP BC
|
||||||
|
POP HL
|
||||||
|
LD DE,#A000
|
||||||
|
LD A,C
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
POP DE
|
||||||
|
LD D,15
|
||||||
|
LD C,BIOS.LP_SET_PLACE
|
||||||
|
RST ToBIOS
|
||||||
|
;
|
||||||
|
LD HL,#A000
|
||||||
|
LD DE,0*256 + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE
|
||||||
|
LD B,A
|
||||||
|
LD C,BIOS.LP_PRINT_LINE3
|
||||||
|
RST ToBIOS
|
||||||
|
;
|
||||||
|
.loop: DI
|
||||||
|
HALT
|
||||||
|
JR .loop
|
||||||
|
;
|
||||||
|
.PRINT_LINE:
|
||||||
|
PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
LD DE,#A000
|
||||||
|
LD B,E
|
||||||
|
LD A,C
|
||||||
|
LDIR
|
||||||
|
;
|
||||||
|
POP DE
|
||||||
|
LD C,BIOS.LP_SET_PLACE
|
||||||
|
RST ToBIOS
|
||||||
|
;
|
||||||
|
POP DE
|
||||||
|
LD E,D
|
||||||
|
LD HL,#A000
|
||||||
|
LD D,L
|
||||||
|
LD B,A
|
||||||
|
LD C,BIOS.LP_PRINT_LINE3
|
||||||
|
JP ToBIOS
|
||||||
|
;
|
||||||
|
.kernel_panic: DZ "KERNEL PANIC!"
|
||||||
|
.kernel_panic.size EQU $-.kernel_panic
|
||||||
|
;
|
||||||
|
.press_CAD: DZ "Press Ctrl+Alt+Del or RESET."
|
||||||
|
.press_CAD.size EQU $-.press_CAD
|
||||||
|
;-----------------------[]
|
||||||
|
;===============================================================================================================================
|
||||||
613
DSS/RAM_DRV0.ASM
613
DSS/RAM_DRV0.ASM
@ -1,613 +0,0 @@
|
|||||||
;
|
|
||||||
; SYSPAGE EQU #FE
|
|
||||||
; SLOT1 EQU #A2
|
|
||||||
; SLOT2 EQU #C2
|
|
||||||
; SLOT3 EQU #E2
|
|
||||||
|
|
||||||
; ORG #3CDB
|
|
||||||
; Disk Driver Specification ver. 2.20
|
|
||||||
;[]===========================================================[ 0]
|
|
||||||
;Procedure : Initialization
|
|
||||||
;
|
|
||||||
;Function : Initialization device(s)
|
|
||||||
;
|
|
||||||
;Input : C = 00h
|
|
||||||
; IX - Environment
|
|
||||||
;Output : A = Amount drive support
|
|
||||||
; HL = Size driver
|
|
||||||
;[]===========================================================[ 0]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 1]
|
|
||||||
;Procedure : Open
|
|
||||||
;
|
|
||||||
;Function : Open disk
|
|
||||||
;
|
|
||||||
;Input : C = 01h
|
|
||||||
; A - Drive
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 1]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 2]
|
|
||||||
;Procedure : Close
|
|
||||||
;
|
|
||||||
;Function : Close disk
|
|
||||||
;
|
|
||||||
;Input : C = 02h
|
|
||||||
; A - Drive
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 2]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 3]
|
|
||||||
;!TODO
|
|
||||||
;Procedure : Media check
|
|
||||||
;
|
|
||||||
;Function : Checking change line
|
|
||||||
;
|
|
||||||
;Input : C = 03h
|
|
||||||
; A - Drive
|
|
||||||
;Output : A = 00h disk no changed
|
|
||||||
; A = 0FFh disk changed
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 3]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 4]
|
|
||||||
;Procedure : Get BPB
|
|
||||||
;
|
|
||||||
;Function : Get Block Parameters BIOS
|
|
||||||
;
|
|
||||||
;Input : C = 04h
|
|
||||||
; DE - Address
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 4]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 5]
|
|
||||||
;Procedure : Input
|
|
||||||
;
|
|
||||||
;Function : Input from disk
|
|
||||||
;
|
|
||||||
;Input : C = 05h
|
|
||||||
; HL:IX - Logical Block (sector)
|
|
||||||
; DE - Address
|
|
||||||
; B - Sector count
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 5]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 6]
|
|
||||||
;Procedure : Output
|
|
||||||
;
|
|
||||||
;Function : Output to disk
|
|
||||||
;
|
|
||||||
;Input : C = 06h
|
|
||||||
; HL:IX - Logical Block (sector)
|
|
||||||
; DE - Address
|
|
||||||
; B - Sector count
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 6]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 7]
|
|
||||||
;!TODO
|
|
||||||
;Procedure : Removable
|
|
||||||
;
|
|
||||||
;Function : Checking change line
|
|
||||||
;
|
|
||||||
;Input : C = 07h
|
|
||||||
; A - Drive
|
|
||||||
;Output : A = 00h Removable
|
|
||||||
; A = FFh Nonremovable
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 7]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 8]
|
|
||||||
;Procedure : Generic IOCTL
|
|
||||||
;
|
|
||||||
;Function : Generic Input Output Control
|
|
||||||
;
|
|
||||||
;Input : C = 08h
|
|
||||||
; B - Subcommand
|
|
||||||
; DE = 55AAh Magic Number
|
|
||||||
; Subcommand
|
|
||||||
;----------------------
|
|
||||||
; 00h - Get Device Parameters
|
|
||||||
; 01h - Read track
|
|
||||||
; 02h - Test track
|
|
||||||
; 80h - Set Device Parameters
|
|
||||||
; 81h - Write track
|
|
||||||
; 82h - Format track
|
|
||||||
;Output :
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 8]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 9]
|
|
||||||
; RESERVED
|
|
||||||
;[]===========================================================[ 9]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 10]
|
|
||||||
;!TODO
|
|
||||||
;Procedure : Read Long
|
|
||||||
;
|
|
||||||
;Function : Reading sectors from disk
|
|
||||||
;
|
|
||||||
;Input : C = 0Ah
|
|
||||||
; HL:IX - Logical Block (sector)
|
|
||||||
; DE - Address
|
|
||||||
; B - Sector count
|
|
||||||
; A'- Page
|
|
||||||
;Output : A'- Next Page
|
|
||||||
; HL:IX - Next Logical Block (sector)
|
|
||||||
; DE - Next Address
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 10]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 11]
|
|
||||||
;!TODO
|
|
||||||
;Procedure : Write Long
|
|
||||||
;
|
|
||||||
;Function : Writing sectors to disk
|
|
||||||
;
|
|
||||||
;Input : C = 0Bh
|
|
||||||
; HL:IX - Logical Block (sector)
|
|
||||||
; DE - Address
|
|
||||||
; B - Sector count
|
|
||||||
; A'- Page
|
|
||||||
;Output : A'- Next Page
|
|
||||||
; HL:IX - Next Logical Block (sector)
|
|
||||||
; DE - Next Address
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 11]
|
|
||||||
;
|
|
||||||
; Errors:
|
|
||||||
; 0 (00h) - NO ERRORS
|
|
||||||
; 1 (01h) - BAD COMMAND
|
|
||||||
; 2 (02h) - BAD DRIVE NUMBER
|
|
||||||
; 3 (03h) - UNKNOW FORMAT
|
|
||||||
; 4 (04h) - NOT READY
|
|
||||||
; 5 (05h) - SEEK ERROR
|
|
||||||
; 6 (06h) - SECTOR NOT FOUND
|
|
||||||
; 7 (07h) - CRC ERROR
|
|
||||||
; 8 (08h) - WRITE PROTECT
|
|
||||||
; 9 (09h) - READ ERROR
|
|
||||||
; 10 (0Ah) - WRITE ERROR
|
|
||||||
; 11 (0Bh) - FAILURE
|
|
||||||
; 12 (0Ch) - BUSY (DEVICE OPENED)
|
|
||||||
; 13 (0Dh) - RESERVED
|
|
||||||
|
|
||||||
RMDRIVE:
|
|
||||||
INC C
|
|
||||||
DEC C
|
|
||||||
JP Z,INIT_RD ; 0
|
|
||||||
DEC C
|
|
||||||
JR Z,RESE_RD ; 1
|
|
||||||
DEC C
|
|
||||||
JR Z,STAT_RD ; 2
|
|
||||||
DEC C
|
|
||||||
JR Z,CHEK_RD ; 3
|
|
||||||
DEC C
|
|
||||||
JR Z,GBPB_RD ; 4
|
|
||||||
DEC C
|
|
||||||
JR Z,READR ; 5
|
|
||||||
DEC C
|
|
||||||
JR Z,WRITER ; 6
|
|
||||||
DEC C
|
|
||||||
JR Z,REMOV_R ; 7
|
|
||||||
DEC C
|
|
||||||
JP Z,IOCTL_R ; 8
|
|
||||||
|
|
||||||
; DEC C
|
|
||||||
; JP Z,RESR_H ; 9
|
|
||||||
; DEC C
|
|
||||||
; JP Z,LREADH ; 10
|
|
||||||
; DEC C
|
|
||||||
; JP Z,LWRITEH ; 11
|
|
||||||
.error:
|
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
REMOV_R:
|
|
||||||
RESE_RD:
|
|
||||||
STAT_RD:
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;!FIXIT ᤥ« âì ¢ SYS_PAGE ¤«ï à ¬¤¨áª®¢ ¯¥à¥¬¥ë¥ ¨ ¡à âì ®ââ㤠§ 票¥
|
|
||||||
CHEK_RD LD A,#FF
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;DE - ADDRESS
|
|
||||||
GBPB_RD LD IX,0
|
|
||||||
LD HL,0
|
|
||||||
LD B,#01
|
|
||||||
;JP READR
|
|
||||||
;READ SECTORS
|
|
||||||
; HL:IX - SECTOR
|
|
||||||
; DE - ADDRESS
|
|
||||||
; B - COUNT
|
|
||||||
; A - DRIVE
|
|
||||||
READR PUSH BC
|
|
||||||
PUSH IX
|
|
||||||
PUSH HL
|
|
||||||
PUSH BC
|
|
||||||
CALL RAMADDR
|
|
||||||
POP BC
|
|
||||||
LD IX,512
|
|
||||||
RAMRLOP PUSH BC
|
|
||||||
PUSH IX
|
|
||||||
CALL LRDSEC
|
|
||||||
POP IX
|
|
||||||
POP BC
|
|
||||||
DJNZ RAMRLOP
|
|
||||||
POP HL
|
|
||||||
POP IX
|
|
||||||
POP BC
|
|
||||||
XOR A
|
|
||||||
CP B
|
|
||||||
LD C,B
|
|
||||||
LD B,A
|
|
||||||
JR Z,DYEP256
|
|
||||||
ADD IX,BC
|
|
||||||
LD C,B
|
|
||||||
ADC HL,BC
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
DYEP256 INC B
|
|
||||||
ADD IX,BC
|
|
||||||
LD B,C
|
|
||||||
ADC HL,BC
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
|
|
||||||
;WRITE SECTORS
|
|
||||||
; HL:IX - SECTOR
|
|
||||||
; DE - ADDRESS
|
|
||||||
; B - COUNT
|
|
||||||
; A - DRIVE
|
|
||||||
WRITER PUSH BC
|
|
||||||
PUSH IX
|
|
||||||
PUSH HL
|
|
||||||
PUSH BC
|
|
||||||
CALL RAMADDR
|
|
||||||
POP BC
|
|
||||||
LD IX,512
|
|
||||||
RAMWLOP PUSH BC
|
|
||||||
PUSH IX
|
|
||||||
CALL WRDSEC
|
|
||||||
POP IX
|
|
||||||
POP BC
|
|
||||||
DJNZ RAMWLOP
|
|
||||||
POP HL
|
|
||||||
POP IX
|
|
||||||
POP BC
|
|
||||||
XOR A
|
|
||||||
CP B
|
|
||||||
LD C,B
|
|
||||||
LD B,A
|
|
||||||
JR Z,WYEP256
|
|
||||||
ADD IX,BC
|
|
||||||
LD C,B
|
|
||||||
ADC HL,BC
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
WYEP256 INC B
|
|
||||||
ADD IX,BC
|
|
||||||
LD B,C
|
|
||||||
ADC HL,BC
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
|
|
||||||
INIT_RD:
|
|
||||||
.SectorSize EQU 512 ;!HARDCODE
|
|
||||||
LD HL,.SectorSize
|
|
||||||
LD A,#80
|
|
||||||
.loop: SRL A
|
|
||||||
RR H
|
|
||||||
JR NC,.loop
|
|
||||||
|
|
||||||
LD (S_P_P),A
|
|
||||||
LD BC,#0*256 + BIOS.GET_RAMD_ST ; <20>®«ã票¥ ¨¤¥â¨ä¨ª â®à ¡«®ª , § 祮£® RAM-Disk
|
|
||||||
LD DE,RAMDTBL
|
|
||||||
|
|
||||||
.initLoop:
|
|
||||||
PUSH BC
|
|
||||||
LD A,B
|
|
||||||
PUSH DE
|
|
||||||
RST ToBIOS
|
|
||||||
POP DE
|
|
||||||
OR A
|
|
||||||
JR Z,.noDRV
|
|
||||||
|
|
||||||
LD (DE),A
|
|
||||||
INC DE
|
|
||||||
POP BC
|
|
||||||
LD A,B
|
|
||||||
LD (DE),A
|
|
||||||
INC DE
|
|
||||||
JP 1F
|
|
||||||
|
|
||||||
.noDRV: POP BC
|
|
||||||
1: INC B
|
|
||||||
LD A,RAMDTBL.Size / 2
|
|
||||||
CP B
|
|
||||||
JR NZ,.initLoop
|
|
||||||
|
|
||||||
LD HL,RAMDTBL
|
|
||||||
EX DE,HL
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
SRL L
|
|
||||||
LD A,L
|
|
||||||
; LD HL,ENDDRVR
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
; ’€<E28099>‹ˆ–€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆ‘Š€ ˆ …ƒŽ RAM-DISK ID
|
|
||||||
; DB RAM_DRIVE_ID, RAM_DRIVE_NUMBER
|
|
||||||
RAMDTBL: DUP MAX_RAMDRIVES * 2
|
|
||||||
DB #FF
|
|
||||||
EDUP
|
|
||||||
.Size EQU $-RAMDTBL
|
|
||||||
|
|
||||||
|
|
||||||
; SECTOR / S_P_P = START PAGE
|
|
||||||
; INPUT : HL:IX -SECTOR
|
|
||||||
; OUTPUT: A':HL - ADDRESS
|
|
||||||
RAMADDR LD BC,RAMDTBL
|
|
||||||
|
|
||||||
SLA A
|
|
||||||
|
|
||||||
ADD A,C
|
|
||||||
LD C,A
|
|
||||||
LD A,0
|
|
||||||
ADC A,B
|
|
||||||
LD B,A
|
|
||||||
LD A,(BC)
|
|
||||||
EX AF,AF'
|
|
||||||
LD B,XH
|
|
||||||
LD C,XL
|
|
||||||
LD A,(S_P_P) ; (S_P_P) ;SECTORS PER Page
|
|
||||||
;AGE
|
|
||||||
DIVR0 RRCA
|
|
||||||
JR C,DIVR1
|
|
||||||
RR H
|
|
||||||
RR L
|
|
||||||
RR B
|
|
||||||
RR C
|
|
||||||
JR DIVR0
|
|
||||||
DIVR1 LD B,C
|
|
||||||
LD C,#C4 ;GET FIRST PAGE
|
|
||||||
EX AF,AF'
|
|
||||||
RST ToBIOS
|
|
||||||
EX AF,AF'
|
|
||||||
LD A,(S_P_P)
|
|
||||||
LD C,A
|
|
||||||
DEC C
|
|
||||||
LD A,XL
|
|
||||||
AND C
|
|
||||||
INC A
|
|
||||||
LD HL,#C000
|
|
||||||
LD BC,512
|
|
||||||
SBC HL,BC
|
|
||||||
ADDLP ADD HL,BC
|
|
||||||
DEC A
|
|
||||||
JR NZ,ADDLP
|
|
||||||
RET
|
|
||||||
|
|
||||||
S_P_P DB #00
|
|
||||||
|
|
||||||
; A':HL - ADDRESS SOURCE
|
|
||||||
; DE - ADDRESS DESTINATION
|
|
||||||
LRDSEC LD A,D
|
|
||||||
CP #A0
|
|
||||||
LD C,SLOT3
|
|
||||||
SET 6,H
|
|
||||||
JR C,RMDL02
|
|
||||||
LD C,SLOT1
|
|
||||||
RES 7,H
|
|
||||||
RMDL02 IN A,(C)
|
|
||||||
EX AF,AF'
|
|
||||||
DI
|
|
||||||
OUT (C),A
|
|
||||||
LD B,XH
|
|
||||||
LD XH,C
|
|
||||||
LD C,XL
|
|
||||||
LDIR
|
|
||||||
EX AF,AF'
|
|
||||||
LD C,XH
|
|
||||||
OUT (C),A
|
|
||||||
LD A,H
|
|
||||||
AND #7F
|
|
||||||
EI
|
|
||||||
RET NZ
|
|
||||||
LD C,SLOT3 ;GET NEXT PAGE
|
|
||||||
IN B,(C)
|
|
||||||
LD A,SYS_PAGE
|
|
||||||
OUT (C),A
|
|
||||||
EX AF,AF'
|
|
||||||
LD XH,#C2
|
|
||||||
LD XL,A
|
|
||||||
LD A,(IX)
|
|
||||||
EX AF,AF'
|
|
||||||
OUT (C),B
|
|
||||||
LD H,#C0
|
|
||||||
RET
|
|
||||||
|
|
||||||
; A':HL - ADDRESS SOURCE
|
|
||||||
; DE - ADDRESS DESTINATION
|
|
||||||
|
|
||||||
WRDSEC LD A,D
|
|
||||||
CP #A0
|
|
||||||
LD C,SLOT3
|
|
||||||
SET 6,H
|
|
||||||
JR C,WMDL02
|
|
||||||
LD C,SLOT1
|
|
||||||
RES 7,H
|
|
||||||
WMDL02 IN A,(C)
|
|
||||||
EX AF,AF'
|
|
||||||
DI
|
|
||||||
OUT (C),A
|
|
||||||
LD B,XH
|
|
||||||
LD XH,C
|
|
||||||
LD C,XL
|
|
||||||
EX DE,HL
|
|
||||||
LDIR
|
|
||||||
EX DE,HL
|
|
||||||
EX AF,AF'
|
|
||||||
LD C,XH
|
|
||||||
OUT (C),A
|
|
||||||
LD A,H
|
|
||||||
AND #7F
|
|
||||||
EI
|
|
||||||
RET NZ
|
|
||||||
LD C,SLOT3 ;GET NEXT PAGE
|
|
||||||
IN B,(C)
|
|
||||||
LD A,SYS_PAGE
|
|
||||||
OUT (C),A
|
|
||||||
EX AF,AF'
|
|
||||||
LD XH,#C2
|
|
||||||
LD XL,A
|
|
||||||
LD A,(IX)
|
|
||||||
EX AF,AF'
|
|
||||||
OUT (C),B
|
|
||||||
LD H,#C0
|
|
||||||
RET
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;;
|
|
||||||
;;
|
|
||||||
|
|
||||||
|
|
||||||
; 00 - GET DEVICE PARAMETERS
|
|
||||||
; 01 - READ TRACK
|
|
||||||
; 02 - TEST TRACK
|
|
||||||
; 80 - SET DEVICE PARAMETERS
|
|
||||||
; 81 - WRITE TRACK
|
|
||||||
; 82 - FORMAT TRACK
|
|
||||||
|
|
||||||
|
|
||||||
IOCTL_R:
|
|
||||||
BIT 7,B
|
|
||||||
JR NZ,.O_CTL_F
|
|
||||||
INC B
|
|
||||||
DEC B
|
|
||||||
JP Z,.RGETPRM
|
|
||||||
; DEC B
|
|
||||||
; JP Z,FRDTRAC
|
|
||||||
; DEC B
|
|
||||||
; JP Z,FCHTRAC
|
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
.O_CTL_F:
|
|
||||||
RES 7,B
|
|
||||||
INC B
|
|
||||||
DEC B
|
|
||||||
JP Z,.RSETPRM
|
|
||||||
; DEC B
|
|
||||||
; JP Z,FWRTRAC
|
|
||||||
; DEC B
|
|
||||||
; JP Z,FFRTRAC
|
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
; HL:DE - SECTORS ON LOGICAL DISK
|
|
||||||
; HL' - CYLINDERS ON PHISICAL DISK
|
|
||||||
; DE' - HEADS ON PHISICAL DISK
|
|
||||||
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
|
||||||
; A' - PHISICAL DRIVE NUMBER
|
|
||||||
; A - EXTENDED INFORMATION
|
|
||||||
; D0...D3 - "0" RESERVED (MAY BE OTHER)
|
|
||||||
; D4 - DEVICE MASTER/SLAVE
|
|
||||||
; D5 - "1" RESERVED
|
|
||||||
; D6 - ADDRESSING MODE LBA/CHS
|
|
||||||
; D7 - "1" RESERVED
|
|
||||||
.RGETPRM:
|
|
||||||
EX DE,HL
|
|
||||||
LD BC,#55AA
|
|
||||||
AND A
|
|
||||||
SBC HL,BC
|
|
||||||
LD L,A
|
|
||||||
LD A,DSS_Error.drv.GENERAL_FAILURE
|
|
||||||
SCF
|
|
||||||
RET NZ
|
|
||||||
|
|
||||||
|
|
||||||
EX AF,AF'
|
|
||||||
LD BC,RAMDTBL
|
|
||||||
LD A,L
|
|
||||||
SLA A
|
|
||||||
ADD A,C
|
|
||||||
LD C,A
|
|
||||||
LD A,0
|
|
||||||
ADC A,B
|
|
||||||
LD B,A
|
|
||||||
INC BC
|
|
||||||
LD A,(BC)
|
|
||||||
ADD #60 ;!HARDCODE ᤥ« âì ®¬¥à à §ëå ãáâனá⢠ç¥à¥§ ¬¥âª¨
|
|
||||||
PUSH AF
|
|
||||||
PUSH AF
|
|
||||||
EX AF,AF'
|
|
||||||
|
|
||||||
POP AF
|
|
||||||
LD C,BIOS.DRV_GET_PAR
|
|
||||||
RST ToBIOS
|
|
||||||
|
|
||||||
PUSH HL ;ç¨á«® £®«®¢®ª, ç¨á«® ᥪâ®à®¢ ( 楫¨¤à)
|
|
||||||
PUSH DE ;ª®«¨ç¥á⢮ 樫¨¤à®¢
|
|
||||||
EXX
|
|
||||||
POP HL ;ª®«¨ç¥á⢮ 樫¨¤à®¢
|
|
||||||
POP BC ;ç¨á«® ᥪâ®à®¢ ( 楫¨¤à)
|
|
||||||
LD D,0
|
|
||||||
LD E,B ;ç¨á«® £®«®¢®ª
|
|
||||||
LD B,D
|
|
||||||
EXX
|
|
||||||
|
|
||||||
LD A,L
|
|
||||||
|
|
||||||
RRA
|
|
||||||
JR C,.end
|
|
||||||
.loopShift:
|
|
||||||
SLA E
|
|
||||||
RL D
|
|
||||||
RRA
|
|
||||||
JR NC,.loopShift
|
|
||||||
|
|
||||||
.end:
|
|
||||||
EX AF,AF'
|
|
||||||
POP AF
|
|
||||||
EX AF,AF'
|
|
||||||
XOR A
|
|
||||||
LD L,A
|
|
||||||
LD H,L
|
|
||||||
LD A,%10100000
|
|
||||||
RET
|
|
||||||
|
|
||||||
;!HARDCODE
|
|
||||||
.RSETPRM:
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
ENDDRVR EQU $
|
|
||||||
;
|
|
||||||
477
DSS/RAM_DRV1.ASM
477
DSS/RAM_DRV1.ASM
@ -1,477 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
; SYSPAGE EQU #FE
|
|
||||||
; SLOT1 EQU #A2
|
|
||||||
; SLOT2 EQU #C2
|
|
||||||
; SLOT3 EQU #E2
|
|
||||||
|
|
||||||
; ORG #3CDB
|
|
||||||
; Disk Driver Specification ver. 2.20
|
|
||||||
;[]===========================================================[ 0]
|
|
||||||
;Procedure : Initialization
|
|
||||||
;
|
|
||||||
;Function : Initialization device(s)
|
|
||||||
;
|
|
||||||
;Input : C = 00h
|
|
||||||
; IX - Environment
|
|
||||||
;Output : A = Amount drive support
|
|
||||||
; HL = Size driver
|
|
||||||
;[]===========================================================[ 0]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 1]
|
|
||||||
;Procedure : Open
|
|
||||||
;
|
|
||||||
;Function : Open disk
|
|
||||||
;
|
|
||||||
;Input : C = 01h
|
|
||||||
; A - Drive
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 1]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 2]
|
|
||||||
;Procedure : Close
|
|
||||||
;
|
|
||||||
;Function : Close disk
|
|
||||||
;
|
|
||||||
;Input : C = 02h
|
|
||||||
; A - Drive
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 2]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 3]
|
|
||||||
;!TODO
|
|
||||||
;Procedure : Media check
|
|
||||||
;
|
|
||||||
;Function : Checking change line
|
|
||||||
;
|
|
||||||
;Input : C = 03h
|
|
||||||
; A - Drive
|
|
||||||
;Output : A = 00h disk no changed
|
|
||||||
; A = 0FFh disk changed
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 3]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 4]
|
|
||||||
;Procedure : Get BPB
|
|
||||||
;
|
|
||||||
;Function : Get Block Parameters BIOS
|
|
||||||
;
|
|
||||||
;Input : C = 04h
|
|
||||||
; DE - Address
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 4]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 5]
|
|
||||||
;Procedure : Input
|
|
||||||
;
|
|
||||||
;Function : Input from disk
|
|
||||||
;
|
|
||||||
;Input : C = 05h
|
|
||||||
; HL:IX - Logical Block (sector)
|
|
||||||
; DE - Address
|
|
||||||
; B - Sector count
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 5]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 6]
|
|
||||||
;Procedure : Output
|
|
||||||
;
|
|
||||||
;Function : Output to disk
|
|
||||||
;
|
|
||||||
;Input : C = 06h
|
|
||||||
; HL:IX - Logical Block (sector)
|
|
||||||
; DE - Address
|
|
||||||
; B - Sector count
|
|
||||||
;Output : None
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 6]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 7]
|
|
||||||
;!TODO
|
|
||||||
;Procedure : Removable
|
|
||||||
;
|
|
||||||
;Function : Checking change line
|
|
||||||
;
|
|
||||||
;Input : C = 07h
|
|
||||||
; A - Drive
|
|
||||||
;Output : A = 00h Removable
|
|
||||||
; A = FFh Nonremovable
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 7]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 8]
|
|
||||||
;Procedure : Generic IOCTL
|
|
||||||
;
|
|
||||||
;Function : Generic Input Output Control
|
|
||||||
;
|
|
||||||
;Input : C = 08h
|
|
||||||
; B - Subcommand
|
|
||||||
; DE = 55AAh Magic Number
|
|
||||||
; Subcommand
|
|
||||||
;----------------------
|
|
||||||
; 00h - Get Device Parameters
|
|
||||||
; 01h - Read track
|
|
||||||
; 02h - Test track
|
|
||||||
; 80h - Set Device Parameters
|
|
||||||
; 81h - Write track
|
|
||||||
; 82h - Format track
|
|
||||||
;Output :
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 8]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 9]
|
|
||||||
; RESERVED
|
|
||||||
;[]===========================================================[ 9]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 10]
|
|
||||||
;!TODO
|
|
||||||
;Procedure : Read Long
|
|
||||||
;
|
|
||||||
;Function : Reading sectors from disk
|
|
||||||
;
|
|
||||||
;Input : C = 0Ah
|
|
||||||
; HL:IX - Logical Block (sector)
|
|
||||||
; DE - Address
|
|
||||||
; B - Sector count
|
|
||||||
; A'- Page
|
|
||||||
;Output : A'- Next Page
|
|
||||||
; HL:IX - Next Logical Block (sector)
|
|
||||||
; DE - Next Address
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 10]
|
|
||||||
|
|
||||||
|
|
||||||
;[]===========================================================[ 11]
|
|
||||||
;!TODO
|
|
||||||
;Procedure : Write Long
|
|
||||||
;
|
|
||||||
;Function : Writing sectors to disk
|
|
||||||
;
|
|
||||||
;Input : C = 0Bh
|
|
||||||
; HL:IX - Logical Block (sector)
|
|
||||||
; DE - Address
|
|
||||||
; B - Sector count
|
|
||||||
; A'- Page
|
|
||||||
;Output : A'- Next Page
|
|
||||||
; HL:IX - Next Logical Block (sector)
|
|
||||||
; DE - Next Address
|
|
||||||
;
|
|
||||||
;[]===========================================================[ 11]
|
|
||||||
;
|
|
||||||
; Errors:
|
|
||||||
; 0 (00h) - NO ERRORS
|
|
||||||
; 1 (01h) - BAD COMMAND
|
|
||||||
; 2 (02h) - BAD DRIVE NUMBER
|
|
||||||
; 3 (03h) - UNKNOW FORMAT
|
|
||||||
; 4 (04h) - NOT READY
|
|
||||||
; 5 (05h) - SEEK ERROR
|
|
||||||
; 6 (06h) - SECTOR NOT FOUND
|
|
||||||
; 7 (07h) - CRC ERROR
|
|
||||||
; 8 (08h) - WRITE PROTECT
|
|
||||||
; 9 (09h) - READ ERROR
|
|
||||||
; 10 (0Ah) - WRITE ERROR
|
|
||||||
; 11 (0Bh) - FAILURE
|
|
||||||
; 12 (0Ch) - BUSY (DEVICE OPENED)
|
|
||||||
; 13 (0Dh) - RESERVED
|
|
||||||
|
|
||||||
|
|
||||||
; MACRO _mGET_RAMDRV_NUM
|
|
||||||
; PUSH BC
|
|
||||||
; LD BC,RAMDTBL
|
|
||||||
; SLA A
|
|
||||||
; ADD A,C
|
|
||||||
; LD C,A
|
|
||||||
; LD A,0
|
|
||||||
; ADC A,B
|
|
||||||
; LD B,A
|
|
||||||
; INC BC
|
|
||||||
; LD A,(BC)
|
|
||||||
; OR #60
|
|
||||||
; POP BC
|
|
||||||
; ENDM
|
|
||||||
|
|
||||||
MACRO _mGET_RAMDRV_NUM
|
|
||||||
LD BC,RAMDTBL
|
|
||||||
SLA A
|
|
||||||
ADD A,C
|
|
||||||
LD C,A
|
|
||||||
LD A,0
|
|
||||||
ADC A,B
|
|
||||||
LD B,A
|
|
||||||
INC BC
|
|
||||||
LD A,(BC)
|
|
||||||
OR #60 ;!HARDCODE ᤥ« âì ®¬¥à à §ëå ãáâனá⢠ç¥à¥§ ¬¥âª¨
|
|
||||||
ENDM
|
|
||||||
|
|
||||||
|
|
||||||
; parser
|
|
||||||
RMDRIVE:
|
|
||||||
INC C
|
|
||||||
DEC C
|
|
||||||
JP Z,INIT_RD ; 0
|
|
||||||
DEC C
|
|
||||||
JR Z,RESET_RD ; 1
|
|
||||||
DEC C
|
|
||||||
JR Z,STATUS_RD ; 2
|
|
||||||
DEC C
|
|
||||||
JR Z,CHEK_RD ; 3
|
|
||||||
DEC C
|
|
||||||
JR Z,GBPB_RD ; 4
|
|
||||||
DEC C
|
|
||||||
JR Z,READ_RD ; 5
|
|
||||||
DEC C
|
|
||||||
JR Z,WRITE_RD ; 6
|
|
||||||
DEC C
|
|
||||||
JR Z,REMOV_RD ; 7
|
|
||||||
DEC C
|
|
||||||
JP Z,IOCTL_RD ; 8
|
|
||||||
DEC C
|
|
||||||
JP Z,.error ; 9 RESR_H
|
|
||||||
DEC C
|
|
||||||
JP Z,LREAD_RD ; 10
|
|
||||||
DEC C
|
|
||||||
JP Z,LWRITE_RD ; 11
|
|
||||||
.error:
|
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
REMOV_RD:
|
|
||||||
RESET_RD:
|
|
||||||
STATUS_RD:
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;!FIXIT ᤥ« âì ¢ SYS_PAGE ¤«ï à ¬¤¨áª®¢ ¯¥à¥¬¥ë¥ ¨ ¡à âì ®ââ㤠§ 票¥
|
|
||||||
CHEK_RD LD A,#FF
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
;DE - ADDRESS
|
|
||||||
GBPB_RD LD IX,0
|
|
||||||
LD HL,0
|
|
||||||
LD B,#01
|
|
||||||
;JP READ_RD
|
|
||||||
;READ SECTORS
|
|
||||||
; HL:IX - SECTOR
|
|
||||||
; DE - ADDRESS
|
|
||||||
; B - COUNT
|
|
||||||
; A - DRIVE
|
|
||||||
READ_RD:
|
|
||||||
PUSH BC
|
|
||||||
_mGET_RAMDRV_NUM
|
|
||||||
POP BC
|
|
||||||
LD C,BIOS.DRV_READ
|
|
||||||
JP ToBIOS
|
|
||||||
; RST ToBIOS
|
|
||||||
; XOR A
|
|
||||||
; RET
|
|
||||||
LREAD_RD:
|
|
||||||
PUSH BC
|
|
||||||
_mGET_RAMDRV_NUM
|
|
||||||
POP BC
|
|
||||||
LD C,BIOS.DRV_READ_LONG
|
|
||||||
JP ToBIOS
|
|
||||||
; RST ToBIOS
|
|
||||||
; XOR A
|
|
||||||
; RET
|
|
||||||
|
|
||||||
;WRITE SECTORS
|
|
||||||
; HL:IX - SECTOR
|
|
||||||
; DE - ADDRESS
|
|
||||||
; B - COUNT
|
|
||||||
; A - DRIVE
|
|
||||||
WRITE_RD:
|
|
||||||
PUSH BC
|
|
||||||
_mGET_RAMDRV_NUM
|
|
||||||
POP BC
|
|
||||||
LD C,BIOS.DRV_WRITE
|
|
||||||
JP ToBIOS
|
|
||||||
; RST ToBIOS
|
|
||||||
; XOR A
|
|
||||||
; RET
|
|
||||||
|
|
||||||
LWRITE_RD:
|
|
||||||
PUSH BC
|
|
||||||
_mGET_RAMDRV_NUM
|
|
||||||
POP BC
|
|
||||||
LD C,BIOS.DRV_WRITE_LONG
|
|
||||||
JP ToBIOS
|
|
||||||
; RST ToBIOS
|
|
||||||
; XOR A
|
|
||||||
; RET
|
|
||||||
|
|
||||||
;S_P_P DB #00
|
|
||||||
INIT_RD:
|
|
||||||
; .SectorSize EQU 512 ;!HARDCODE
|
|
||||||
; LD HL,.SectorSize
|
|
||||||
; LD A,#80
|
|
||||||
; .loop: SRL A
|
|
||||||
; RR H
|
|
||||||
; JR NC,.loop
|
|
||||||
; LD (S_P_P),A
|
|
||||||
|
|
||||||
LD BC,#0*256 + BIOS.GET_RAMD_ST ; <20>®«ã票¥ ¨¤¥â¨ä¨ª â®à ¡«®ª , § 祮£® RAM-Disk
|
|
||||||
LD DE,RAMDTBL
|
|
||||||
|
|
||||||
.initLoop:
|
|
||||||
PUSH BC
|
|
||||||
LD A,B
|
|
||||||
PUSH DE
|
|
||||||
RST ToBIOS
|
|
||||||
POP DE
|
|
||||||
OR A
|
|
||||||
JR Z,.noDRV
|
|
||||||
|
|
||||||
LD (DE),A
|
|
||||||
INC DE
|
|
||||||
POP BC
|
|
||||||
LD A,B
|
|
||||||
LD (DE),A
|
|
||||||
INC DE
|
|
||||||
JP 1F
|
|
||||||
|
|
||||||
.noDRV: POP BC
|
|
||||||
1: INC B
|
|
||||||
LD A,RAMDTBL.Size / 2
|
|
||||||
CP B
|
|
||||||
JR NZ,.initLoop
|
|
||||||
|
|
||||||
LD HL,RAMDTBL
|
|
||||||
EX DE,HL
|
|
||||||
AND A
|
|
||||||
SBC HL,DE
|
|
||||||
SRL L
|
|
||||||
LD A,L
|
|
||||||
; LD HL,ENDDRVR
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
; ’€<E28099>‹ˆ–€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆ‘Š€ ˆ …ƒŽ RAM-DISK ID
|
|
||||||
; DB RAM_DRIVE_ID, RAM_DRIVE_NUMBER
|
|
||||||
RAMDTBL: DUP MAX_RAMDRIVES * 2
|
|
||||||
DB #FF
|
|
||||||
EDUP
|
|
||||||
.Size EQU $-RAMDTBL
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
; 00 - GET DEVICE PARAMETERS
|
|
||||||
; 01 - READ TRACK
|
|
||||||
; 02 - TEST TRACK
|
|
||||||
; 80 - SET DEVICE PARAMETERS
|
|
||||||
; 81 - WRITE TRACK
|
|
||||||
; 82 - FORMAT TRACK
|
|
||||||
IOCTL_RD:
|
|
||||||
BIT 7,B
|
|
||||||
JR NZ,.O_CTL_F
|
|
||||||
INC B
|
|
||||||
DEC B
|
|
||||||
JP Z,.RGETPRM
|
|
||||||
; DEC B
|
|
||||||
; JP Z,FRDTRAC
|
|
||||||
; DEC B
|
|
||||||
; JP Z,FCHTRAC
|
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
.O_CTL_F:
|
|
||||||
; RES 7,B
|
|
||||||
; INC B
|
|
||||||
; DEC B
|
|
||||||
; JP Z,.RSETPRM
|
|
||||||
|
|
||||||
; DEC B
|
|
||||||
; JP Z,FWRTRAC
|
|
||||||
; DEC B
|
|
||||||
; JP Z,FFRTRAC
|
|
||||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
; HL:DE - SECTORS ON LOGICAL DISK
|
|
||||||
; HL' - CYLINDERS ON PHISICAL DISK
|
|
||||||
; DE' - HEADS ON PHISICAL DISK
|
|
||||||
; BC' - SECTORS PER TRACK ON PHISICAL DISK
|
|
||||||
; A' - PHISICAL DRIVE NUMBER
|
|
||||||
; A - EXTENDED INFORMATION
|
|
||||||
; D0...D3 - "0" RESERVED (MAY BE OTHER)
|
|
||||||
; D4 - DEVICE MASTER/SLAVE
|
|
||||||
; D5 - "1" RESERVED
|
|
||||||
; D6 - ADDRESSING MODE LBA/CHS
|
|
||||||
; D7 - "1" RESERVED
|
|
||||||
.RGETPRM:
|
|
||||||
EX DE,HL
|
|
||||||
LD BC,#55AA
|
|
||||||
AND A
|
|
||||||
SBC HL,BC
|
|
||||||
LD L,A
|
|
||||||
LD A,DSS_Error.drv.GENERAL_FAILURE
|
|
||||||
SCF
|
|
||||||
RET NZ
|
|
||||||
|
|
||||||
|
|
||||||
EX AF,AF'
|
|
||||||
LD A,L
|
|
||||||
_mGET_RAMDRV_NUM
|
|
||||||
PUSH AF
|
|
||||||
PUSH AF
|
|
||||||
EX AF,AF'
|
|
||||||
|
|
||||||
POP AF
|
|
||||||
LD C,BIOS.DRV_GET_PAR
|
|
||||||
RST ToBIOS
|
|
||||||
|
|
||||||
PUSH HL ;ç¨á«® £®«®¢®ª, ç¨á«® ᥪâ®à®¢ ( 楫¨¤à)
|
|
||||||
PUSH DE ;ª®«¨ç¥á⢮ 樫¨¤à®¢
|
|
||||||
EXX
|
|
||||||
POP HL ;ª®«¨ç¥á⢮ 樫¨¤à®¢
|
|
||||||
POP BC ;ç¨á«® ᥪâ®à®¢ ( 楫¨¤à)
|
|
||||||
LD D,0
|
|
||||||
LD E,B ;ç¨á«® £®«®¢®ª
|
|
||||||
LD B,D
|
|
||||||
EXX
|
|
||||||
|
|
||||||
LD A,L
|
|
||||||
|
|
||||||
RRA
|
|
||||||
JR C,.end
|
|
||||||
.loopShift:
|
|
||||||
SLA E
|
|
||||||
RL D
|
|
||||||
RRA
|
|
||||||
JR NC,.loopShift
|
|
||||||
|
|
||||||
.end:
|
|
||||||
EX AF,AF'
|
|
||||||
POP AF
|
|
||||||
EX AF,AF'
|
|
||||||
XOR A
|
|
||||||
LD L,A
|
|
||||||
LD H,L
|
|
||||||
LD A,%10100000
|
|
||||||
RET
|
|
||||||
|
|
||||||
; !TODO
|
|
||||||
; !FIXIT
|
|
||||||
; .RSETPRM:
|
|
||||||
; AND A
|
|
||||||
; RET
|
|
||||||
|
|
||||||
ENDDRVR EQU $
|
|
||||||
;
|
|
||||||
@ -1,45 +1,67 @@
|
|||||||
;
|
;
|
||||||
STRUCT _sStack ; 256 bytes
|
STRUCT _sStack ; 256 bytes
|
||||||
buffer BLOCK 255,0
|
.buffer BLOCK 256,0
|
||||||
SPoint BYTE 0
|
;.SPoint BYTE 0
|
||||||
ENDS
|
ENDS
|
||||||
;
|
;
|
||||||
|
|
||||||
;
|
;
|
||||||
STRUCT _sEXE_HEADER ; 512 bytes
|
STRUCT _sEXE_HEADER ; 512 bytes
|
||||||
EXE_EXT TEXT 3,{"EX","E"}
|
.EXE_EXT TEXT 3,{"EX","E"} ; 0-2 EXE ‘¨£ âãà
|
||||||
VERSION BYTE 0
|
.VERSION BYTE 0 ; 3 Version of EXE file
|
||||||
OFFCOD1 WORD 0
|
.OFFCOD1 WORD 00 ; 4-5 ‘ ª ª®£® á¬¥é¥¨ï ¢ ä ©«¥ ¡ã¤¥â £à㧨âìáï ª®¤ ¢
|
||||||
OFFCOD2 WORD 0
|
.OFFCOD2 WORD 00 ; 6-7 ¯ ¬ïâì ¯® ¤à¥áã (Code_addr) Low addr, High addr.
|
||||||
LOADER WORD 0
|
.LOADER WORD 00 ; 8-9 <EFBFBD> §¬¥à ¯¥à¢¨ç®£® § £àã§ç¨ª ¨«¨ 0
|
||||||
RESERVED BLOCK 6,0
|
.RESERVED BLOCK 6,0 ; 10-15 Reserved
|
||||||
LD_ADDR WORD 0
|
.LD_ADDR WORD 00 ; 16-17 €¤à¥á à ᯮ«®¦¥¨ï ª®¤ ¢ ¯ ¬ï⨠(#4100-#FFFF)
|
||||||
PC_REG WORD 0
|
.PC_REG WORD 00 ; 18-19 €¤à¥á ¢ ¯ ¬ïâ¨ á ª®â®à®£® § ¯ãáâ¨âáï ª®¤ (Reg. PC)
|
||||||
SP_REG WORD 0
|
.SP_REG WORD 00 ; 20-21 €¤à¥á á⥪ (Reg. SP)
|
||||||
RESERVED2 BLOCK 490,0
|
.UnUsedPoint BYTE 0 ; 22
|
||||||
|
; ¢ .RESERVED2 ¥«ì§ï ¯à®¯¨á âì BLOCK 512-.UnUsedPoint,0; ¯®í⮬ã å प®¤
|
||||||
|
.RESERVED2 BLOCK 512-23,0 ; 23-512 Œ®¦® ¨á¯®«ì§®¢ âì ¯®¤ ⥪áâ ¤«ï ¢ë¯¥¤àñ¦ ¨«¨ ¥ ¨á¯®«ì§®¢ âì
|
||||||
ENDS
|
ENDS
|
||||||
;
|
;
|
||||||
|
|
||||||
;File Manipulator (FM)
|
;File Manipulator (FM)
|
||||||
STRUCT _sFM ; 44 bytes
|
;[ ] fat32
|
||||||
.NAME: TEXT 8,{". "," "} ;+00 NAME
|
STRUCT _sFM ; 54 bytes
|
||||||
.EXT: TEXT 3,{" "," "} ;+08 EXT
|
; from FAT
|
||||||
.ATTRIBUT: BYTE #10 ;+11 ATTRIBUT
|
; .NAME: TEXT 8,{". "," "} ;+ #00 +00 NAME
|
||||||
.RESERVED_L: BYTE 0 ;+12 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï ç⥨ï
|
; .EXT: TEXT 3,{" "," "} ;+ #08 +08 EXT
|
||||||
.RESERVED_H: BYTE 0 ;+13 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï § ¯¨á¨
|
; .ATTRIBUT: BYTE #10 ;+ #0B +11 ATTRIBUT
|
||||||
.RESERVED_X: BLOCK 8,0 ;+14 RESERVED
|
; .RESERVED_NT: BYTE #00 ;+ #0C +12 RESERVED
|
||||||
.TIME: WORD #0000 ;+22 TIME
|
; .RESERVED_FAT32: BYTE #00 ;+ #0D +13 RESERVED
|
||||||
.DATE: WORD #0000 ;+24 DATE
|
; .CREATE_TIME_FAT32: WORD #0000 ;+ #0E +14 RESERVED
|
||||||
.ST_CLUSTER: WORD #0000 ;+26 START CLUSTER
|
; .CREATE_DATE_FAT32: WORD #0000 ;+ #10 +16 RESERVED
|
||||||
.F_SIZE: DWORD #0000 ;+28 SIZE FILE
|
; .RESERVED_FAT32_1: WORD #0000 ;+ #12 +18 RESERVED
|
||||||
.F_POSITION: DWORD #0000 ;+32 FILE POSITION (FP)
|
; .FIRST_CLUSTER_H: WORD #0000 ;+ #14 +20 RESERVED
|
||||||
.DIR_CLUSTER: WORD #0000 ;+36 DIRECTORY CLUSTER
|
; .TIME: WORD #0000 ;+ #16 +22 TIME
|
||||||
.HANDLE: WORD #0000 ;+38 HANDLE NUMBER
|
; .DATE: WORD #0000 ;+ #18 +24 DATE
|
||||||
.DRIVE: BYTE #00 ;+40 DRIVE OR CURRENT
|
; .FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER ; [ ] fat32
|
||||||
.ACCESS_MODE: BYTE #00 ;+41 ACCESS MODE
|
; .F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE
|
||||||
.TASK_NUM: BYTE #00 ;+42 TASK
|
.FS_REC FAT_DIRECTORY_RECORD
|
||||||
.EMPTY: BYTE #00 ;+43 EMPTY
|
; from Core
|
||||||
|
.F_POSITION DWORD #00000000 ;+ #20 +32 FILE POSITION (FP)
|
||||||
|
.DIR_CLUSTER_L WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER LOW
|
||||||
|
.DIR_CLUSTER_H WORD #0000 ;+ #24 +38 DIRECTORY CLUSTER HIGH ; [x] fat32
|
||||||
|
.HANDLE WORD #0000 ;+ #28 +40 HANDLE NUMBER
|
||||||
|
.DRIVE BYTE #00 ;+ #2A +42 DRIVE OR CURRENT
|
||||||
|
.ACCESS_MODE BYTE #00 ;+ #2B +43 ACCESS MODE
|
||||||
|
.TASK_NUM BYTE #00 ;+ #2C +44 TASK
|
||||||
|
.OptimizedClusters BYTE #00 ;+ #2D +45
|
||||||
|
.KnownCluster_L WORD #0000 ;+ #2E +46 Œ« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||||
|
.KnownCluster_H WORD #0000 ;+ #30 +48 ‘â à襥 á«®¢® ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||||
|
.KnownOffset_L WORD #0000 ;+ #32 +50 Œ« ¤è¥¥ á«®¢® ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||||
|
.KnownOffset_H WORD #0000 ;+ #34 +52 ‘â à襥 á«®¢® ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||||
ENDS
|
ENDS
|
||||||
|
|
||||||
|
;ACCESS MODE: A=0 ç⥨¥/§ ¯¨áì
|
||||||
|
; A=1 ç⥨¥
|
||||||
|
; A=2 § ¯¨áì
|
||||||
|
; ;!TODO A=3 § ¯¨áì ¡¥§ «¨è¨å á®åà ¥¨© ªíè FAT
|
||||||
|
; ;!TODO A=4 § ¯¨á âì ªíè FAT
|
||||||
|
;
|
||||||
|
|
||||||
;
|
;
|
||||||
; NAM EQU 0 ; LEN4 EQU 31
|
; NAM EQU 0 ; LEN4 EQU 31
|
||||||
; EXT EQU 8 ; POS1 EQU 32
|
; EXT EQU 8 ; POS1 EQU 32
|
||||||
@ -55,13 +77,58 @@ RESERVED2 BLOCK 490,0
|
|||||||
; LEN3 EQU 30 ; FTASK EQU 42
|
; LEN3 EQU 30 ; FTASK EQU 42
|
||||||
|
|
||||||
;
|
;
|
||||||
STRUCT _sBuffers
|
STRUCT _sFS_Buffer
|
||||||
FileManipulator _sFM ; 44 bytes * FMCOUNT
|
.DRIVE: BYTE #FF
|
||||||
FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0
|
.FAT_TYPE: BYTE #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; fat32
|
||||||
BootSector _sBOOT_SEC ; 62 bytes ;!TODO ¯¥à¥¥á⨠¢ ®¡« áâì ¡ãä¥à®¢
|
.CacheBlock: WORD #0000
|
||||||
EXE_Header _sEXE_HEADER ; 512 bytes
|
.CacheUpdated: BYTE #00
|
||||||
Stack _sStack ; 256 bytes
|
;.SectorsPerBank: BYTE #00
|
||||||
Buffer BLOCK 512,0 ; FOR BUFFER & SECBUF
|
.RootDirStartCluster_L: WORD #0000
|
||||||
MemoryTable BLOCK 256,0 ; 256 bytes
|
.RootDirStartCluster_H: WORD #0000 ; fat32
|
||||||
|
.FAT1_SEC_L: WORD #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
|
||||||
|
.FAT1_SEC_H: WORD #0000 ; fat32
|
||||||
|
.FAT2_SEC_L: WORD #0000
|
||||||
|
.FAT2_SEC_H: WORD #0000 ; fat32
|
||||||
|
.Number_Of_FATs BYTE #02
|
||||||
|
.SectorsPerFAT_L WORD #0000
|
||||||
|
.SectorsPerFAT_H BYTE #00
|
||||||
|
.RootDirFirstSector_L: WORD #0000 ; MSD_CAT_SEC first sector DIR
|
||||||
|
.RootDirFirstSector_H: WORD #0000 ; MSD_CAT_SEC first sector DIR
|
||||||
|
.DirSizeInSectors: BYTE #00 ; DIR_SEC_SIZE
|
||||||
|
.FirstDataSector_L: WORD #0000 ; MSD_DAT_SEC low
|
||||||
|
.FirstDataSector_H: WORD #0000 ; MSD_DAT_SEC high
|
||||||
|
.BytesPerCluster: WORD #0000 ; CLUSTER_LEN
|
||||||
|
.END_CHAIN_CLUSTER_L: WORD #FFFF
|
||||||
|
.END_CHAIN_CLUSTER_H: WORD #0FFF
|
||||||
|
.MaxClusterLow: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||||
|
.MaxClusterHigh: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||||
|
.BytesPerSector: WORD #0000
|
||||||
|
.SectorsPerCluster: BYTE #00
|
||||||
|
.FSINFO_Sector: WORD #01
|
||||||
|
.BPB_SERIAL_NUMBER: DWORD 0
|
||||||
|
.BPB_LABEL: BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
|
||||||
|
.UPD_FSINFO: BYTE 0
|
||||||
|
.FREE_CLUSTERS_COUNT_L: WORD #FFFF
|
||||||
|
.FREE_CLUSTERS_COUNT_H: WORD #FFFF
|
||||||
|
;.FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
||||||
|
;.ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“)
|
||||||
|
;.READ_PG: BYTE #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||||
|
;.S_X_H: DWORD #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ 樫¨¤à¥
|
||||||
ENDS
|
ENDS
|
||||||
;
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
STRUCT _sBuffers
|
||||||
|
.FileManipulator _sFM ; 44 bytes + 44 bytes * (FMCOUNT-1)
|
||||||
|
.FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0 ;
|
||||||
|
.FS_Buffer _sFS_Buffer
|
||||||
|
;.BootSector BLOCK 90,0 ; _sBOOT_SECTOR_PARAMS: 62 bytes FAT16, 90 bytes FAT32
|
||||||
|
.EXE_Header _sEXE_HEADER ; 512 bytes
|
||||||
|
.Stack _sStack ; 256 bytes
|
||||||
|
.Buffer BLOCK 512,0 ; FOR BUFFER & SECTOR_BUFFER
|
||||||
|
.MemoryTable BLOCK 256,0 ; 256 bytes
|
||||||
|
.CurrentPath WORD 0
|
||||||
|
.CurrentDirectory BLOCK DIRECTORY_PATH_LENGTH,0
|
||||||
|
.WorkDirectory BLOCK DIRECTORY_PATH_LENGTH,0
|
||||||
|
ENDS
|
||||||
|
;
|
||||||
@ -1,10 +1,42 @@
|
|||||||
|
IFNDEF INCREASE_BUILD
|
||||||
|
DEFINE INCREASE_BUILD 0
|
||||||
|
ELSE
|
||||||
|
DEFINE+ INCREASE_BUILD 1
|
||||||
|
ENDIF
|
||||||
|
;------------------[ „®áâ ñ¬ ⥪ãéãî ¤ âã ¨ BUILD++ ]-----------------[]
|
||||||
|
LUA PASS1
|
||||||
|
dss_date, dss_month, dss_year = Get_date_RU(sj.get_define("__DATE__"))
|
||||||
|
|
||||||
|
if sj.get_define("INCREASE_BUILD") > "0" then
|
||||||
|
dss_build = increase_build("./DSS/build.txt")
|
||||||
|
else
|
||||||
|
dss_build = get_build("./DSS/build.txt")
|
||||||
|
end
|
||||||
|
|
||||||
|
if dss_build > 999 then
|
||||||
|
dss_build = 999
|
||||||
|
print("WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","\aWARNING! Build > 999\a")
|
||||||
|
end
|
||||||
|
ENDLUA
|
||||||
|
LUA ALLPASS
|
||||||
|
sj.insert_label("lua_DAY", dss_date)
|
||||||
|
sj.insert_label("lua_MONTH", dss_month)
|
||||||
|
sj.insert_label("lua_YEAR", dss_year)
|
||||||
|
sj.insert_label("lua_BUILD", dss_build)
|
||||||
|
ENDLUA
|
||||||
|
;---------------------------------------------------------------------[]
|
||||||
|
|
||||||
;
|
;
|
||||||
; DSS Version
|
; DSS full version
|
||||||
VERS EQU 01 ;Version Number (XX.)
|
; ®¬¥à ¢¥àᨨ (0..9)
|
||||||
MODF EQU 70 ;Modification (.xx)
|
VERS EQU 1
|
||||||
BUILD EQU 1
|
; ®¬¥à ¬®¤¨ä¨ª 樨 (0..99)
|
||||||
|
MODF EQU 71
|
||||||
|
; ®¬¥à ¡¨«¤ (0..999)
|
||||||
|
BUILD EQU lua_BUILD
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
; Release Types
|
; Release Types
|
||||||
RELEASE EQU 0
|
RELEASE EQU 0
|
||||||
RC EQU 1
|
RC EQU 1
|
||||||
@ -12,13 +44,13 @@ BETA EQU 2
|
|||||||
DP EQU 3
|
DP EQU 3
|
||||||
;
|
;
|
||||||
|
|
||||||
; Bulid Type
|
; Build Type
|
||||||
OSTYPE EQU BETA
|
OSTYPE EQU BETA
|
||||||
REVISION EQU 1
|
REVISION EQU 1
|
||||||
;
|
;
|
||||||
|
|
||||||
; Default date
|
; Current date
|
||||||
DAY EQU 30
|
DAY EQU lua_DAY
|
||||||
MONTH EQU 03
|
MONTH EQU lua_MONTH
|
||||||
YEAR EQU 2023
|
YEAR EQU lua_YEAR
|
||||||
;
|
;
|
||||||
682
DSS/VIDEO.ASM
682
DSS/VIDEO.ASM
@ -1,682 +0,0 @@
|
|||||||
|
|
||||||
;[BEGIN]
|
|
||||||
;//MODULE: VIDEO
|
|
||||||
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
|
||||||
;//UPDATE: 24-10-1999 DNS Restore module
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;Rev Date Name Description
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
;R02 07-11-2002 DNS CORRECT FN. WINCOPY & WINREST, ADD "DI+EI"
|
|
||||||
;R01 07-11-2002 DNS FIX BUG WITH SCROLLUP FN. (A=0)
|
|
||||||
;---------------------------------------------------------------
|
|
||||||
|
|
||||||
; CLEAR TEXT WINDOW
|
|
||||||
CLEAR LD C,BIOS.LP_CLS_WIN2
|
|
||||||
RST ToBIOS
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
|
|
||||||
; PRINT NULL-TERMINATED CHARS STRING
|
|
||||||
; HL - STRING POINTER
|
|
||||||
PCHARS LD A,(HL)
|
|
||||||
INC HL
|
|
||||||
OR A
|
|
||||||
RET Z
|
|
||||||
;PUSH HL
|
|
||||||
CALL PUTCHAR
|
|
||||||
;POP HL
|
|
||||||
JP PCHARS
|
|
||||||
|
|
||||||
; PRINT CHAR
|
|
||||||
; A - CHAR
|
|
||||||
PUTCHAR:
|
|
||||||
CP #0D
|
|
||||||
JP Z,CR_
|
|
||||||
CP #0A
|
|
||||||
JP Z,LF_
|
|
||||||
CP #09
|
|
||||||
JP Z,TB_
|
|
||||||
CP #08
|
|
||||||
JP Z,BK_
|
|
||||||
; CP #20
|
|
||||||
; JP NC,CHAR
|
|
||||||
CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM
|
|
||||||
RST ToBIOS
|
|
||||||
; ‘€‰Œ€<C592> âãâ ᨫìë© áªà®«« íªà ¥á«¨ ¯¥ç â « ¢ ¯®§¨æ¨¨ ¯®á«¥¤¥£® ᨬ¢®« ¯®á«¥¤¥© áâப¨
|
|
||||||
; push af
|
|
||||||
; ld a,e
|
|
||||||
; cp #4F
|
|
||||||
; jp nz,.exit
|
|
||||||
; ld a,d
|
|
||||||
; cp #1F
|
|
||||||
; jp nz,.exit
|
|
||||||
; ld e,0
|
|
||||||
; ld c,#84
|
|
||||||
; rst 8
|
|
||||||
; call LFF
|
|
||||||
; .exit:
|
|
||||||
; pop af
|
|
||||||
; ‘€‰Œ€<C592>
|
|
||||||
RET
|
|
||||||
|
|
||||||
BK_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR
|
|
||||||
RST ToBIOS
|
|
||||||
XOR A
|
|
||||||
CP E
|
|
||||||
JP Z,LOCATE
|
|
||||||
DEC E
|
|
||||||
JP LOCATE
|
|
||||||
|
|
||||||
TB_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR
|
|
||||||
RST ToBIOS
|
|
||||||
|
|
||||||
IF TABisSPACES
|
|
||||||
LD B,E
|
|
||||||
LD A,E
|
|
||||||
AND #F8
|
|
||||||
ADD A,8
|
|
||||||
SUB B
|
|
||||||
LD B,A
|
|
||||||
LD C,BIOS.LP_PRINT_SYM
|
|
||||||
LD A,#20
|
|
||||||
RST ToBIOS
|
|
||||||
RET
|
|
||||||
ELSE
|
|
||||||
LD A,E
|
|
||||||
ADD A,8
|
|
||||||
AND #78
|
|
||||||
LD E,A
|
|
||||||
JP LOCATE
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
|
|
||||||
LF_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR
|
|
||||||
RST ToBIOS
|
|
||||||
LD A,D
|
|
||||||
CP #1F
|
|
||||||
JP NC,LFF
|
|
||||||
INC D
|
|
||||||
//JP LOCATE
|
|
||||||
CALL LOCATE ; !!!!! ‘ ©¬
|
|
||||||
|
|
||||||
CR_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR
|
|
||||||
RST ToBIOS
|
|
||||||
LD E,0
|
|
||||||
JP LOCATE
|
|
||||||
|
|
||||||
|
|
||||||
LFF: PUSH HL
|
|
||||||
;PUSH DE
|
|
||||||
LD BC,1*256 + BIOS.LP_SCROLL_UD
|
|
||||||
LD DE,#0020
|
|
||||||
EI
|
|
||||||
HALT
|
|
||||||
DI
|
|
||||||
RST ToBIOS
|
|
||||||
LD DE,#1F00
|
|
||||||
;PUSH DE
|
|
||||||
CALL LOCATE
|
|
||||||
LD A,#20
|
|
||||||
LD BC,#50*256 + BIOS.LP_PRINT_SYM
|
|
||||||
RST ToBIOS
|
|
||||||
EI
|
|
||||||
;POP DE
|
|
||||||
LD DE,#1F00
|
|
||||||
CALL LOCATE
|
|
||||||
POP HL
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
|
|
||||||
; SET CURRENT CURSOR POSITION
|
|
||||||
;===============================
|
|
||||||
; D = Y
|
|
||||||
; E = X
|
|
||||||
LOCATE: LD C,BIOS.LP_SET_PLACE
|
|
||||||
RST ToBIOS
|
|
||||||
RET
|
|
||||||
|
|
||||||
; GET CURRENT CURSOR POSITION
|
|
||||||
; out:
|
|
||||||
; D - Y
|
|
||||||
; E - X
|
|
||||||
CURSOR: LD C,BIOS.LP_GET_PLACE
|
|
||||||
RST ToBIOS
|
|
||||||
RET
|
|
||||||
|
|
||||||
; READ CHAR & ATTR FROM THE SCREEN
|
|
||||||
; in:
|
|
||||||
; D - Y
|
|
||||||
; E - X
|
|
||||||
; out:
|
|
||||||
; A - CHAR
|
|
||||||
; B - ATTR
|
|
||||||
RDCHAR: XOR A
|
|
||||||
LD C,BIOS.WIN_GET_SYM
|
|
||||||
RST ToBIOS
|
|
||||||
LD A,L
|
|
||||||
LD B,H
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
; WRITE CHAR & ATTR TO THE SCREEN
|
|
||||||
; D - Y
|
|
||||||
; E - X
|
|
||||||
; A - CHAR
|
|
||||||
; B - ATTR
|
|
||||||
;!FIXIT slow ª ª ¡¥§ WIN_GET_SYM âãâ ®¡®©â¨áì?
|
|
||||||
WRCHAR: LD C,A
|
|
||||||
PUSH BC
|
|
||||||
PUSH DE
|
|
||||||
XOR A
|
|
||||||
LD C,BIOS.WIN_GET_SYM
|
|
||||||
RST ToBIOS
|
|
||||||
POP DE
|
|
||||||
POP HL
|
|
||||||
XOR A
|
|
||||||
LD C,BIOS.WIN_PUT_SYM
|
|
||||||
RST ToBIOS
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
; COPY WINDOW FROM THE SCREEN
|
|
||||||
; D - Y
|
|
||||||
; E - X
|
|
||||||
; H - HEIGHT
|
|
||||||
; L - WIDTH
|
|
||||||
; IX - ADDRESS
|
|
||||||
; B - PAGE, IF IX > 0C000H ; FIXIT ¥ ª®áïª «¨ âãâ? ¡ ª ¤®«¦ ¢ A' ¯¥à¥¤ ¢ âìáï, ¥ B
|
|
||||||
WINCOPY: AND A
|
|
||||||
LD A,R ;R02
|
|
||||||
PUSH AF ;R02
|
|
||||||
XOR A
|
|
||||||
EX AF,AF' ;R03
|
|
||||||
LD A,B ;R03 ;!TEST
|
|
||||||
EX AF,AF' ;R03
|
|
||||||
LD C,BIOS.WIN_COPY
|
|
||||||
DI ;R02
|
|
||||||
RST ToBIOS
|
|
||||||
POP AF ;R02
|
|
||||||
RET PO ;R02
|
|
||||||
EI ;R02
|
|
||||||
RET
|
|
||||||
|
|
||||||
; RESTORE WINDOW TO THE SCREEN
|
|
||||||
; D - Y
|
|
||||||
; E - X
|
|
||||||
; H - HEIGHT
|
|
||||||
; L - WIDTH
|
|
||||||
; IX - ADDRESS
|
|
||||||
; B - PAGE, IF IX > 0C000H ; FIXIT ¥ ª®áïª «¨ âãâ? ¡ ª ¤®«¦ ¢ A' ¯¥à¥¤ ¢ âìáï, ¥ B
|
|
||||||
WINREST: AND A
|
|
||||||
LD A,R ;R02
|
|
||||||
PUSH AF ;R02
|
|
||||||
XOR A
|
|
||||||
EX AF,AF' ;R03
|
|
||||||
LD A,B ;R03 ;!TEST
|
|
||||||
EX AF,AF' ;R03
|
|
||||||
DI ;R02
|
|
||||||
LD C,BIOS.WIN_RESTORE
|
|
||||||
RST ToBIOS
|
|
||||||
POP AF ;R02
|
|
||||||
RET PO ;R02
|
|
||||||
EI ;R02
|
|
||||||
RET
|
|
||||||
|
|
||||||
; SCROLL WINDOW
|
|
||||||
; D - Y
|
|
||||||
; E - X
|
|
||||||
; H - HEIGHT
|
|
||||||
; L - WIDTH
|
|
||||||
; B - SCROLL DIRECTION
|
|
||||||
; B = 1 - SCROLL UP
|
|
||||||
; B = 2 - SCROLL DOWN
|
|
||||||
; A = 0 - CLEAR LINE
|
|
||||||
SCROLL: DJNZ SCR_DW
|
|
||||||
LD B,A
|
|
||||||
LD C,H
|
|
||||||
PUSH BC
|
|
||||||
PUSH DE
|
|
||||||
PUSH HL
|
|
||||||
LD XH,D
|
|
||||||
LD XL,E
|
|
||||||
INC D
|
|
||||||
DEC H
|
|
||||||
LD C,BIOS.WIN_MOVE
|
|
||||||
XOR A
|
|
||||||
RST ToBIOS
|
|
||||||
POP HL
|
|
||||||
POP DE
|
|
||||||
POP BC
|
|
||||||
XOR A
|
|
||||||
CP B
|
|
||||||
RET NZ
|
|
||||||
LD A,D
|
|
||||||
ADD A,H
|
|
||||||
DEC A ;R01
|
|
||||||
LD D,A
|
|
||||||
.print: PUSH DE ;R01
|
|
||||||
CALL LOCATE
|
|
||||||
LD A,#20
|
|
||||||
LD B,L
|
|
||||||
LD C,BIOS.LP_PRINT_SYM
|
|
||||||
RST ToBIOS
|
|
||||||
POP DE ;R01
|
|
||||||
CALL LOCATE ;R01
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
SCR_DW: DJNZ SCR_ERR
|
|
||||||
LD B,A
|
|
||||||
LD C,L
|
|
||||||
PUSH BC ;R03 ;!TEST
|
|
||||||
PUSH DE
|
|
||||||
PUSH HL
|
|
||||||
LD XH,D
|
|
||||||
LD XL,E
|
|
||||||
INC XH
|
|
||||||
DEC H
|
|
||||||
LD C,BIOS.WIN_MOVE
|
|
||||||
XOR A
|
|
||||||
RST ToBIOS
|
|
||||||
POP HL
|
|
||||||
POP DE
|
|
||||||
POP BC ;R03 ;!TEST
|
|
||||||
XOR A
|
|
||||||
CP B
|
|
||||||
JR Z,SCROLL.print
|
|
||||||
; PUSH DE ;R01
|
|
||||||
; CALL LOCATE
|
|
||||||
; LD A,#20
|
|
||||||
; LD B,L
|
|
||||||
; LD C,BIOS.LP_PRINT_SYM
|
|
||||||
; RST ToBIOS
|
|
||||||
; POP DE ;R01
|
|
||||||
; CALL LOCATE ;R01
|
|
||||||
; AND A
|
|
||||||
RET
|
|
||||||
SCR_ERR:
|
|
||||||
LD A,DSS_Error.sys.INVALID_FUNCTION
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
; SELECT SCREEN PAGE
|
|
||||||
; B - SCREEN PAGE
|
|
||||||
SELPAGE ;PUSH BC
|
|
||||||
LD A,(VMODE)
|
|
||||||
BIT 7,A
|
|
||||||
JR NZ,SEL2
|
|
||||||
PUSH BC
|
|
||||||
LD C,A
|
|
||||||
CALL SETVMOD.TEXT_M
|
|
||||||
POP BC
|
|
||||||
SEL2 ;POP BC
|
|
||||||
LD A,B
|
|
||||||
AND #01
|
|
||||||
OUT (SCREEN_SWITCH),A
|
|
||||||
RET
|
|
||||||
|
|
||||||
; GET CURRENT VIDEO MODE
|
|
||||||
; out:
|
|
||||||
; A - MODE
|
|
||||||
; B - PAGE
|
|
||||||
GETVMOD IN A,(SCREEN_SWITCH)
|
|
||||||
LD B,A
|
|
||||||
LD A,(VMODE)
|
|
||||||
AND A
|
|
||||||
RET
|
|
||||||
|
|
||||||
; SET CURRENT VIDEO MODE
|
|
||||||
; A - MODE
|
|
||||||
; B - PAGE
|
|
||||||
SETVMOD: BIT 7,A
|
|
||||||
LD C,A
|
|
||||||
JR NZ,GRAPH
|
|
||||||
.TEXT_M: LD IX,BACKTXT
|
|
||||||
PUSH IX
|
|
||||||
EX AF,AF'
|
|
||||||
LD A,(VMODE)
|
|
||||||
LD (VVMODE),A
|
|
||||||
EX AF,AF'
|
|
||||||
INC A
|
|
||||||
DEC A
|
|
||||||
JR Z,.NOMODE
|
|
||||||
DEC A
|
|
||||||
JR Z,.NOMODE
|
|
||||||
DEC A
|
|
||||||
LD HL,TAB_40x32
|
|
||||||
JP Z,T_40_32
|
|
||||||
DEC A
|
|
||||||
LD HL,TAB_80x32
|
|
||||||
JP Z,T_80_32
|
|
||||||
.NOMODE: POP IX
|
|
||||||
LD A,DSS_Error.sys.INVALID_VIDEO_MODE
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
GRAPH: CALL SAVETXT
|
|
||||||
AND #7F
|
|
||||||
JR Z,G320_16 ; !TODO ? - ¯®ª ®âà ¡ âë¢ ¥â ª ª ®è¨¡ª
|
|
||||||
DEC A
|
|
||||||
JP Z,G320_56
|
|
||||||
DEC A
|
|
||||||
JP Z,G640_16
|
|
||||||
; DEC A
|
|
||||||
; JP Z,G640_56 ; !TODO ? - ¯®ª ®âà ¡ âë¢ ¥â ª ª ®è¨¡ª
|
|
||||||
G320_16: LD A,DSS_Error.sys.INVALID_VIDEO_MODE
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
|
|
||||||
T_80_32:
|
|
||||||
T_40_32: PUSH BC
|
|
||||||
; LD HL,TAB2
|
|
||||||
LD A,B
|
|
||||||
RLCA
|
|
||||||
RLCA
|
|
||||||
RLCA
|
|
||||||
RLCA
|
|
||||||
OR B
|
|
||||||
AND #11
|
|
||||||
XOR #10
|
|
||||||
LD E,A
|
|
||||||
GRAPH_NEXT:
|
|
||||||
CALL SETMODE
|
|
||||||
POP BC
|
|
||||||
LD A,C
|
|
||||||
LD (VMODE),A
|
|
||||||
LD A,B
|
|
||||||
AND #01
|
|
||||||
OUT (SCREEN_SWITCH),A
|
|
||||||
LD A,(VMODE)
|
|
||||||
LD C,#81
|
|
||||||
RST #30
|
|
||||||
SAFE_PORTY
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
; T_80_32 PUSH BC
|
|
||||||
; LD HL,TAB1
|
|
||||||
; LD A,B
|
|
||||||
; RLCA
|
|
||||||
; RLCA
|
|
||||||
; RLCA
|
|
||||||
; RLCA
|
|
||||||
; OR B
|
|
||||||
; AND #11
|
|
||||||
; XOR #10
|
|
||||||
; LD E,A
|
|
||||||
; CALL SETMODE
|
|
||||||
; POP BC
|
|
||||||
; LD A,C
|
|
||||||
; LD (VMODE),A
|
|
||||||
; LD A,B
|
|
||||||
; AND #01
|
|
||||||
; OUT (SCREEN_SWITCH),A
|
|
||||||
; LD A,(VMODE)
|
|
||||||
; LD C,#81
|
|
||||||
; RST #30
|
|
||||||
; SAFE_PORTY
|
|
||||||
; XOR A
|
|
||||||
; RET
|
|
||||||
|
|
||||||
G320_56 PUSH BC
|
|
||||||
LD HL,TAB_320x256_0
|
|
||||||
LD E,#11
|
|
||||||
CALL SETMODE
|
|
||||||
LD HL,TAB_320x256_1
|
|
||||||
LD E,#00
|
|
||||||
JR GRAPH_NEXT
|
|
||||||
; CALL SETMODE
|
|
||||||
; POP BC
|
|
||||||
; LD A,C
|
|
||||||
; LD (VMODE),A
|
|
||||||
; LD A,B
|
|
||||||
; AND #01
|
|
||||||
; OUT (SCREEN_SWITCH),A
|
|
||||||
; LD A,(VMODE)
|
|
||||||
; LD C,#81
|
|
||||||
; RST #30
|
|
||||||
; SAFE_PORTY
|
|
||||||
; XOR A
|
|
||||||
; RET
|
|
||||||
|
|
||||||
G640_16 PUSH BC
|
|
||||||
LD HL,TAB_640x256_0
|
|
||||||
LD E,#11
|
|
||||||
CALL SETMODE
|
|
||||||
LD HL,TAB_640x256_1
|
|
||||||
LD E,#00
|
|
||||||
JR GRAPH_NEXT
|
|
||||||
|
|
||||||
; CALL SETMODE
|
|
||||||
; POP BC
|
|
||||||
; LD A,C
|
|
||||||
; LD (VMODE),A
|
|
||||||
; LD A,B
|
|
||||||
; AND #01
|
|
||||||
; OUT (SCREEN_SWITCH),A
|
|
||||||
; LD A,(VMODE)
|
|
||||||
; LD C,#81
|
|
||||||
; RST #30
|
|
||||||
; SAFE_PORTY
|
|
||||||
; XOR A
|
|
||||||
; RET
|
|
||||||
|
|
||||||
VMODE: DB #03
|
|
||||||
|
|
||||||
;02h - TEXT 40 x 32 (16 colors)
|
|
||||||
;03h - TEXT 80 x 32 (16 colors)
|
|
||||||
;80h - GRAF 320 x 256 (16 colors)
|
|
||||||
;81h - GRAF 320 x 256 (256 colors)
|
|
||||||
;82h - GRAF 640 x 256 (16 colors)
|
|
||||||
;83h - GRAF 640 x 256 (256 colors) UNUSED
|
|
||||||
|
|
||||||
SETMODE: PUSH DE
|
|
||||||
LD DE,#FEE0 ;!HARDCODE £àï§ë© å ª. ª¨¤ ¥â ¤ ë¥ ¢ ¡ãä¥à á«ã¦¥¡®© áâà ¨æë ¡¨®á .
|
|
||||||
LD BC,ScreenDescriptorTable.Size ; <20>ˆŽ‘ ¯à¨ ¨á¯®«ì§®¢ ¨¨ IX ¯à¥¤¯®« £ ¥â, çâ® ® 㪠§ë¢ ¥â
|
|
||||||
;CALL MOVBIOS ; ¤à¥á ¨¦¥ #C000 ¨ ¢áâ ¢«ï¥â ¢ âà¥âìî ¡ ªã áâà ¨æã #FE
|
|
||||||
;LD A,R
|
|
||||||
IN A,(SLOT3)
|
|
||||||
EX AF,AF'
|
|
||||||
LD A,SYS_PAGE
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LDIR
|
|
||||||
EX AF,AF'
|
|
||||||
OUT (SLOT3),A
|
|
||||||
;JP PO,.skip_EI
|
|
||||||
;EI
|
|
||||||
.skip_EI: POP DE
|
|
||||||
LD IX,#FEE0 ;!HARDCODE £àï§ë© å ª.
|
|
||||||
;LD HL,#0000
|
|
||||||
LD C,BIOS.WIN_OPEN
|
|
||||||
RST ToBIOS
|
|
||||||
SAFE_PORTY ;????? - ¢®§¬®¦®, ç⮠⥯¥àì ¥ 㦮, ¢¥§¤¥ á ¡ ª®© 3 à ¡®â îâ, ¯à®¢¥à¨âì
|
|
||||||
XOR A
|
|
||||||
RET
|
|
||||||
|
|
||||||
; MOVBIOS: LD A,R
|
|
||||||
; IN A,(SLOT3)
|
|
||||||
; EX AF,AF'
|
|
||||||
; LD A,SYS_PAGE
|
|
||||||
; OUT (SLOT3),A
|
|
||||||
; LDIR
|
|
||||||
; EX AF,AF'
|
|
||||||
; OUT (SLOT3),A
|
|
||||||
; RET PO
|
|
||||||
; EI
|
|
||||||
; RET
|
|
||||||
|
|
||||||
;IX+0 ;HORIZONTAL
|
|
||||||
;IX+1 ;VERTICAL
|
|
||||||
;IX+2 ;X - COORD
|
|
||||||
;IX+3 ;Y - COORD
|
|
||||||
;IX+4 ;MODE
|
|
||||||
;IX+5 ;EXT MODE
|
|
||||||
;IX+6 ;VIDEO RAM X OFFSET (SIGNPLACES)
|
|
||||||
;IX+7 ;VIDEO RAM Y OFFSET (SIGNPLACES)
|
|
||||||
|
|
||||||
;
|
|
||||||
;.......................................................................
|
|
||||||
ScreenDescriptorTable EQU $
|
|
||||||
;80x32
|
|
||||||
TAB_80x32 DB #28,#20,#00,#00,#1B,#00,#00,#00 ;1
|
|
||||||
;40x32
|
|
||||||
TAB_40x32 DB #28,#20,#00,#00,#3B,#00,#00,#00 ;2
|
|
||||||
;640x256 PAGE 0
|
|
||||||
TAB_640x256_0 DB #28,#20,#00,#00,#00,#00,#00,#00 ;3
|
|
||||||
;320x256 PAGE 0
|
|
||||||
TAB_320x256_0 DB #28,#20,#00,#00,#20,#00,#00,#00 ;4
|
|
||||||
;640x256 PAGE 1
|
|
||||||
TAB_640x256_1 DB #28,#20,#00,#00,#40,#00,#28,#00 ;5
|
|
||||||
;320x256 PAGE 1
|
|
||||||
TAB_320x256_1 DB #28,#20,#00,#00,#60,#00,#28,#00 ;6
|
|
||||||
ScreenDescriptorTable.Size EQU ($ - ScreenDescriptorTable)/6
|
|
||||||
;.......................................................................
|
|
||||||
;
|
|
||||||
|
|
||||||
SAVETXT PUSH AF
|
|
||||||
;;!!!!! ¯¥à¥¥á¥ «®£¨ª áã¯¥à ¤¨ç ©è¥£® ã᪮२ï
|
|
||||||
LD A,(VMODE)
|
|
||||||
BIT 7,A
|
|
||||||
JR NZ,NOSAVET
|
|
||||||
SUB #02
|
|
||||||
JR C,NOSAVET
|
|
||||||
;;
|
|
||||||
PUSH BC
|
|
||||||
PUSH DE
|
|
||||||
PUSH HL
|
|
||||||
PUSH IX
|
|
||||||
|
|
||||||
PUSH AF
|
|
||||||
LD C,BIOS.LP_GET_PLACE
|
|
||||||
RST ToBIOS
|
|
||||||
LD (TCURS),DE
|
|
||||||
POP AF
|
|
||||||
LD IX,#C000
|
|
||||||
LD HL,#2050
|
|
||||||
OR A
|
|
||||||
JR NZ,SVTEXT1
|
|
||||||
LD L,#28
|
|
||||||
SVTEXT1 LD (SVHL1),HL
|
|
||||||
LD DE,#0000
|
|
||||||
EX AF,AF' ;R03
|
|
||||||
LD A,(BANKTBL+TXTPAGE)
|
|
||||||
LD B,A ;!TEST
|
|
||||||
EX AF,AF' ;R03
|
|
||||||
LD C,BIOS.WIN_COPY
|
|
||||||
XOR A
|
|
||||||
DI
|
|
||||||
RST ToBIOS
|
|
||||||
EI
|
|
||||||
POP IX
|
|
||||||
POP HL
|
|
||||||
POP DE
|
|
||||||
POP BC
|
|
||||||
NOSAVET: POP AF
|
|
||||||
RET
|
|
||||||
|
|
||||||
BACKTXT PUSH AF
|
|
||||||
VVMODE+1:
|
|
||||||
LD A,#00
|
|
||||||
BIT 7,A
|
|
||||||
JR Z,NOBACKT
|
|
||||||
|
|
||||||
PUSH BC
|
|
||||||
PUSH DE
|
|
||||||
PUSH HL
|
|
||||||
PUSH IX
|
|
||||||
LD IX,#C000
|
|
||||||
SVHL1+1:
|
|
||||||
LD HL,#2050
|
|
||||||
LD DE,#0000
|
|
||||||
EX AF,AF' ;R03
|
|
||||||
LD A,(BANKTBL+TXTPAGE)
|
|
||||||
LD B,A ;!TEST
|
|
||||||
EX AF,AF' ;R03
|
|
||||||
LD C,BIOS.WIN_RESTORE
|
|
||||||
XOR A
|
|
||||||
DI
|
|
||||||
RST ToBIOS
|
|
||||||
EI
|
|
||||||
TCURS+1:
|
|
||||||
LD DE,#0000
|
|
||||||
LD C,BIOS.LP_SET_PLACE
|
|
||||||
RST ToBIOS
|
|
||||||
POP IX
|
|
||||||
POP HL
|
|
||||||
POP DE
|
|
||||||
POP BC
|
|
||||||
NOBACKT: POP AF
|
|
||||||
RET
|
|
||||||
|
|
||||||
; SEND A SYMBOL TO THE PRINTER
|
|
||||||
;==============================
|
|
||||||
; A - SYMBOL
|
|
||||||
;!FIXIT § ¬¥¨âì sp2000.inc
|
|
||||||
LPT_A EQU #1B
|
|
||||||
LPT_B EQU #1C
|
|
||||||
|
|
||||||
PRINT: AND A
|
|
||||||
LD B,A
|
|
||||||
LD A,R
|
|
||||||
LD A,B
|
|
||||||
DI
|
|
||||||
PUSH AF
|
|
||||||
XOR A
|
|
||||||
OUT (LPT_A),A
|
|
||||||
LD A,#10
|
|
||||||
OUT (LPT_A),A
|
|
||||||
XOR A
|
|
||||||
OUT (LPT_A),A
|
|
||||||
IN A,(LPT_A) ; IN (1Bh): bit 5 - busy, Bit 3 - Ack
|
|
||||||
;ld c,a ; ‘€‰Œ€<C592>
|
|
||||||
BIT 5,A ; IN (19h): bit 5 - Paper Enable, Bit 3 - Select
|
|
||||||
JR NZ,LPTBUSY
|
|
||||||
;and %11011000 ; ‘€‰Œ€<C592>
|
|
||||||
;jr z,LPTBUSY ; ‘€‰Œ€<C592>
|
|
||||||
LD A,B
|
|
||||||
OUT (LPT_B),A
|
|
||||||
POP AF
|
|
||||||
RET PO
|
|
||||||
EI
|
|
||||||
RET
|
|
||||||
LPTBUSY:
|
|
||||||
POP AF
|
|
||||||
;ld a,c ; ‘€‰Œ€<C592>
|
|
||||||
SCF
|
|
||||||
RET PO
|
|
||||||
EI
|
|
||||||
RET
|
|
||||||
|
|
||||||
; B - SYMBOL
|
|
||||||
; CF = 1 - PRINTER BUSY
|
|
||||||
;!FIXIT § ¬¥¨âì sp2000.inc
|
|
||||||
LPT1_C EQU #1D
|
|
||||||
LPT2_D EQU #1E
|
|
||||||
LPT2_C EQU #1F
|
|
||||||
PRINT_INIT:
|
|
||||||
DI
|
|
||||||
LD A,#CF ; port #1F ⮫쪮 ç¥p¥§ LD BC,1F : Out (BC),reg (¢ «ìâ¥à¥ ¨¤ñâ ¯¥à¥å¢ â í⮣® ¯®àâ ¯à®æ , ¥á«¨ ® ¢ ª®¬ ¤¥  㪠§ )
|
|
||||||
LD BC,LPT2_C
|
|
||||||
OUT (C),A
|
|
||||||
LD A,#63
|
|
||||||
OUT (C),A
|
|
||||||
LD A,#C0 ; Bit 7 - Select (1), Bit 6 - Auto_Line_Feed (1)
|
|
||||||
OUT (LPT2_D),A
|
|
||||||
LD A,#0F ; Init printer port for Out
|
|
||||||
OUT (LPT1_C),A
|
|
||||||
|
|
||||||
; ‘€‰Œ€<C592> ‚›<E2809A>…‡€‹
|
|
||||||
XOR A ;LD A,0
|
|
||||||
OUT (COM_A),A
|
|
||||||
;LD A,0
|
|
||||||
OUT (COM_A),A ; ????? ¤® «¨ ¢â®à®© à § § ááë« âì ¨ ¢®®¡é¥ ¨¬¥¥â «¨ á¬ëá« com ¨¨â¨âì?
|
|
||||||
LD A,5
|
|
||||||
OUT (COM_A),A
|
|
||||||
LD A,#62 ; bit 7 - Direction for Bufer (0), Bit 1 - Bufer Enable (1)
|
|
||||||
OUT (COM_A),A
|
|
||||||
RET
|
|
||||||
; ‘€‰Œ€<C592> ‚›<E2809A>…‡€‹
|
|
||||||
|
|
||||||
;//MODULE: VIDEO
|
|
||||||
;[END]
|
|
||||||
1
DSS/build.txt
Normal file
1
DSS/build.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
57
|
||||||
168
DSS/defines.inc
168
DSS/defines.inc
@ -1,36 +1,160 @@
|
|||||||
;
|
;
|
||||||
DEFINE TEST_FEATURE 1
|
DEFINE TEST_FEATURE 0
|
||||||
;
|
;
|
||||||
|
|
||||||
;
|
;
|
||||||
DEFINE SHORT_RSTx10_TABLE 0 ; 㪮à®ç¥ ï â ¡«¨æ äãªæ¨© rst #10. 96 äãªæ¨©.
|
DEFINE MINIMUM_EXE_VERSION 1
|
||||||
;
|
;
|
||||||
|
|
||||||
;
|
;
|
||||||
DEFINE MAX_RAMDRIVES 16
|
DEFINE SHORT_RSTx10_TABLE 0 ; 㪮à®ç¥ ï â ¡«¨æ äãªæ¨© rst #10. 96 äãªæ¨©.
|
||||||
DEFINE NeedSafePort_Y 1
|
DEFINE COMPILE_UNUSED_CODE 0
|
||||||
DEFINE TABisSPACES 1
|
;
|
||||||
DEFINE CLASSIC_CURSOR 0
|
|
||||||
|
; MOUSE
|
||||||
|
DEFINE MOUSE_COM_BAUD 0 ; 1 - 2485, 2 - 4807, else - 1215 (default)
|
||||||
|
DEFINE MOUSE_INT_ENABLED 0 ; INT from SIO ch. B
|
||||||
|
DEFINE MOUSE_READ_PORT_TIMEOUT 5*512 ; Š®áâë«ìë© â ©¬- ãâ ®¦¨¤ ¨¥ ¡ ©â ®â ¬ë誨. …᫨ = 0, â® «¨è¨© ª®¤ ¥ ª®¬¯¨«¨âáï
|
||||||
|
|
||||||
|
; KEYBOARD
|
||||||
|
DEFINE KEYBOARD_INT_ENABLED 0 ; INT from SIO ch. A
|
||||||
|
DEFINE CHANGE_LANG_CTRL_SHIFT 1 ; [x] 0: Ctrl + Space, 1: Ctrl + Shift.
|
||||||
|
DEFINE BREAK_PROCESS_CODE #AC00 ; CTRL+C
|
||||||
|
DEFINE USE_E1_SCANCODE 0
|
||||||
|
; DEFINE CLASSIC_CURSOR 0
|
||||||
|
;
|
||||||
|
|
||||||
|
;LD_DSK EQU 16 ; ¬ ªá¨¬ «ì®¥ ª®«¨ç¥á⢮ «®£¨ç¥áª¨å HDD ¤¨áª®¢ ¢ á¨á⥬¥
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
DEFINE CHANGE_FREE_CLU_AFTER_DEL 1
|
||||||
|
|
||||||
|
SERVICE_SECTORS:
|
||||||
|
.FAT12 EQU #0FEF
|
||||||
|
.FAT16 EQU #FFEF
|
||||||
|
.FAT32.High EQU #0FFF
|
||||||
|
.FAT32.Low EQU #FFEF
|
||||||
|
|
||||||
|
FAT_TYPE:
|
||||||
|
.x32 EQU #32
|
||||||
|
.x16 EQU #16
|
||||||
|
.x12 EQU #12
|
||||||
|
|
||||||
|
; define _bit (1<?((FAT_CACHE.Sectors-1)
|
||||||
|
; define _shift _bit&1)) + _bit&2)) + _bit&4)) + _bit&8)) + _bit&16)) + _bit&32)) + _bit&64)) + _bit&128))
|
||||||
|
; ;
|
||||||
|
; FAT_CACHE:
|
||||||
|
; .Size EQU #2000
|
||||||
|
; .Sector_Size EQU #200
|
||||||
|
; .Sectors EQU .Size / .Sector_Size
|
||||||
|
; ; for FAT16
|
||||||
|
; .bytes_record_16 EQU 2
|
||||||
|
; .Degree_16 EQU _shift
|
||||||
|
; .Size_Mask_16 EQU high (.Size/.bytes_record_16 - 1)
|
||||||
|
; .Part_Mask_16 EQU ((1<<(.bytes_record_16*8)) / (.Size/2))-1
|
||||||
|
; ; for FAT12 ;!TODO
|
||||||
|
; .bytes_record_12 EQU 2
|
||||||
|
; .Degree_12 EQU _shift
|
||||||
|
; .Size_Mask_12 EQU high (.Size/.bytes_record_12 - 1)
|
||||||
|
; .Part_Mask_12 EQU ((1<<(.bytes_record_12*8)) / (.Size/2))-1
|
||||||
|
; DISPLAY "bytes_record_16 = ",/H,.bytes_record_16
|
||||||
|
; DISPLAY "Degree_16 = ",/H,.Degree_16
|
||||||
|
; DISPLAY "Size_Mask_16 = ",/H,.Size_Mask_16
|
||||||
|
; DISPLAY "Part_Mask_16 = ",/H,.Part_Mask_16
|
||||||
|
; DISPLAY "bytes_record_12 = ",/H,.bytes_record_12
|
||||||
|
; DISPLAY "Degree_12 = ",/H,.Degree_12
|
||||||
|
; DISPLAY "Size_Mask_12 = ",/H,.Size_Mask_12
|
||||||
|
; DISPLAY "Part_Mask_12 = ",/H,.Part_Mask_12
|
||||||
|
; undefine _bit
|
||||||
|
; undefine _shift
|
||||||
|
|
||||||
|
FAT_CACHE:
|
||||||
|
.Sector_Size EQU #200
|
||||||
|
.Degree EQU 4
|
||||||
|
; for FAT32
|
||||||
|
.Size_32 EQU #4000
|
||||||
|
.Sectors_32 EQU .Size_32 / .Sector_Size ; #20
|
||||||
|
.Degree_32 EQU 5
|
||||||
|
.Size_Mask_32 EQU #0F
|
||||||
|
.Part_Mask_32 EQU #0F
|
||||||
|
.bytes_record_32 EQU 2
|
||||||
|
; for FAT16
|
||||||
|
.Size_16 EQU #2000
|
||||||
|
.Sectors_16 EQU .Size_16 / .Sector_Size ; #10
|
||||||
|
.Degree_16 EQU .Degree
|
||||||
|
.Size_Mask_16 EQU #0F
|
||||||
|
.Part_Mask_16 EQU #0F
|
||||||
|
.bytes_record_16 EQU 2
|
||||||
|
; for FAT12 ;!TODO
|
||||||
|
.Size_12 EQU #2000
|
||||||
|
;.bytes_record_12 EQU 2
|
||||||
|
;.Degree_12 EQU _shift
|
||||||
|
;.Size_Mask_12 EQU high (.Size/.bytes_record_12 - 1)
|
||||||
|
;.Part_Mask_12 EQU ((1<<(.bytes_record_12*8)) / (.Size/2))-1
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
DEFINE NeedSafePort_Y 1
|
||||||
|
; DEFINE TABisSPACES 0
|
||||||
|
; DEFINE EnoughtOnly_LF 0
|
||||||
|
DEFINE NON_REMOVABLE_FDD 0
|
||||||
|
;
|
||||||
|
DSS_MAX_SECTOR_SIZE EQU 512
|
||||||
|
DSS_MAX_DRIVES_AMOUNT EQU 26
|
||||||
|
MAX_RAMDRIVES EQU 16
|
||||||
|
MINIMUM_BIOS_VERSION EQU 3*256 + 06 ; version 2.55
|
||||||
|
DEFINE STR_MINIMUM_BIOS_VERSION '0' + high MINIMUM_BIOS_VERSION, '.', '0'+(low MINIMUM_BIOS_VERSION)/10, '0'+(low MINIMUM_BIOS_VERSION)-((low MINIMUM_BIOS_VERSION)/10)*10
|
||||||
|
|
||||||
;
|
;
|
||||||
;-------------------[MEMORY]-------------------------;
|
;-------------------[MEMORY]-------------------------;
|
||||||
DEFINE USING_MEMPAGES 4
|
DEFINE PORTAL.RSTx18_SWITCH_ADDRESS #82
|
||||||
|
; DEFINE OLD_SET_BANK 0
|
||||||
;!FIXIT ᤥ« âì ⨯ DIRPAGE EQU 0 + BANKTBL ¨ ã¯à®áâ¨âì BANK
|
|
||||||
DIRPAGE EQU 0
|
;---------------------[ «®£.®¬¥à áâà ¨æ ¯ ¬ï⨠]---------------------
|
||||||
FATPAGE EQU 1
|
DEFINE USING_MEMPAGES 4 ; à §¬¥à ¡«®ª ¤®¯®«¨â¥«ìëå áâà ¨æ
|
||||||
TXTPAGE EQU 2
|
; ªíè ᯨ᪠ª â «®£
|
||||||
ENVPAGE EQU 2
|
DIRPAGE EQU 0
|
||||||
DRVPAGE EQU 3
|
.buffer EQU #C000
|
||||||
|
FATPAGE EQU 1
|
||||||
|
.cache EQU #C000
|
||||||
|
TXTPAGE EQU 2
|
||||||
|
ENVPAGE EQU TXTPAGE
|
||||||
|
.PATH_PNT_ARRAY EQU #FC80
|
||||||
|
.ENVTEMP EQU #FE00
|
||||||
|
DRVPAGE EQU 3
|
||||||
;
|
;
|
||||||
|
COREPAGE EQU 4 ; ® ®â¤¥«ì® ¨ ¥ á ¡«®ª®¬ ¢ëè¥.
|
||||||
|
;-----------------------------------------------------------------------
|
||||||
|
DIRECTORY_PATH_LENGTH EQU 256 ; '\' + 255, 0
|
||||||
|
ENVIRONMENT_STRING_LENGTH EQU 255
|
||||||
|
|
||||||
DIRSPEC.DEPTH EQU 256 ; '\' + 1..255
|
TXTADDR EQU #C000
|
||||||
|
ENVADDR EQU #E400
|
||||||
|
;DIR EQU #C000
|
||||||
|
;FAT_CACHE EQU #C000
|
||||||
|
|
||||||
TXTADDR EQU #C000
|
FMCOUNT EQU 10 ; Š®«¨ç¥á⢮ ä ©«®¢ëå ¬ ¨¯ã«ïâ®à®¢
|
||||||
ENVADDR EQU #E400
|
HANDBUF.SIZE EQU FAT_DIRECTORY_RECORD
|
||||||
DIR EQU #C000
|
|
||||||
FAT EQU #C000
|
|
||||||
|
|
||||||
FMCOUNT EQU 10 ; Š®«¨ç¥á⢮ ä ©«®¢ëå ¬ ¨¯ã«ïâ®à®¢
|
|
||||||
HANDBUF.SIZE EQU 32
|
|
||||||
;----------------------------------------------------;
|
;----------------------------------------------------;
|
||||||
;
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;----------------------------------------------------;
|
||||||
|
IF MOUSE_COM_BAUD = 1
|
||||||
|
MOUSE_BAUD:
|
||||||
|
.multiplier_1 EQU %0100'0000 ; ¯¥à¢ë© ¬®¦¨â¥«ì = 16.
|
||||||
|
.multiplier_2 EQU 22 ; ¢â®à®© ¬®¦¨â¥«ì = 22. 875000/Œ1*Œ2=2485
|
||||||
|
ELSEIF MOUSE_COM_BAUD = 2
|
||||||
|
MOUSE_BAUD:
|
||||||
|
.multiplier_1 EQU %0000'0000 ; ¯¥à¢ë© ¬®¦¨â¥«ì = 1.
|
||||||
|
.multiplier_2 EQU 182 ; ¢â®à®© ¬®¦¨â¥«ì = 182. 875000/Œ1*Œ2=4807
|
||||||
|
ELSE
|
||||||
|
MOUSE_BAUD:
|
||||||
|
.multiplier_1 EQU %0100'0000 ; ¯¥à¢ë© ¬®¦¨â¥«ì = 16.
|
||||||
|
.multiplier_2 EQU 45 ; ¢â®à®© ¬®¦¨â¥«ì = 45. 875000/Œ1*Œ2=1215
|
||||||
|
ENDIF
|
||||||
|
;----------------------------------------------------;
|
||||||
|
;
|
||||||
|
|
||||||
|
;
|
||||||
|
;----------------------------------------------------;
|
||||||
|
SUBLOAD_SIZE EQU 2 ; ª®«-¢® ᥪâ®à®¢ ª®â®à®¥ ¤® ¯®¤£à㧨âì ¯®á«¥ § £à㧪¨ system.dos ¢ áâà ¨æã
|
||||||
|
;----------------------------------------------------;
|
||||||
|
|||||||
76
DSS/drivers/DRV_TO_SYS_ERRORS.ASM
Normal file
76
DSS/drivers/DRV_TO_SYS_ERRORS.ASM
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
; 19/04/2025 ¢â®¯¥à¥¢®¤ ®¬¥à ®è¨¡ª¨ DRV/BIOS ¢ SYS
|
||||||
|
DRV_ERROR_TO_SYS:
|
||||||
|
RET NC
|
||||||
|
RLA
|
||||||
|
JR NC,.no_correction
|
||||||
|
;
|
||||||
|
PUSH HL
|
||||||
|
PUSH AF
|
||||||
|
;
|
||||||
|
SRL A
|
||||||
|
CP .Size
|
||||||
|
LD HL,.TABLE
|
||||||
|
ADD A,L
|
||||||
|
JR NC,.no_inc
|
||||||
|
;
|
||||||
|
INC H
|
||||||
|
.no_inc: LD L,A
|
||||||
|
LD L,(HL)
|
||||||
|
POP AF
|
||||||
|
LD A,L
|
||||||
|
POP HL
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.no_correction: RRA
|
||||||
|
RET
|
||||||
|
|
||||||
|
.TABLE: DB DSS_Error.sys.Unknown_Error ;BIOS.Error.NoErrors ; 0
|
||||||
|
DB DSS_Error.sys.INVALID_FUNCTION ;BIOS.Error.InvalidSubFunction ; 1
|
||||||
|
DB DSS_Error.sys.INVALID_DRIVE ;BIOS.Error.BadNumber ; 2
|
||||||
|
DB DSS_Error.sys.UNKNOWN_FORMAT ;BIOS.Error.UnknownDevice ; 3
|
||||||
|
DB DSS_Error.sys.NOT_READY ;BIOS.Error.NotReady ; 4
|
||||||
|
DB DSS_Error.sys.SEEK_ERROR ;BIOS.Error.Seek ; 5
|
||||||
|
DB DSS_Error.sys.SECTOR_NOT_FOUND ;BIOS.Error.SectorNotFound ; 6
|
||||||
|
DB DSS_Error.sys.CRC_ERROR ;BIOS.Error.CRC ; 7
|
||||||
|
DB DSS_Error.sys.WRITE_PROTECT ;BIOS.Error.WriteProtect ; 8
|
||||||
|
DB DSS_Error.sys.READ_ERROR ;BIOS.Error.Read ; 9
|
||||||
|
DB DSS_Error.sys.WRITE_ERROR ;BIOS.Error.Write ; 10
|
||||||
|
DB DSS_Error.sys.DRIVE_FAILURE ;BIOS.Error.Failure ; 11
|
||||||
|
DB DSS_Error.sys.BUSY_NO_MEDIA ;BIOS.Error.Busy ; 12
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#8D ; 13
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#8E ; 14
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#8F ; 15
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#90 ; 16
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#91 ; 17
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#92 ; 18
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#93 ; 19
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#94 ; 20
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#95 ; 21
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#96 ; 22
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#97 ; 23
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#98 ; 24
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#99 ; 25
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#9A ; 26
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#9B ; 27
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#9C ; 28
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#9D ; 29
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;#9E ; 30
|
||||||
|
DB DSS_Error.sys.NOT_SUPPORTED ;BIOS.Error.NotSupported ; 31
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;BIOS.Error.ATAPI.NoSence ; 32
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;BIOS.Error.ATAPI.RecoveredError; 33
|
||||||
|
DB DSS_Error.sys.NOT_READY ;BIOS.Error.ATAPI.NotReady ; 34
|
||||||
|
DB DSS_Error.sys.BUSY_NO_MEDIA ;BIOS.Error.ATAPI.MediumError ; 35
|
||||||
|
DB DSS_Error.sys.DRIVE_FAILURE ;BIOS.Error.ATAPI.HardwareError ; 36
|
||||||
|
DB DSS_Error.sys.INVALID_ACCESS ;BIOS.Error.ATAPI.IllegalRequest; 37
|
||||||
|
DB DSS_Error.sys.MEDIA_CHANGED ;BIOS.Error.ATAPI.UnitAttention ; 38
|
||||||
|
DB DSS_Error.sys.ACCESS_DENIED ;BIOS.Error.ATAPI.DataProtect ; 39
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;BIOS.Error.ATAPI; ; 40
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;BIOS.Error.ATAPI; ; 41
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;BIOS.Error.ATAPI; ; 42
|
||||||
|
DB DSS_Error.sys.NOT_READY ;BIOS.Error.ATAPI.AbortedCommand; 43
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;BIOS.Error.ATAPI; ; 44
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;BIOS.Error.ATAPI; ; 45
|
||||||
|
DB DSS_Error.sys.WRITE_ERROR ;BIOS.Error.ATAPI.Miscompare ; 46
|
||||||
|
DB DSS_Error.sys.Unknown_Error ;BIOS.Error.ATAPI; ; 47
|
||||||
|
DB DSS_Error.sys.NOT_READY ;BIOS.Error.ATAPI.TimeOut ; 48
|
||||||
|
.Size EQU .TABLE - $
|
||||||
1100
DSS/drivers/Input/MOUSE.ASM
Normal file
1100
DSS/drivers/Input/MOUSE.ASM
Normal file
File diff suppressed because it is too large
Load Diff
524
DSS/drivers/media/ATAPI/CDX.ASM
Normal file
524
DSS/drivers/media/ATAPI/CDX.ASM
Normal file
@ -0,0 +1,524 @@
|
|||||||
|
;[BEGIN]
|
||||||
|
;
|
||||||
|
; CDX.EXE [command] [-switches] [directory]
|
||||||
|
;
|
||||||
|
;commands:
|
||||||
|
; OPEN
|
||||||
|
; EJECT
|
||||||
|
; CLOSE
|
||||||
|
; COPY
|
||||||
|
; LIST
|
||||||
|
; DUMP
|
||||||
|
; COMMAND
|
||||||
|
; -h,? Help page
|
||||||
|
|
||||||
|
DEFINE _MAME 1
|
||||||
|
|
||||||
|
|
||||||
|
CR EQU 13
|
||||||
|
LF EQU 10
|
||||||
|
|
||||||
|
INCLUDE "Shared_Includes/constants/BIOS_equ.inc"
|
||||||
|
INCLUDE "Shared_Includes/constants/dss_equ.inc"
|
||||||
|
INCLUDE "Shared_Includes/constants/Sp2000.inc"
|
||||||
|
|
||||||
|
|
||||||
|
ORG #8100-22
|
||||||
|
|
||||||
|
DB "EXE" ;EXE ID
|
||||||
|
DB #00 ;EXE VERSION
|
||||||
|
DW #0016 ;CODE OFFSET LOW
|
||||||
|
DW #0000 ;CODE OFFSET HIGH
|
||||||
|
DW #0000 ;END-BEG ;PRIMARY LOADER
|
||||||
|
DW #0000 ;
|
||||||
|
DW #0000 ;RESERVED
|
||||||
|
DW #0000 ;
|
||||||
|
DW START ;LOAD ADDRESS
|
||||||
|
DW START ;START ADDRESS
|
||||||
|
DW #BFFF ;STACK ADDRESS
|
||||||
|
;DS 490
|
||||||
|
|
||||||
|
START: PUSH IX
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
|
;
|
||||||
|
; LD HL,BUF1
|
||||||
|
; LD (HL),A
|
||||||
|
; LD DE,BUF1+1
|
||||||
|
; LD BC,BUFFERS_END-1
|
||||||
|
; LDIR
|
||||||
|
;
|
||||||
|
LD HL,'\' ;
|
||||||
|
LD (DIRSPEC),HL
|
||||||
|
;
|
||||||
|
LD HL,BUF1
|
||||||
|
LD B,BUFERS_NUMBER
|
||||||
|
.initBuffersLoop:
|
||||||
|
LD (HL),A
|
||||||
|
INC H
|
||||||
|
DJNZ .initBuffersLoop
|
||||||
|
;
|
||||||
|
|
||||||
|
LD A,MSG_HELLO
|
||||||
|
CALL MESSAGE
|
||||||
|
;
|
||||||
|
CALL INIT
|
||||||
|
JR NC,.next
|
||||||
|
;
|
||||||
|
LD HL,PRM1
|
||||||
|
LD (HL),0
|
||||||
|
LD A,MSG_NO_CDROM
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,1
|
||||||
|
LD (STOPMODE),A
|
||||||
|
;
|
||||||
|
.next: LD C,Dss.Version
|
||||||
|
RST ToDSS ;GET DSS VERSION
|
||||||
|
EX DE,HL
|
||||||
|
AND A
|
||||||
|
LD DE,#0146 ;1.70
|
||||||
|
SBC HL,DE ;CHECK DSS VERSION
|
||||||
|
POP HL
|
||||||
|
;
|
||||||
|
JP C,OLD_DSS
|
||||||
|
LD IX,BUF_PTRS
|
||||||
|
CALL EX_COMMAND_LINE
|
||||||
|
|
||||||
|
CALL MALLOC
|
||||||
|
JR C,QUIT
|
||||||
|
|
||||||
|
;CALL FIND_CDROM
|
||||||
|
LD A,(STOPMODE)
|
||||||
|
OR A
|
||||||
|
CALL Z,COMMAND
|
||||||
|
|
||||||
|
CALL MDEALLOC
|
||||||
|
QUIT: CALL CRLF
|
||||||
|
.loop: LD BC,Dss.Exit
|
||||||
|
RST ToDSS
|
||||||
|
JP .loop
|
||||||
|
|
||||||
|
OLD_DSS
|
||||||
|
LD A,MSG_OLD_DSS
|
||||||
|
CALL MESSAGE
|
||||||
|
JR QUIT
|
||||||
|
|
||||||
|
HNDMEM DB #FF
|
||||||
|
|
||||||
|
MALLOC
|
||||||
|
LD BC,2*256 + Dss.GetMem
|
||||||
|
RST ToDSS
|
||||||
|
JR NC,M_ALLOK
|
||||||
|
LD A,MSG_MEMERROR
|
||||||
|
CALL MESSAGE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
M_ALLOK
|
||||||
|
LD (HNDMEM),A
|
||||||
|
LD BC,1*256 + Dss.SetWin3
|
||||||
|
RST ToDSS
|
||||||
|
LD HL,BANKTBL
|
||||||
|
LD C,BIOS.GetMemBlkPages
|
||||||
|
LD A,(HNDMEM)
|
||||||
|
JP ToBIOS
|
||||||
|
|
||||||
|
MDEALLOC
|
||||||
|
LD A,(HNDMEM)
|
||||||
|
LD C,Dss.FreeMem
|
||||||
|
JP ToDSS
|
||||||
|
|
||||||
|
; FIND_CDROM
|
||||||
|
; LD IX,DEV_CFG
|
||||||
|
; LD C,BIOS.DRV_LIST
|
||||||
|
; RST ToBIOS
|
||||||
|
; LD A,(IX+3) ;CDROM
|
||||||
|
; OR A
|
||||||
|
; JR Z,W_O_CD
|
||||||
|
; LD A,(CDDRIVE)
|
||||||
|
; INC A
|
||||||
|
; RET NZ
|
||||||
|
; LD A,SLAVE ;DEFAULT
|
||||||
|
; LD (CDDRIVE),A
|
||||||
|
; RET
|
||||||
|
; W_O_CD LD A,MSG_NO_CDROM
|
||||||
|
; CALL MESSAGE
|
||||||
|
; LD A,1
|
||||||
|
; LD (STOPMODE),A
|
||||||
|
; SCF
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;BUF_PRINT
|
||||||
|
; LD HL,BUF_PTRS
|
||||||
|
;BUF_PL LD E,(HL)
|
||||||
|
; INC HL
|
||||||
|
; LD D,(HL)
|
||||||
|
; INC HL
|
||||||
|
; LD A,D
|
||||||
|
; OR E
|
||||||
|
; RET Z
|
||||||
|
; PUSH HL
|
||||||
|
; EX DE,HL
|
||||||
|
; LD C,Dss.PCHARS
|
||||||
|
; RST ToDSS
|
||||||
|
; CALL CRLF
|
||||||
|
; POP HL
|
||||||
|
; JR BUF_PL
|
||||||
|
|
||||||
|
;OPEN_FILE
|
||||||
|
; LD HL,FILENAME
|
||||||
|
; XOR A
|
||||||
|
; LD C,Dss.OPEN
|
||||||
|
; RST ToDSS
|
||||||
|
; LD (FILEHND),A
|
||||||
|
; RET NC
|
||||||
|
; LD HL,FILENAME
|
||||||
|
; CALL PUTVAR
|
||||||
|
; LD A,MSG_CANT_OPEN
|
||||||
|
; CALL MESSAGE
|
||||||
|
; SCF
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;CLOSE_FILE
|
||||||
|
; LD A,(FILEHND)
|
||||||
|
; LD C,Dss.CLOSE
|
||||||
|
; RST ToDSS
|
||||||
|
; RET
|
||||||
|
|
||||||
|
INIT: XOR A
|
||||||
|
LD (STOPMODE),A
|
||||||
|
DEC A
|
||||||
|
LD (CDDRIVE),A
|
||||||
|
;
|
||||||
|
LD BC,+(#C0-1)*256 + BIOS.DRV_DETECT
|
||||||
|
.loop: INC B
|
||||||
|
LD A,B
|
||||||
|
CP #C4
|
||||||
|
SCF
|
||||||
|
RET Z
|
||||||
|
PUSH BC
|
||||||
|
RST ToBIOS
|
||||||
|
POP BC
|
||||||
|
JR C,.loop
|
||||||
|
LD A,B
|
||||||
|
LD (CDDRIVE),A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
; LD C,BIOS.DRV_RESET
|
||||||
|
; JP ToBIOS
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;VARIABLES
|
||||||
|
|
||||||
|
; FILENAME DS 256
|
||||||
|
; FILEHND DB #FF
|
||||||
|
|
||||||
|
STOPMODE DB #00
|
||||||
|
|
||||||
|
INCLUDE "cmdparse.asm"
|
||||||
|
INCLUDE "command.asm"
|
||||||
|
INCLUDE "cd_dos.asm"
|
||||||
|
|
||||||
|
CRLF: PUSH HL
|
||||||
|
LD HL,MSG0.crlf
|
||||||
|
LD C,Dss.PChars
|
||||||
|
; LD A,#0D
|
||||||
|
; LD C,Dss.PutChar
|
||||||
|
; RST #10
|
||||||
|
; LD A,#0A
|
||||||
|
; LD C,Dss.PutChar
|
||||||
|
RST ToDSS
|
||||||
|
POP HL
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
ERROR CP MAX_DSS_ERR
|
||||||
|
LD E,A
|
||||||
|
LD D,0
|
||||||
|
JP C,ERR_MSG
|
||||||
|
LD E,D
|
||||||
|
JP ERR_MSG
|
||||||
|
|
||||||
|
ERR_MSG PUSH DE
|
||||||
|
LD HL,ERRCDX
|
||||||
|
CALL PRINTZ
|
||||||
|
POP DE
|
||||||
|
CALL FMESAGE
|
||||||
|
CALL PRINTZ
|
||||||
|
CALL CRLF
|
||||||
|
JP CRLF
|
||||||
|
|
||||||
|
|
||||||
|
FMESAGE INC DE
|
||||||
|
LD HL,SYS_ERRORS
|
||||||
|
LD BC,SYS_ERRORS.Size
|
||||||
|
LCPIR XOR A
|
||||||
|
CPIR
|
||||||
|
RET PO
|
||||||
|
RET NZ
|
||||||
|
DEC DE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JP NZ,LCPIR
|
||||||
|
RET
|
||||||
|
|
||||||
|
MAX_DSS_ERR EQU 33
|
||||||
|
|
||||||
|
ERRCDX DB "CDX: ",0
|
||||||
|
|
||||||
|
include 'Shared_includes/constants/dss_errors.z80'
|
||||||
|
; ERR0 DB #00
|
||||||
|
; DB "Unknown error",0
|
||||||
|
; DB "Invalid function",0
|
||||||
|
; DB "Invalid drive number",0
|
||||||
|
; DB "File not found",0
|
||||||
|
; DB "Path not found",0
|
||||||
|
; DB "Invalid handle",0
|
||||||
|
; DB "Extended error 6",0
|
||||||
|
; DB "File exist",0
|
||||||
|
; DB "File read only",0
|
||||||
|
; DB "Root overflow",0
|
||||||
|
; DB "No free space",0
|
||||||
|
; DB "Directory not empty",0
|
||||||
|
; DB "Can't delete current directory",0
|
||||||
|
; DB "Invalid media",0
|
||||||
|
; DB "Unknown operation",0 ;R02
|
||||||
|
; DB "Directory exist",0
|
||||||
|
; DB "Invalid filename",0
|
||||||
|
; DB "Invalid EXE-file",0
|
||||||
|
; DB "Not supported EXE-file",0
|
||||||
|
; DB "Access denied",0
|
||||||
|
; DB "Not ready",0
|
||||||
|
; DB "Seek error",0
|
||||||
|
; DB "Sector not found",0
|
||||||
|
; DB "CRC error",0
|
||||||
|
; DB "Write protect",0
|
||||||
|
; DB "Read error",0
|
||||||
|
; DB "Write error",0
|
||||||
|
; DB "Drive failure",0
|
||||||
|
; DB "Extended error 28",0
|
||||||
|
; DB "Extended error 29",0
|
||||||
|
; DB "No free memory",0
|
||||||
|
; DB "Invalid memory block",0
|
||||||
|
; DB "Extended error 32",0
|
||||||
|
; DB "Extended error 33",0
|
||||||
|
; DB "Extended error 34",0
|
||||||
|
; DB "35",0
|
||||||
|
; DB "36",0
|
||||||
|
; DB "37",0
|
||||||
|
; DB "38",0
|
||||||
|
; DB "39",0
|
||||||
|
; DB "40",0
|
||||||
|
; DB "41",0
|
||||||
|
; DB "42",0
|
||||||
|
; DB "43",0
|
||||||
|
; DB "44",0
|
||||||
|
; DB "45",0
|
||||||
|
; DB "46",0
|
||||||
|
; DB "47",0
|
||||||
|
; DB "48",0
|
||||||
|
; DB "49",0
|
||||||
|
; DB "50"
|
||||||
|
; DB 0
|
||||||
|
; ERR1
|
||||||
|
|
||||||
|
;FIND_MESSAGE
|
||||||
|
; LD E,A
|
||||||
|
; LD D,0
|
||||||
|
; CALL MESAGE
|
||||||
|
; RET
|
||||||
|
MESSAGE LD E,A
|
||||||
|
LD D,0
|
||||||
|
CALL MESAGE
|
||||||
|
JP PRINTZ
|
||||||
|
;
|
||||||
|
|
||||||
|
MESAGE INC DE
|
||||||
|
LD HL,MSG0
|
||||||
|
LD BC,MSG1-MSG0
|
||||||
|
LCPIR2 XOR A
|
||||||
|
CPIR
|
||||||
|
RET PO
|
||||||
|
RET NZ
|
||||||
|
DEC DE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JP NZ,LCPIR2
|
||||||
|
RET
|
||||||
|
|
||||||
|
PRINTZ LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
CP "%"
|
||||||
|
JR NZ,PRINTZ2
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
SUB "1"
|
||||||
|
PUSH HL
|
||||||
|
LD L,A
|
||||||
|
LD H,0
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
LD BC,PRM1
|
||||||
|
ADD HL,BC
|
||||||
|
LD C,Dss.PChars
|
||||||
|
RST ToDSS
|
||||||
|
POP HL
|
||||||
|
JR PRINTZ
|
||||||
|
PRINTZ2 LD C,Dss.PutChar
|
||||||
|
RST ToDSS
|
||||||
|
JP PRINTZ
|
||||||
|
|
||||||
|
PRINT_ LD BC,1*256 + BIOS.LP_PRINT_SYM
|
||||||
|
JP ToBIOS
|
||||||
|
|
||||||
|
PUTVAR LD DE,PRM1
|
||||||
|
PUTPRM LD BC,15
|
||||||
|
PUTPRMA LD A,(HL)
|
||||||
|
LDI
|
||||||
|
RET PO
|
||||||
|
OR A
|
||||||
|
JR NZ,PUTPRMA
|
||||||
|
RET
|
||||||
|
|
||||||
|
CDDRIVE DB #FF
|
||||||
|
|
||||||
|
PRM1 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM2 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM3 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM4 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM5 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM6 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM7 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM8 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM9 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
|
||||||
|
|
||||||
|
MSG_HELLO EQU 0
|
||||||
|
MSG_TRAY_OPEN EQU 1
|
||||||
|
MSG_TRAY_CLOSE EQU 2
|
||||||
|
MSG_USAGE EQU 3
|
||||||
|
MSG_UNK_DEVICE_NUMBER EQU 4
|
||||||
|
MSG_UNK_COMMAND EQU 5
|
||||||
|
;MSG_DISABLED EQU 6
|
||||||
|
;MSG_ENABLED EQU 7
|
||||||
|
MSG_DONE EQU 6 ;8
|
||||||
|
MSG_NO_CDROM EQU 7 ;9
|
||||||
|
MSG_IO_ERROR EQU 8 ;10
|
||||||
|
MSG_OLD_DSS EQU 9 ;11
|
||||||
|
MSG_COPYFILE EQU 10 ;12
|
||||||
|
MSG_DIRHEAD EQU 11 ;13
|
||||||
|
MSG_DIRENTRY EQU 12 ;14
|
||||||
|
MSG_MEMERROR EQU 13 ;15
|
||||||
|
MSG_COPYTO EQU 14 ;16
|
||||||
|
MSG_CD_READ_ERR EQU 15 ;17
|
||||||
|
MSG_F_WRITE_ERR EQU 16 ;18
|
||||||
|
MSG_FAILURE EQU 17 ;19
|
||||||
|
MSG_ERR_DEST EQU 18 ;20
|
||||||
|
MSG_COPYABORTED EQU 19 ;21
|
||||||
|
|
||||||
|
MSG0 BYTE 0
|
||||||
|
;0
|
||||||
|
BYTE "CDROM eXtension utility v1.01, 2023 (c) Sprinter Team",CR,LF
|
||||||
|
DZ "Type CDX.EXE -? for help.",CR,LF,CR,LF
|
||||||
|
;1
|
||||||
|
DZ "Opening tray..."
|
||||||
|
;2
|
||||||
|
DZ "Closing tray..."
|
||||||
|
; 01234567890123456789012345678901234567890123456789012345678901234567890123456789
|
||||||
|
;3
|
||||||
|
BYTE ' Usage: CDX.EXE [-switches] [command] [param1] [param2]',CR,LF,CR,LF
|
||||||
|
BYTE 'Commands:',CR,LF
|
||||||
|
BYTE ' CDX.EXE OPEN - Open tray',CR,LF
|
||||||
|
BYTE ' CDX.EXE CLOSE - Close tray',CR,LF
|
||||||
|
BYTE ' CDX.EXE LIST [\cd_path\][pattern] - Show CDROM filelist',CR,LF
|
||||||
|
BYTE ' CDX.EXE COPY \source d:\destination\ - Copy file(s) from CDROM to another disk',CR,LF
|
||||||
|
BYTE ' CDX.EXE DUMP sector [offset] - Show sector dump from CDROM',CR,LF
|
||||||
|
BYTE CR,LF
|
||||||
|
BYTE 'Switches:',CR,LF
|
||||||
|
BYTE ' -1 CDROM installed as Primary IDE Master device',CR,LF
|
||||||
|
BYTE ' -2 CDROM installed as Primary IDE Slave device',CR,LF
|
||||||
|
BYTE ' -3 CDROM installed as Secondary IDE Master device',CR,LF
|
||||||
|
BYTE ' -4 CDROM installed as Secondary IDE Slave device',CR,LF
|
||||||
|
DZ ' -h,? Help page',CR,LF
|
||||||
|
;4
|
||||||
|
DZ " Error: Unknown device number %1",CR,LF
|
||||||
|
;5
|
||||||
|
DZ " Error: Unknown command: %1",CR,LF
|
||||||
|
;6
|
||||||
|
;DZ "Disabled"
|
||||||
|
;7
|
||||||
|
;DZ "Enabled"
|
||||||
|
;6
|
||||||
|
DZ "Done!",CR,LF
|
||||||
|
;7
|
||||||
|
DZ " Error: Can't find CDROM device %1",CR,LF
|
||||||
|
;8
|
||||||
|
DZ " Error: I/O Error",CR,LF
|
||||||
|
;9
|
||||||
|
DZ " Error: Need DSS version 1.70 or higher",CR,LF
|
||||||
|
;10
|
||||||
|
DZ "Copying "
|
||||||
|
;11
|
||||||
|
DZ "Directory of CDROM:"
|
||||||
|
;12 FILENAME EXT SIZE DATE TIME
|
||||||
|
DZ "%1 %2 %3 %4 %5",CR,LF
|
||||||
|
;13
|
||||||
|
DZ " Error: Memory allocation error",CR,LF
|
||||||
|
;14
|
||||||
|
DZ " to "
|
||||||
|
;15
|
||||||
|
DZ " Error: Reading failure",CR,LF
|
||||||
|
;16
|
||||||
|
DZ " Error: Writing failure",CR,LF
|
||||||
|
;17
|
||||||
|
DZ "Failure!",CR,LF
|
||||||
|
;18
|
||||||
|
DZ " Error: Can't open destination file",CR,LF
|
||||||
|
;19
|
||||||
|
DZ "Copying aborted",CR,LF
|
||||||
|
;20
|
||||||
|
.crlf: DZ CR,LF
|
||||||
|
;21
|
||||||
|
BYTE 0
|
||||||
|
MSG1
|
||||||
|
|
||||||
|
BUF_PTRS
|
||||||
|
DW BUF1,BUF2,BUF3,BUF4,0
|
||||||
|
|
||||||
|
;-------------------------------/BUFFERS\-------------------------------;
|
||||||
|
FF_STRUCT:
|
||||||
|
DB "12345678"
|
||||||
|
DB "123"
|
||||||
|
DB #00
|
||||||
|
DW 0,0,0,0
|
||||||
|
CDFPOSH DW 0 ;CLUSTER HIGH
|
||||||
|
CDFTIME DW 0 ;TIME
|
||||||
|
CDFDATE DW 0 ;DATE
|
||||||
|
CDFPOSL DW 0 ;CLUSTER
|
||||||
|
CDFSIZE DW 0,0 ;SIZE
|
||||||
|
CDFATTR DB #00 ;ATTR
|
||||||
|
CDFNAME DB "12345678123",0
|
||||||
|
;
|
||||||
|
BUFFERS_START EQU $
|
||||||
|
;DS 256-($-FF_STRUCT)
|
||||||
|
|
||||||
|
DIRSPEC: EQU FF_STRUCT+256
|
||||||
|
;DB '\',0
|
||||||
|
;DS 254
|
||||||
|
BUF1 EQU DIRSPEC+256
|
||||||
|
BUF2 EQU DIRSPEC+256+256
|
||||||
|
BUF3 EQU DIRSPEC+256+256+256
|
||||||
|
BUF4 EQU DIRSPEC+256+256+256+256
|
||||||
|
ARGCBUF EQU DIRSPEC+256+256+256+256+256
|
||||||
|
DUMPBUF EQU DIRSPEC+256+256+256+256+256+256
|
||||||
|
BUFFERS_END EQU DUMPBUF+2048-BUFFERS_START
|
||||||
|
;
|
||||||
|
BUFERS_NUMBER EQU 6
|
||||||
|
;
|
||||||
|
ASSERT (DUMPBUF+2048 < #C000), "NO FREE SPACE FOR BUFFERS"
|
||||||
|
;-----------------------------------------------------------------------;
|
||||||
|
DEV_CFG
|
||||||
|
;[END]
|
||||||
7
DSS/drivers/media/ATAPI/CDX.TXT
Normal file
7
DSS/drivers/media/ATAPI/CDX.TXT
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
CDROM eXtension utility version 1.01
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
It's utility came for solving the problem with support CDROM in DSS ver 1.x.
|
||||||
|
It's allow browse and copy files that stored on your CD. Also utility has commands
|
||||||
|
for tray control.
|
||||||
89
DSS/drivers/media/ATAPI/CMDPARSE.ASM
Normal file
89
DSS/drivers/media/ATAPI/CMDPARSE.ASM
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
|
||||||
|
; HL - exe-prefix
|
||||||
|
; IX - pointers at work buffers
|
||||||
|
EX_COMMAND_LINE
|
||||||
|
INC HL
|
||||||
|
NEXTPR LD DE,ARGCBUF
|
||||||
|
LD BC,Dss.EX_Path.GSWITCH
|
||||||
|
RST ToDSS
|
||||||
|
PUSH AF
|
||||||
|
PUSH HL
|
||||||
|
LD A,(ARGCBUF)
|
||||||
|
OR A
|
||||||
|
JR Z,EOCL ;end of command line
|
||||||
|
CP "-"
|
||||||
|
JR Z,ITCKEY
|
||||||
|
CP "/"
|
||||||
|
JR Z,ITCKEY
|
||||||
|
LD HL,ARGCBUF
|
||||||
|
LD E,(IX+0)
|
||||||
|
LD D,(IX+1)
|
||||||
|
INC IX
|
||||||
|
INC IX
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR Z,CL_FAILURE
|
||||||
|
; LD A,1
|
||||||
|
; LD (NAME_FLG),A
|
||||||
|
MOVNAME LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
JR NZ,MOVNAME
|
||||||
|
EOCL POP HL
|
||||||
|
POP AF
|
||||||
|
JR NC,NEXTPR
|
||||||
|
RET
|
||||||
|
|
||||||
|
CL_FAILURE
|
||||||
|
POP HL
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
|
||||||
|
ITCKEY: LD A,(ARGCBUF+1)
|
||||||
|
CP "5"
|
||||||
|
JR NC,.HELP
|
||||||
|
CP "1"
|
||||||
|
JR NC,.number
|
||||||
|
; ERROR
|
||||||
|
LD HL,ARGCBUF+1
|
||||||
|
CALL PUTVAR
|
||||||
|
LD A,MSG_UNK_DEVICE_NUMBER
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,1
|
||||||
|
LD (STOPMODE),A
|
||||||
|
JR EOCL
|
||||||
|
;
|
||||||
|
.number:;
|
||||||
|
SUB A,'1'
|
||||||
|
OR #C0
|
||||||
|
LD (CDDRIVE),A
|
||||||
|
LD C,BIOS.DRV_RESET
|
||||||
|
RST ToBIOS
|
||||||
|
JR NC,EOCL
|
||||||
|
;
|
||||||
|
LD HL,ARGCBUF+1
|
||||||
|
CALL PUTVAR
|
||||||
|
LD A,MSG_NO_CDROM
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,1
|
||||||
|
LD (STOPMODE),A
|
||||||
|
SCF
|
||||||
|
JR CL_FAILURE
|
||||||
|
;
|
||||||
|
.HELP: LD A,MSG_USAGE
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,1
|
||||||
|
LD (STOPMODE),A
|
||||||
|
JR EOCL
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; MAS_CD:
|
||||||
|
; ;LD A,MASTER
|
||||||
|
; ;LD (CDDRIVE),A
|
||||||
|
; JR EOCL
|
||||||
|
|
||||||
|
; SLA_CD:
|
||||||
|
; ;LD A,SLAVE
|
||||||
|
; ;LD (CDDRIVE),A
|
||||||
|
; JR EOCL
|
||||||
942
DSS/drivers/media/ATAPI/COMMAND.ASM
Normal file
942
DSS/drivers/media/ATAPI/COMMAND.ASM
Normal file
@ -0,0 +1,942 @@
|
|||||||
|
|
||||||
|
COMMAND LD HL,BUF1
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
DEC HL
|
||||||
|
SKIPSP INC HL
|
||||||
|
LD A,(HL)
|
||||||
|
CP 9
|
||||||
|
JR Z,SKIPSP
|
||||||
|
CP " "
|
||||||
|
JR Z,SKIPSP
|
||||||
|
COMP01 LD D,H
|
||||||
|
LD E,L
|
||||||
|
XOR A
|
||||||
|
LD BC,255
|
||||||
|
CPIR
|
||||||
|
LD A,254
|
||||||
|
SUB C
|
||||||
|
LD C,A
|
||||||
|
LD HL,CMDLIST
|
||||||
|
COMP004 PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
COMP000 LD A,(DE)
|
||||||
|
CP #61
|
||||||
|
JP C,COMP001
|
||||||
|
CP #7B
|
||||||
|
JP NC,COMP001
|
||||||
|
SUB #20
|
||||||
|
COMP001 CP (HL)
|
||||||
|
JP NZ,COMP002
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DEC C
|
||||||
|
JP NZ,COMP000
|
||||||
|
XOR A
|
||||||
|
CP (HL)
|
||||||
|
JP NZ,COMP002
|
||||||
|
POP BC
|
||||||
|
POP BC
|
||||||
|
LD A,(DE)
|
||||||
|
CP " "
|
||||||
|
JR NZ,NOSPC
|
||||||
|
INC DE
|
||||||
|
NOSPC INC HL
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
LD H,(HL)
|
||||||
|
LD L,A
|
||||||
|
JP (HL)
|
||||||
|
|
||||||
|
COMP002 XOR A
|
||||||
|
LD C,#FF
|
||||||
|
CPI
|
||||||
|
JP NZ,$-2
|
||||||
|
INC HL
|
||||||
|
INC HL
|
||||||
|
POP DE
|
||||||
|
POP BC
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JP NZ,COMP004
|
||||||
|
LD HL,BUF1
|
||||||
|
CALL PUTVAR
|
||||||
|
LD A,MSG_UNK_COMMAND
|
||||||
|
CALL MESSAGE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
CMDLIST DB "CLOSE",0
|
||||||
|
DW CCLOSE
|
||||||
|
DB "COPY",0
|
||||||
|
DW CCOPY
|
||||||
|
DB "DUMP",0
|
||||||
|
DW CDUMP
|
||||||
|
DB "EJECT",0
|
||||||
|
DW COPEN
|
||||||
|
DB "HELP",0
|
||||||
|
DW CHELP
|
||||||
|
DB "LIST",0
|
||||||
|
DW CDIR
|
||||||
|
DB "OPEN",0
|
||||||
|
DW COPEN
|
||||||
|
DB "SECTORDUMP",0
|
||||||
|
DW CDUMP
|
||||||
|
DB 0
|
||||||
|
|
||||||
|
CHELP: LD A,MSG_USAGE
|
||||||
|
JP MESSAGE
|
||||||
|
|
||||||
|
CCLOSE: LD A,MSG_TRAY_CLOSE
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,(CDDRIVE)
|
||||||
|
LD BC,BIOS.DRV_EXTENDED.CD_Close
|
||||||
|
RST ToBIOS
|
||||||
|
LD A,MSG_DONE
|
||||||
|
JP MESSAGE
|
||||||
|
|
||||||
|
COPEN: LD A,MSG_TRAY_OPEN
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,(CDDRIVE)
|
||||||
|
LD BC,BIOS.DRV_EXTENDED.CD_Eject
|
||||||
|
RST ToBIOS
|
||||||
|
LD A,MSG_DONE
|
||||||
|
JP MESSAGE
|
||||||
|
|
||||||
|
|
||||||
|
CCOPY: CALL CHANGEDISK
|
||||||
|
JR NC,.CH2OK
|
||||||
|
JP ERROR
|
||||||
|
.CH2OK: CALL EX_COPY_PARAM
|
||||||
|
LD HL,BUF2
|
||||||
|
LD DE,FF_STRUCT
|
||||||
|
LD A,FAT_ATTR.NoDIRnoVolID
|
||||||
|
LD B,1
|
||||||
|
CALL F_FIRST
|
||||||
|
JP C,ERROR
|
||||||
|
.COPIER:
|
||||||
|
CALL MAKECOPY
|
||||||
|
RET C
|
||||||
|
LD A,(COPYMODE)
|
||||||
|
BIT DSTFILE,A
|
||||||
|
RET NZ
|
||||||
|
;
|
||||||
|
LD C,Dss.ScanKey
|
||||||
|
RST ToDSS
|
||||||
|
JR Z,.NONSTOP
|
||||||
|
LD HL,#011B ;ESC
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
JR NZ,.NONSTOP
|
||||||
|
LD A,MSG_COPYABORTED
|
||||||
|
CALL MESSAGE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
.NONSTOP:
|
||||||
|
LD DE,FF_STRUCT
|
||||||
|
CALL F_NEXT
|
||||||
|
JR NC,.COPIER
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
; IFNOTFOUND
|
||||||
|
; CALL ERROR
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;IFOK
|
||||||
|
MAKECOPY:
|
||||||
|
LD A,(COPYMODE)
|
||||||
|
BIT SRCPATT,A
|
||||||
|
JR NZ,.WITH_SRC_PATT
|
||||||
|
BIT DSTFILE,A
|
||||||
|
JR NZ,.WITH_DST_FILE
|
||||||
|
.WITH_SRC_PATT:
|
||||||
|
LD HL,CDFNAME
|
||||||
|
.YCR1: LD A,(HL)
|
||||||
|
CP "A"
|
||||||
|
JR C,.NCR1
|
||||||
|
CP "Z"+1
|
||||||
|
JR NC,.NCR1
|
||||||
|
ADD A,#20
|
||||||
|
LD (HL),A
|
||||||
|
.NCR1: OR A
|
||||||
|
INC HL
|
||||||
|
JR NZ,.YCR1
|
||||||
|
;
|
||||||
|
LD HL,CDFNAME
|
||||||
|
LD DE,(SRC_PUT_ADR)
|
||||||
|
.CZSL2: LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
JR NZ,.CZSL2
|
||||||
|
;
|
||||||
|
LD A,(COPYMODE)
|
||||||
|
BIT DSTFILE,A
|
||||||
|
JR NZ,.WITH_DST_FILE
|
||||||
|
;
|
||||||
|
LD HL,CDFNAME
|
||||||
|
LD DE,(DST_PUT_ADR)
|
||||||
|
.CZSL1: LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
JR NZ,.CZSL1
|
||||||
|
;
|
||||||
|
.WITH_DST_FILE:
|
||||||
|
LD HL,BUF3
|
||||||
|
LD A,(CDFATTR)
|
||||||
|
LD C,Dss.Create
|
||||||
|
RST ToDSS
|
||||||
|
JR NC,.OFOK
|
||||||
|
LD A,MSG_ERR_DEST
|
||||||
|
CALL MESSAGE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.OFOK: LD (FHND),A
|
||||||
|
LD A,MSG_COPYFILE
|
||||||
|
CALL MESSAGE
|
||||||
|
LD HL,BUF2
|
||||||
|
LD C,Dss.PChars
|
||||||
|
RST ToDSS
|
||||||
|
LD A,MSG_COPYTO
|
||||||
|
CALL MESSAGE
|
||||||
|
LD HL,BUF3
|
||||||
|
LD C,Dss.PChars
|
||||||
|
RST ToDSS
|
||||||
|
LD A," "
|
||||||
|
LD C,Dss.PutChar
|
||||||
|
RST ToDSS
|
||||||
|
LD IX,FF_STRUCT
|
||||||
|
|
||||||
|
LD E,(IX+LEN1)
|
||||||
|
LD D,(IX+LEN2)
|
||||||
|
LD (CL_SIZE),DE
|
||||||
|
LD E,(IX+LEN3)
|
||||||
|
LD D,(IX+LEN4)
|
||||||
|
LD (CH_SIZE),DE
|
||||||
|
|
||||||
|
LD E,(IX+CLU1)
|
||||||
|
LD D,(IX+CLU2)
|
||||||
|
LD (CL_OFFSET),DE
|
||||||
|
LD E,(IX+CLU3)
|
||||||
|
LD D,(IX+CLU4)
|
||||||
|
LD (CH_OFFSET),DE
|
||||||
|
.CDCOPY_LOOP:
|
||||||
|
CALL RCDFSB ;!!!!!
|
||||||
|
JR C,.COPY_FAULT
|
||||||
|
CALL WDATAB
|
||||||
|
JR C,.COPY_FAULT
|
||||||
|
JR NZ,.CDCOPY_LOOP
|
||||||
|
;
|
||||||
|
LD DE,(CDFTIME)
|
||||||
|
LD BC,(CDFDATE)
|
||||||
|
CALL RMKTIME
|
||||||
|
LD A,(FHND)
|
||||||
|
LD C,Dss.Put_D_T ;COPY DATE AND TIME
|
||||||
|
RST ToDSS
|
||||||
|
;
|
||||||
|
LD A,(FHND)
|
||||||
|
LD C,Dss.Close
|
||||||
|
RST ToDSS
|
||||||
|
LD A,MSG_DONE
|
||||||
|
CALL MESSAGE
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
.COPY_FAULT:
|
||||||
|
LD A,(FHND)
|
||||||
|
LD C,Dss.Close
|
||||||
|
RST ToDSS
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
EX_COPY_PARAM
|
||||||
|
LD HL,BUF2 ;SOURCE
|
||||||
|
LD BC,255
|
||||||
|
XOR A
|
||||||
|
CPIR
|
||||||
|
DEC HL
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,256
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
EX DE,HL
|
||||||
|
LD A,'\' ;
|
||||||
|
CPDR
|
||||||
|
INC HL
|
||||||
|
INC HL
|
||||||
|
LD (SRC_PUT_ADR),HL
|
||||||
|
;
|
||||||
|
LD HL,BUF2
|
||||||
|
LD BC,Dss.EX_Path.GET_ALL
|
||||||
|
RST ToDSS
|
||||||
|
AND #80
|
||||||
|
LD A,(COPYMODE)
|
||||||
|
SET SRCPATT,A
|
||||||
|
JR NZ,.NOPATSR
|
||||||
|
RES SRCPATT,A
|
||||||
|
.NOPATSR:
|
||||||
|
LD (COPYMODE),A
|
||||||
|
LD HL,BUF3 ;DESTINATION
|
||||||
|
LD BC,Dss.EX_Path.GET_ALL
|
||||||
|
RST ToDSS
|
||||||
|
AND #81 ;PATTERN & FILENAME
|
||||||
|
CP #01 ;IF FILENAME=1 AND PATTERN=0
|
||||||
|
LD A,(COPYMODE)
|
||||||
|
SET DSTFILE,A
|
||||||
|
JR Z,.SINGC1
|
||||||
|
RES DSTFILE,A
|
||||||
|
.SINGC1:
|
||||||
|
LD (COPYMODE),A
|
||||||
|
RET Z
|
||||||
|
LD HL,BUF3
|
||||||
|
LD BC,255
|
||||||
|
XOR A
|
||||||
|
CPIR ;MOVE TO END OF STRING
|
||||||
|
DEC HL ;MOVE TO ZERO-CHAR
|
||||||
|
DEC HL ;MOVE TO LAST CHAR
|
||||||
|
LD A,(HL) ;GET LAST CHAR
|
||||||
|
INC HL ;MOVE TO ZERO-CHAR
|
||||||
|
CP '\' ;IS IT BACKSLASH?
|
||||||
|
LD (DST_PUT_ADR),HL ;SAVE END ADDRESS
|
||||||
|
RET Z
|
||||||
|
LD A,'\' ;
|
||||||
|
LD (HL),A ;PUT BACKSLASH TO THE END OF STRING
|
||||||
|
INC HL ;MOVE TO THE NEW END OF STRING
|
||||||
|
LD (DST_PUT_ADR),HL ;SAVE END ADDRESS
|
||||||
|
LD (HL),0 ;PUT ZERO CHAR
|
||||||
|
RET
|
||||||
|
|
||||||
|
DSTFILE EQU 0 ;SPECIFIED DESTINATION FILENAME
|
||||||
|
SRCPATT EQU 3 ;SPECIFIED SOURCE PATTERN A??.*
|
||||||
|
|
||||||
|
COPYMODE DB 0
|
||||||
|
|
||||||
|
SRC_PUT_ADR DW BUF2
|
||||||
|
DST_PUT_ADR DW BUF3
|
||||||
|
|
||||||
|
CL_OFFSET DW 0
|
||||||
|
CH_OFFSET DW 0
|
||||||
|
CL_SIZE DW 0
|
||||||
|
CH_SIZE DW 0
|
||||||
|
BYTECOUNTER DW 0
|
||||||
|
|
||||||
|
WDATAB: LD DE,(BYTECOUNTER)
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
RET Z
|
||||||
|
LD HL,#C000
|
||||||
|
LD A,(FHND)
|
||||||
|
LD C,Dss.Write
|
||||||
|
RST ToDSS
|
||||||
|
JR C,.WRDERR
|
||||||
|
XOR A
|
||||||
|
INC A
|
||||||
|
RET
|
||||||
|
.WRDERR:
|
||||||
|
LD A,MSG_FAILURE
|
||||||
|
CALL MESSAGE
|
||||||
|
CALL CRLF
|
||||||
|
LD A,MSG_F_WRITE_ERR
|
||||||
|
CALL MESSAGE
|
||||||
|
XOR A
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
RCDFSB: LD HL,(CL_SIZE)
|
||||||
|
LD DE,(CH_SIZE)
|
||||||
|
LD A,H
|
||||||
|
OR L
|
||||||
|
OR D
|
||||||
|
OR E
|
||||||
|
LD BC,0
|
||||||
|
LD (BYTECOUNTER),BC
|
||||||
|
RET Z ;SIZE = 0
|
||||||
|
AND A
|
||||||
|
LD BC,#4000 ;BLOCKSIZE
|
||||||
|
SBC HL,BC
|
||||||
|
LD B,C
|
||||||
|
EX DE,HL
|
||||||
|
SBC HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,#4000
|
||||||
|
JR NC,.RC_NOCAR
|
||||||
|
;CORRECT RESULT
|
||||||
|
ADD HL,BC
|
||||||
|
LD B,C
|
||||||
|
EX DE,HL
|
||||||
|
ADC HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
LD HL,0
|
||||||
|
LD DE,0
|
||||||
|
.RC_NOCAR:
|
||||||
|
LD (CL_SIZE),HL
|
||||||
|
LD (CH_SIZE),DE
|
||||||
|
LD (BYTECOUNTER),BC
|
||||||
|
;
|
||||||
|
LD A,B
|
||||||
|
SRL B
|
||||||
|
SRL B
|
||||||
|
SRL B
|
||||||
|
AND #07
|
||||||
|
OR C
|
||||||
|
JR Z,.RC_EVEN_NUM
|
||||||
|
INC B
|
||||||
|
.RC_EVEN_NUM:
|
||||||
|
LD A,B
|
||||||
|
LD C,B
|
||||||
|
LD B,0
|
||||||
|
;
|
||||||
|
LD IX,(CL_OFFSET)
|
||||||
|
LD HL,(CH_OFFSET)
|
||||||
|
PUSH IX
|
||||||
|
PUSH HL
|
||||||
|
ADD IX,BC
|
||||||
|
LD C,B
|
||||||
|
ADC HL,BC
|
||||||
|
LD (CL_OFFSET),IX
|
||||||
|
LD (CH_OFFSET),HL
|
||||||
|
POP HL
|
||||||
|
POP IX
|
||||||
|
LD B,A
|
||||||
|
LD A,(CDDRIVE)
|
||||||
|
LD DE,#C000
|
||||||
|
LD C,BIOS.DRV_READ
|
||||||
|
RST ToBIOS
|
||||||
|
LD BC,(BYTECOUNTER)
|
||||||
|
RET NC
|
||||||
|
LD A,MSG_FAILURE
|
||||||
|
CALL MESSAGE
|
||||||
|
CALL CRLF
|
||||||
|
LD A,MSG_CD_READ_ERR
|
||||||
|
CALL MESSAGE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
FHND DB #FF
|
||||||
|
|
||||||
|
;----------------------
|
||||||
|
CDIR: CALL CHANGEDISK
|
||||||
|
JP C,ERROR
|
||||||
|
LD HL,BUF2
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JR NZ,.NODEFD
|
||||||
|
LD HL,DEFDIR
|
||||||
|
JR .PATPRESNT
|
||||||
|
.NODEFD:
|
||||||
|
LD BC,Dss.EX_Path.GET_ALL
|
||||||
|
RST ToDSS
|
||||||
|
BIT 7,A ;PATTERN
|
||||||
|
LD HL,BUF2
|
||||||
|
JR NZ,.PATPRESNT
|
||||||
|
;
|
||||||
|
LD BC,255
|
||||||
|
XOR A
|
||||||
|
CPIR ;MOVE TO END OF STRING
|
||||||
|
DEC HL ;MOVE TO ZERO-CHAR
|
||||||
|
DEC HL ;MOVE TO LAST CHAR
|
||||||
|
LD A,(HL) ;GET LAST CHAR
|
||||||
|
INC HL ;MOVE TO ZERO-CHAR
|
||||||
|
CP '\' ;IS IT BACKSLASH?
|
||||||
|
JR Z,.WITHSL9
|
||||||
|
LD A,'\' ;
|
||||||
|
LD (HL),A ;PUT BACKSLASH TO THE END OF STRING
|
||||||
|
INC HL ;MOVE TO THE NEW END OF STRING
|
||||||
|
.WITHSL9:
|
||||||
|
LD A,"*"
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
LD (HL),"."
|
||||||
|
INC HL
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
LD (HL),0
|
||||||
|
LD HL,BUF2
|
||||||
|
.PATPRESNT
|
||||||
|
LD DE,FF_STRUCT
|
||||||
|
LD A,FAT_ATTR.NoVolID
|
||||||
|
LD B,0
|
||||||
|
CALL F_FIRST
|
||||||
|
JP C,ERROR
|
||||||
|
.CDIR_HEAD:
|
||||||
|
LD A,MSG_DIRHEAD
|
||||||
|
CALL MESSAGE
|
||||||
|
LD HL,DIRSPEC
|
||||||
|
LD C,Dss.PChars
|
||||||
|
RST ToDSS
|
||||||
|
CALL CRLF
|
||||||
|
CALL CRLF
|
||||||
|
.CDIR_LOOP:
|
||||||
|
LD HL,CDFNAME
|
||||||
|
CALL PNAME
|
||||||
|
LD DE,FF_STRUCT
|
||||||
|
CALL F_NEXT
|
||||||
|
JR NC,.CDIR_LOOP
|
||||||
|
RET
|
||||||
|
|
||||||
|
; FF_STRUCT
|
||||||
|
; DB "12345678"
|
||||||
|
; DB "123"
|
||||||
|
; DB #00
|
||||||
|
; DW 0,0,0,0
|
||||||
|
; CDFPOSH DW 0 ;CLUSTER HIGH
|
||||||
|
; CDFTIME DW 0 ;TIME
|
||||||
|
; CDFDATE DW 0 ;DATE
|
||||||
|
; CDFPOSL DW 0 ;CLUSTER
|
||||||
|
; CDFSIZE DW 0,0 ;SIZE
|
||||||
|
; CDFATTR DB #00 ;ATTR
|
||||||
|
; CDFNAME DB "12345678123",0
|
||||||
|
; ; DS 44
|
||||||
|
; DS 256-($-FF_STRUCT)
|
||||||
|
|
||||||
|
PNAME LD BC,8
|
||||||
|
LD DE,PRM1
|
||||||
|
LDIR
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
LD DE,PRM2
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LD (DE),A
|
||||||
|
LD IX,FF_STRUCT
|
||||||
|
CALL PRNSIZE
|
||||||
|
CALL PRNDATE
|
||||||
|
CALL PRNTIME
|
||||||
|
LD A,MSG_DIRENTRY
|
||||||
|
JP MESSAGE
|
||||||
|
|
||||||
|
PRNDATE LD B,(IX+25)
|
||||||
|
LD C,(IX+24)
|
||||||
|
LD HL,SIZEBFF
|
||||||
|
CALL DATE
|
||||||
|
LD (HL),0
|
||||||
|
LD HL,SIZEBFF
|
||||||
|
LD DE,PRM4
|
||||||
|
LD A,(HL)
|
||||||
|
CP "0"
|
||||||
|
JP NZ,PUTPRM
|
||||||
|
LD (HL),#20
|
||||||
|
JP PUTPRM
|
||||||
|
|
||||||
|
PRNTIME LD B,(IX+22)
|
||||||
|
LD C,(IX+23)
|
||||||
|
LD HL,SIZEBFF
|
||||||
|
CALL TIME
|
||||||
|
LD (HL),0
|
||||||
|
LD HL,SIZEBFF
|
||||||
|
LD DE,PRM5
|
||||||
|
LD A,(HL)
|
||||||
|
CP "0"
|
||||||
|
JP NZ,PUTPRM
|
||||||
|
LD (HL),#20
|
||||||
|
JP PUTPRM
|
||||||
|
|
||||||
|
TIME: SRL C
|
||||||
|
RR B
|
||||||
|
SRL C
|
||||||
|
RR B
|
||||||
|
SRL C
|
||||||
|
RR B
|
||||||
|
SRL B
|
||||||
|
SRL B
|
||||||
|
LD A,C
|
||||||
|
CALL NUMB
|
||||||
|
LD (HL),":"
|
||||||
|
INC HL
|
||||||
|
LD A,B
|
||||||
|
JP NUMB
|
||||||
|
|
||||||
|
DATE: LD A,C
|
||||||
|
AND #1F
|
||||||
|
PUSH BC
|
||||||
|
CALL NUMB
|
||||||
|
LD (HL),"."
|
||||||
|
INC HL
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
SRL B
|
||||||
|
RLA
|
||||||
|
RLA
|
||||||
|
RLA
|
||||||
|
RLA
|
||||||
|
AND #0F
|
||||||
|
CALL NUMB
|
||||||
|
LD (HL),"."
|
||||||
|
INC HL
|
||||||
|
LD A,B
|
||||||
|
ADD A,#50
|
||||||
|
CP 100
|
||||||
|
JP C,NUMB
|
||||||
|
.SUB100:
|
||||||
|
SUB 100
|
||||||
|
CP 100
|
||||||
|
JP C,NUMB
|
||||||
|
JR .SUB100
|
||||||
|
|
||||||
|
NUMB: LD C,#2F
|
||||||
|
.NUMB1: INC C
|
||||||
|
SUB 10
|
||||||
|
JP NC,.NUMB1
|
||||||
|
ADD A,10
|
||||||
|
ADD A,#30
|
||||||
|
LD (HL),C
|
||||||
|
INC HL
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
PRNSIZE LD A,(IX+32)
|
||||||
|
LD HL,DIRIDD
|
||||||
|
AND #10
|
||||||
|
JP NZ,.PRZ
|
||||||
|
LD L,(IX+28)
|
||||||
|
LD H,(IX+29)
|
||||||
|
EXX
|
||||||
|
LD L,(IX+30)
|
||||||
|
LD H,(IX+31)
|
||||||
|
EXX
|
||||||
|
PUSH IX
|
||||||
|
CALL MAKE_LN
|
||||||
|
LD HL,L32BIT_+9
|
||||||
|
LD A,(HL)
|
||||||
|
CP #20
|
||||||
|
JR NZ,.ALR
|
||||||
|
LD A,#30
|
||||||
|
LD (HL),A
|
||||||
|
.ALR: LD DE,SIZEBFF
|
||||||
|
LD HL,L32BIT_;; +1
|
||||||
|
LDI
|
||||||
|
LD A," "
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LD HL,SIZEBFF
|
||||||
|
POP IX
|
||||||
|
.PRZ: LD DE,PRM3
|
||||||
|
JP PUTPRM
|
||||||
|
|
||||||
|
MAKE_LN:
|
||||||
|
LD IX,L32BIT_
|
||||||
|
EXX
|
||||||
|
LD DE,#3B9A ; 1000000000
|
||||||
|
EXX
|
||||||
|
LD DE,#CA00
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#05F5 ; 100000000
|
||||||
|
EXX
|
||||||
|
LD DE,#E100
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#0098 ; 10000000
|
||||||
|
EXX
|
||||||
|
LD DE,#9680
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#000F ; 1000000
|
||||||
|
EXX
|
||||||
|
LD DE,#4240
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#0001 ; 100000
|
||||||
|
EXX
|
||||||
|
LD DE,#86A0
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#0000 ; 10000
|
||||||
|
EXX
|
||||||
|
LD DE,#2710
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#0000 ; 1000
|
||||||
|
EXX
|
||||||
|
LD DE,#03E8
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#0000 ; 100
|
||||||
|
EXX
|
||||||
|
LD DE,#0064
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#0000 ; 10
|
||||||
|
EXX
|
||||||
|
LD DE,#000A
|
||||||
|
CALL GET_DIG
|
||||||
|
LD A,L ; 1
|
||||||
|
ADD A,#30
|
||||||
|
LD (IX+0),A
|
||||||
|
INC IX
|
||||||
|
LD HL,L32BIT_
|
||||||
|
LD DE,#2030
|
||||||
|
;
|
||||||
|
.KILLZ: LD A,(HL)
|
||||||
|
CP E
|
||||||
|
JR NZ,.KILLZ2
|
||||||
|
LD (HL),D
|
||||||
|
INC HL
|
||||||
|
JP .KILLZ
|
||||||
|
.KILLZ2:
|
||||||
|
LD HL,L32BIT_+9
|
||||||
|
LD A,(HL)
|
||||||
|
CP D
|
||||||
|
RET NZ
|
||||||
|
LD (HL),E
|
||||||
|
RET
|
||||||
|
|
||||||
|
; HL:HL - DE:DE
|
||||||
|
|
||||||
|
GET_DIG:
|
||||||
|
XOR A
|
||||||
|
.INC_DG:
|
||||||
|
INC A
|
||||||
|
SBC HL,DE
|
||||||
|
EXX
|
||||||
|
SBC HL,DE
|
||||||
|
EXX
|
||||||
|
JP NC,.INC_DG
|
||||||
|
ADD HL,DE
|
||||||
|
EXX
|
||||||
|
ADC HL,DE
|
||||||
|
EXX
|
||||||
|
DEC A
|
||||||
|
ADD A,#30
|
||||||
|
LD (IX+0),A
|
||||||
|
INC IX
|
||||||
|
RET
|
||||||
|
|
||||||
|
L32BIT_ DB "0000000000"
|
||||||
|
|
||||||
|
DIRIDD DB "<DIR> ",0
|
||||||
|
|
||||||
|
SIZEBFF DB "0 000 000 000",0,0
|
||||||
|
|
||||||
|
DEFDIR DB #5C,"*.*",0
|
||||||
|
|
||||||
|
;------------------------
|
||||||
|
|
||||||
|
CDUMP: LD HL,BUF2
|
||||||
|
LD BC,#0000
|
||||||
|
CALL GETNUM
|
||||||
|
; LD XL,C
|
||||||
|
; LD XH,0
|
||||||
|
; LD HL,0
|
||||||
|
LD A,(CDDRIVE)
|
||||||
|
LD DE,DUMPBUF
|
||||||
|
LD BC,1*256 + BIOS.DRV_READ
|
||||||
|
RST ToBIOS
|
||||||
|
JR C,.DMPERR
|
||||||
|
;
|
||||||
|
LD HL,BUF3
|
||||||
|
CALL GETNUM
|
||||||
|
PUSH IX
|
||||||
|
POP BC
|
||||||
|
LD A,B
|
||||||
|
AND #07
|
||||||
|
LD B,A
|
||||||
|
LD HL,2048-#01C0
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
JR NC,.GOODOFFS
|
||||||
|
LD BC,2048-#01C0
|
||||||
|
.GOODOFFS:
|
||||||
|
LD HL,DUMPBUF
|
||||||
|
ADD HL,BC
|
||||||
|
;
|
||||||
|
CALL DUMP
|
||||||
|
JP CRLF
|
||||||
|
.DMPERR:
|
||||||
|
LD A,MSG_IO_ERROR
|
||||||
|
JP MESSAGE
|
||||||
|
;
|
||||||
|
|
||||||
|
GETNUM: EXX
|
||||||
|
LD IX,0
|
||||||
|
LD HL,0
|
||||||
|
EXX
|
||||||
|
.GETNUM0:
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JR Z,.EGETN
|
||||||
|
INC HL
|
||||||
|
CP "0"
|
||||||
|
JR C,.GETNUM0
|
||||||
|
CP "9"+1
|
||||||
|
JR NC,.GETNUM0
|
||||||
|
SUB "0"
|
||||||
|
;
|
||||||
|
EXX
|
||||||
|
PUSH IX ;
|
||||||
|
PUSH HL
|
||||||
|
POP DE
|
||||||
|
POP BC ;LD DE:BC,HL:IX
|
||||||
|
;
|
||||||
|
ADD IX,IX
|
||||||
|
ADC HL,HL ;x2
|
||||||
|
ADD IX,IX
|
||||||
|
ADC HL,HL ;x4
|
||||||
|
ADD IX,BC
|
||||||
|
ADC HL,DE ;x5
|
||||||
|
ADD IX,IX
|
||||||
|
ADC HL,HL ;x10
|
||||||
|
;
|
||||||
|
LD C,A
|
||||||
|
LD B,0
|
||||||
|
ADD IX,BC
|
||||||
|
LD C,B
|
||||||
|
ADC HL,BC
|
||||||
|
EXX
|
||||||
|
JR .GETNUM0
|
||||||
|
.EGETN: EXX
|
||||||
|
;PUSH IX
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
POP HL
|
||||||
|
;POP IX
|
||||||
|
RET
|
||||||
|
;;;;;;;;;;;;;;;
|
||||||
|
; LD A,(HL)
|
||||||
|
; OR A
|
||||||
|
; RET Z
|
||||||
|
; INC HL
|
||||||
|
; CP "0"
|
||||||
|
; JR C,GETNUM
|
||||||
|
; CP "9"+1
|
||||||
|
; JR NC,GETNUM
|
||||||
|
; SUB "0"
|
||||||
|
; LD B,A
|
||||||
|
;
|
||||||
|
; LD A,C
|
||||||
|
; ADD A,A
|
||||||
|
; ADD A,A
|
||||||
|
; ADD A,C
|
||||||
|
; ADD A,A
|
||||||
|
;
|
||||||
|
; ADD A,B
|
||||||
|
; LD C,A
|
||||||
|
; JR GETNUM
|
||||||
|
;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
UPDUMP: BYTE " +00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF ",CR,LF
|
||||||
|
DZ " -------------------------------------------------- +----------------+"
|
||||||
|
|
||||||
|
|
||||||
|
DUMP: PUSH HL
|
||||||
|
LD HL,UPDUMP
|
||||||
|
LD C,Dss.PChars
|
||||||
|
RST ToDSS
|
||||||
|
POP HL
|
||||||
|
LD BC,#1C00
|
||||||
|
.L1: PUSH BC
|
||||||
|
PUSH BC
|
||||||
|
CALL CRLF
|
||||||
|
;
|
||||||
|
LD DE,DUMPBUF
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
LD A,L
|
||||||
|
PUSH AF
|
||||||
|
LD A,H
|
||||||
|
ADD HL,DE
|
||||||
|
;
|
||||||
|
CALL PHEX
|
||||||
|
POP AF
|
||||||
|
CALL PHEX
|
||||||
|
LD A,":"
|
||||||
|
CALL PRNCHAR
|
||||||
|
LD A," "
|
||||||
|
CALL PRNCHAR
|
||||||
|
LD A," "
|
||||||
|
CALL PRNCHAR
|
||||||
|
POP BC
|
||||||
|
PUSH HL
|
||||||
|
;
|
||||||
|
LD B,#08
|
||||||
|
.L2: PUSH BC
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CALL PHEX
|
||||||
|
LD A," "
|
||||||
|
CALL PRNCHAR
|
||||||
|
POP BC
|
||||||
|
INC C
|
||||||
|
DJNZ .L2
|
||||||
|
;
|
||||||
|
LD A," "
|
||||||
|
CALL PRNCHAR
|
||||||
|
;
|
||||||
|
LD B,#08
|
||||||
|
.L2_00: PUSH BC
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CALL PHEX
|
||||||
|
LD A," "
|
||||||
|
CALL PRNCHAR
|
||||||
|
POP BC
|
||||||
|
INC C
|
||||||
|
DJNZ .L2_00
|
||||||
|
;
|
||||||
|
LD A," "
|
||||||
|
CALL PRNCHAR
|
||||||
|
;
|
||||||
|
LD A,"|"
|
||||||
|
CALL PRNCHAR
|
||||||
|
POP HL
|
||||||
|
LD B,#10
|
||||||
|
.LLL: LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
PUSH BC
|
||||||
|
CALL PRINT_
|
||||||
|
POP BC
|
||||||
|
DJNZ .LLL
|
||||||
|
LD A,"|"
|
||||||
|
CALL PRNCHAR
|
||||||
|
;
|
||||||
|
LD A,C
|
||||||
|
POP BC
|
||||||
|
LD C,A
|
||||||
|
DJNZ .L1
|
||||||
|
RET
|
||||||
|
|
||||||
|
PHEX: LD E,A
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
AND #0F
|
||||||
|
ADD A,#30
|
||||||
|
CP #3A
|
||||||
|
JR C,.PHEX2
|
||||||
|
ADD A,7
|
||||||
|
.PHEX2: CALL PRINT_
|
||||||
|
LD A,E
|
||||||
|
AND #0F
|
||||||
|
ADD A,#30
|
||||||
|
CP #3A
|
||||||
|
JR C,.PHEX3
|
||||||
|
ADD A,7
|
||||||
|
.PHEX3: CALL PRINT_
|
||||||
|
RET
|
||||||
|
|
||||||
|
PRNCHAR:
|
||||||
|
LD C,Dss.PutChar
|
||||||
|
JP ToDSS
|
||||||
|
;
|
||||||
1212
DSS/drivers/media/ATAPI/Cd_dos.asm
Normal file
1212
DSS/drivers/media/ATAPI/Cd_dos.asm
Normal file
File diff suppressed because it is too large
Load Diff
525
DSS/drivers/media/ATAPI/Hidden/CDFS0.ASM
Normal file
525
DSS/drivers/media/ATAPI/Hidden/CDFS0.ASM
Normal file
@ -0,0 +1,525 @@
|
|||||||
|
|
||||||
|
NAM EQU 0
|
||||||
|
EXT EQU 8
|
||||||
|
ATR EQU 11
|
||||||
|
|
||||||
|
CLU3 EQU 20
|
||||||
|
CLU4 EQU 21
|
||||||
|
|
||||||
|
TIM1 EQU 22
|
||||||
|
TIM2 EQU 23
|
||||||
|
DAT1 EQU 24
|
||||||
|
DAT2 EQU 25
|
||||||
|
CLU1 EQU 26
|
||||||
|
CLU2 EQU 27
|
||||||
|
LEN1 EQU 28
|
||||||
|
LEN2 EQU 29
|
||||||
|
LEN3 EQU 30
|
||||||
|
LEN4 EQU 31
|
||||||
|
POS1 EQU 32
|
||||||
|
POS2 EQU 33
|
||||||
|
POS3 EQU 34
|
||||||
|
POS4 EQU 35
|
||||||
|
DIRCLU1 EQU 36
|
||||||
|
DIRCLU2 EQU 37
|
||||||
|
HND1 EQU 38
|
||||||
|
HND2 EQU 39
|
||||||
|
FDRV EQU 40
|
||||||
|
AMODE EQU 41
|
||||||
|
FTASK EQU 42
|
||||||
|
|
||||||
|
DIR EQU #C000
|
||||||
|
|
||||||
|
DIRPAGE EQU 0
|
||||||
|
|
||||||
|
;ACCESS MODE:
|
||||||
|
; 00 - READ/WRITE
|
||||||
|
; 01 - READ
|
||||||
|
; 02 - WRITE
|
||||||
|
|
||||||
|
;File Manipulator (FM)
|
||||||
|
FM_BUF DEFB ". " ;+00 NAME
|
||||||
|
DEFB " " ;+08 EXT
|
||||||
|
DEFB #10 ;+11 ATTRIBUT
|
||||||
|
DEFB 0,0,0,0,0,0,0,0,0,0 ;+12 RESERVED
|
||||||
|
DEFW #0000 ;+22 TIME
|
||||||
|
DEFW #0000 ;+24 DATE
|
||||||
|
DEFW #0000 ;+26 START CLUSTER
|
||||||
|
DEFW #0000,#0000 ;+28 SIZE FILE
|
||||||
|
DEFW #0000,#0000 ;+32 FILE POSITION (FP)
|
||||||
|
DEFW #0000 ;+36 DIRECTORY CLUSTER
|
||||||
|
DEFW #0000 ;+38 HANDLE NUMBER
|
||||||
|
DEFB #00 ;+40 DRIVE OR CURRENT
|
||||||
|
DEFB #00 ;+41 ACCESS MODE
|
||||||
|
DEFB #00 ;+42 TASK
|
||||||
|
DEFB #00 ;+43 EMPTY
|
||||||
|
END_FM
|
||||||
|
;End of FM
|
||||||
|
DEFS 44*1,0
|
||||||
|
|
||||||
|
FM_SIZE EQU END_FM-FM_BUF
|
||||||
|
|
||||||
|
SET_FM PUSH DE
|
||||||
|
INC A
|
||||||
|
LD IY,FM_BUF-FM_SIZE
|
||||||
|
LD DE,FM_SIZE
|
||||||
|
SET_FM1 ADD IY,DE
|
||||||
|
DEC A
|
||||||
|
JR NZ,SET_FM1
|
||||||
|
POP DE
|
||||||
|
LD A,(IY+0)
|
||||||
|
OR A
|
||||||
|
LD A,0
|
||||||
|
RET NZ
|
||||||
|
LD A,5
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
; HL:IX - OFFSET POINTER
|
||||||
|
; A - FILE MANIPULATOR
|
||||||
|
|
||||||
|
MOVE_FP CALL SET_FM
|
||||||
|
RET C
|
||||||
|
INC B
|
||||||
|
DEC B
|
||||||
|
JP Z,MOVE_FA
|
||||||
|
DEC B
|
||||||
|
JP Z,MOVE_FB
|
||||||
|
DEC B
|
||||||
|
JP Z,MOVE_FC
|
||||||
|
LD A,1
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
;from Start File
|
||||||
|
MOVE_FA LD BC,0
|
||||||
|
LD DE,0
|
||||||
|
JR MOVE_F1
|
||||||
|
|
||||||
|
;from End File
|
||||||
|
MOVE_FC LD C,(IY+28)
|
||||||
|
LD B,(IY+29)
|
||||||
|
LD E,(IY+30)
|
||||||
|
LD D,(IY+31)
|
||||||
|
JR MOVE_F1
|
||||||
|
|
||||||
|
;from Current Position
|
||||||
|
MOVE_FB LD C,(IY+32)
|
||||||
|
LD B,(IY+33)
|
||||||
|
LD E,(IY+34)
|
||||||
|
LD D,(IY+35)
|
||||||
|
MOVE_F1 ADD IX,BC
|
||||||
|
ADC HL,DE
|
||||||
|
LD D,HX
|
||||||
|
LD E,LX
|
||||||
|
LD (IY+32),E
|
||||||
|
LD (IY+33),D
|
||||||
|
LD (IY+34),L
|
||||||
|
LD (IY+35),H
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;FP COMPARE
|
||||||
|
; CY - FILE POINTER > SIZE
|
||||||
|
; NC - FILE POINTER < SIZE
|
||||||
|
|
||||||
|
MOVE_CP LD L,(IY+28)
|
||||||
|
LD H,(IY+29)
|
||||||
|
LD E,(IY+32)
|
||||||
|
LD D,(IY+33)
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
LD L,(IY+30)
|
||||||
|
LD H,(IY+31)
|
||||||
|
LD E,(IY+34)
|
||||||
|
LD D,(IY+35)
|
||||||
|
SBC HL,DE
|
||||||
|
RET
|
||||||
|
|
||||||
|
INITDISK
|
||||||
|
LD B,4
|
||||||
|
CD_I_LP PUSH BC
|
||||||
|
LD DE,DIR
|
||||||
|
LD HL,#0000
|
||||||
|
LD IX,#0010
|
||||||
|
LD BC,#0105
|
||||||
|
; LD A,(DRIVE)
|
||||||
|
CALL CDCMD
|
||||||
|
; RST #18
|
||||||
|
POP BC
|
||||||
|
JR NC,CD_I_OK
|
||||||
|
DJNZ CD_I_LP
|
||||||
|
UNKCD SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
CD_I_OK LD HL,DIR
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CP #01
|
||||||
|
JR NZ,UNKCD
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CP "C"
|
||||||
|
JR NZ,UNKCD
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CP "D"
|
||||||
|
JR NZ,UNKCD
|
||||||
|
LD HL,DIR+#009E
|
||||||
|
LD DE,ROOTDIR
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LD HL,DIR+#00A6
|
||||||
|
LD DE,ROOTLEN
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
; POP AF
|
||||||
|
; OUT (PAGE3),A
|
||||||
|
; LD HL,0
|
||||||
|
; LD (FATCASH),HL
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
LOADDIR XOR A
|
||||||
|
LD A,DIRPAGE
|
||||||
|
CALL BANK
|
||||||
|
PUSH AF
|
||||||
|
LD B,3
|
||||||
|
LOADFFF PUSH BC
|
||||||
|
LD HL,#C000
|
||||||
|
LD DE,#C001
|
||||||
|
LD BC,#3FFF
|
||||||
|
LD (HL),L
|
||||||
|
LDIR
|
||||||
|
; LD A,(DRIVE)
|
||||||
|
; LD (IY+FDRV),A
|
||||||
|
;; LD C,(IY+LEN1)
|
||||||
|
LD C,(IY+LEN2)
|
||||||
|
LD B,(IY+LEN3)
|
||||||
|
LD E,(IY+LEN4)
|
||||||
|
LD D,0
|
||||||
|
SRL D
|
||||||
|
RR E
|
||||||
|
RR B
|
||||||
|
RR C
|
||||||
|
SRL D
|
||||||
|
RR E
|
||||||
|
RR B
|
||||||
|
RR C
|
||||||
|
SRL D
|
||||||
|
RR E
|
||||||
|
RR B
|
||||||
|
RR C
|
||||||
|
LD E,(IY+CLU1)
|
||||||
|
LD D,(IY+CLU2)
|
||||||
|
LD L,(IY+CLU3)
|
||||||
|
LD H,(IY+CLU4)
|
||||||
|
LD HX,D
|
||||||
|
LD LX,E
|
||||||
|
LD B,C
|
||||||
|
LD A,B
|
||||||
|
OR A
|
||||||
|
JR Z,ERRLEND
|
||||||
|
CP #08
|
||||||
|
JR C,NORLEND
|
||||||
|
LD B,8
|
||||||
|
NORLEND LD A,(DRIVE)
|
||||||
|
LD C,5
|
||||||
|
LD DE,DIR
|
||||||
|
CALL CDCMD
|
||||||
|
; RST #18
|
||||||
|
POP BC
|
||||||
|
JR NC,LOADMMM
|
||||||
|
DEC B
|
||||||
|
JP NZ,LOADFFF
|
||||||
|
POP AF
|
||||||
|
OUT (PAGE3),A
|
||||||
|
SCF
|
||||||
|
LD A,20
|
||||||
|
RET
|
||||||
|
|
||||||
|
ERRLEND POP BC
|
||||||
|
POP AF
|
||||||
|
OUT (PAGE3),A
|
||||||
|
SCF
|
||||||
|
LD A,20
|
||||||
|
RET
|
||||||
|
|
||||||
|
LOADMMM POP AF
|
||||||
|
OUT (PAGE3),A
|
||||||
|
CALL CORRDIR
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
CORRDIR LD A,DIRPAGE
|
||||||
|
CALL BANK
|
||||||
|
PUSH AF
|
||||||
|
LD HL,DIR
|
||||||
|
LD DE,DIR
|
||||||
|
CORRL1 PUSH DE
|
||||||
|
LD C,(HL)
|
||||||
|
LD B,0
|
||||||
|
LD DE,ENTRYBF
|
||||||
|
LDIR
|
||||||
|
POP DE
|
||||||
|
PUSH HL
|
||||||
|
LD HL,FCDFLEN
|
||||||
|
LD C,(HL)
|
||||||
|
LD B,0
|
||||||
|
ADD HL,BC
|
||||||
|
INC HL
|
||||||
|
LD (HL),0
|
||||||
|
SBC HL,BC
|
||||||
|
PUSH DE
|
||||||
|
CALL MASK
|
||||||
|
POP HL
|
||||||
|
LD BC,11
|
||||||
|
ADD HL,BC
|
||||||
|
LD A,(FCDFLAG)
|
||||||
|
AND 2
|
||||||
|
LD A,#00 ;ATTRIBUT FILE
|
||||||
|
JR Z,CORRL0
|
||||||
|
LD A,#10 ;ATTRIBUT DIRECTORY
|
||||||
|
CORRL0 LD (HL),A
|
||||||
|
INC HL
|
||||||
|
XOR A
|
||||||
|
LD B,8
|
||||||
|
FILLCDN LD (HL),A
|
||||||
|
INC HL
|
||||||
|
DJNZ FILLCDN
|
||||||
|
LD A,(FCDSEC+2)
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
LD A,(FCDSEC+3)
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
LD DE,#0000 ;TIME
|
||||||
|
LD (HL),E
|
||||||
|
INC HL
|
||||||
|
LD (HL),D
|
||||||
|
INC HL
|
||||||
|
LD DE,#0000 ;DATE
|
||||||
|
LD (HL),E
|
||||||
|
INC HL
|
||||||
|
LD (HL),D
|
||||||
|
INC HL
|
||||||
|
LD DE,(FCDSEC)
|
||||||
|
LD (HL),E
|
||||||
|
INC HL
|
||||||
|
LD (HL),D
|
||||||
|
INC HL
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,FCDLEN
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
POP HL
|
||||||
|
BIT 7,H
|
||||||
|
JR Z,CORRL2
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JP NZ,CORRL1
|
||||||
|
LD L,0
|
||||||
|
INC H
|
||||||
|
JR Z,CORRL2
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JP NZ,CORRL1
|
||||||
|
CORRL2 XOR A
|
||||||
|
LD (DE),A
|
||||||
|
LD DE,(ROOTDIR+0)
|
||||||
|
LD L,(IY+CLU1)
|
||||||
|
LD H,(IY+CLU2)
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
JR NZ,CORRL6
|
||||||
|
LD DE,(ROOTDIR+2)
|
||||||
|
LD L,(IY+CLU3)
|
||||||
|
LD H,(IY+CLU4)
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
JR NZ,CORRL6
|
||||||
|
LD HL,DIR
|
||||||
|
LD A,(HL)
|
||||||
|
CP " "
|
||||||
|
JR NZ,CORRL4
|
||||||
|
LD (HL),#E5
|
||||||
|
LD BC,#0020
|
||||||
|
ADD HL,BC
|
||||||
|
LD A,(HL)
|
||||||
|
CP " "
|
||||||
|
JR NZ,CORRL4
|
||||||
|
LD (HL),#E5
|
||||||
|
JR CORRL4
|
||||||
|
CORRL6 LD HL,DIR
|
||||||
|
LD A,(HL)
|
||||||
|
CP " "
|
||||||
|
JR NZ,CORRL4
|
||||||
|
LD (HL),"."
|
||||||
|
LD BC,#0020
|
||||||
|
ADD HL,BC
|
||||||
|
LD A,(HL)
|
||||||
|
CP " "
|
||||||
|
JR NZ,CORRL4
|
||||||
|
LD (HL),"."
|
||||||
|
INC HL
|
||||||
|
LD (HL),"."
|
||||||
|
CORRL4 POP AF
|
||||||
|
OUT (PAGE3),A
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
ENTRYBF
|
||||||
|
DEFB #00 ;Entry lenght
|
||||||
|
DEFB #00 ;XAR in LBN
|
||||||
|
FCDSEC DEFW #00,#00 ;Start sector (Intel)
|
||||||
|
DEFW #00,#00 ;Start sector (Motorola)
|
||||||
|
FCDLEN DEFW #00,#00 ;Lenght file (Intel)
|
||||||
|
DEFW #00,#00 ;Lenght file (Motorola)
|
||||||
|
FCDYEAR DEFB #00 ;Year
|
||||||
|
FCDMOUN DEFB #00 ;Month
|
||||||
|
FCDDAY DEFB #00 ;Day
|
||||||
|
FCDHOUR DEFB #00 ;Hour
|
||||||
|
FCDMIN DEFB #00 ;Minute
|
||||||
|
FCDSECN DEFB #00 ;Second
|
||||||
|
DEFB #00 ;Reserve
|
||||||
|
FCDFLAG DEFB #00 ;Flag
|
||||||
|
DEFB #00 ;Interlive size
|
||||||
|
DEFB #00 ;Interlive skip factor
|
||||||
|
DEFW #0000 ;Volume Set Sequence (Intel)
|
||||||
|
DEFW #0000 ;Volume Set Sequence (Motorola)
|
||||||
|
FCDFLEN DEFB #00
|
||||||
|
DEFSA EQU $-ENTRYBF
|
||||||
|
FCDNAME DEFS #100-DEFSA
|
||||||
|
|
||||||
|
ROOTDIR DEFW 0,0
|
||||||
|
ROOTLEN DEFW 0,0
|
||||||
|
|
||||||
|
DIRSIZE DEFW 0
|
||||||
|
|
||||||
|
BANK LD C,A
|
||||||
|
LD B,0
|
||||||
|
LD HL,BANKTBL
|
||||||
|
ADD HL,BC
|
||||||
|
IN A,(PAGE3)
|
||||||
|
LD C,PAGE3
|
||||||
|
OUTI
|
||||||
|
RET
|
||||||
|
|
||||||
|
BANKTBL DEFB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
|
||||||
|
DEFB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
|
||||||
|
|
||||||
|
HANDTA DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
|
||||||
|
MASKARE
|
||||||
|
DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
|
||||||
|
; HL - MASK "file*.t??"
|
||||||
|
; DE - 11 bytes filename
|
||||||
|
; RET: C=2 FILE WITHOUT EXTENTION
|
||||||
|
; C=1 FILE WITH EXTENTION
|
||||||
|
|
||||||
|
MASK PUSH HL
|
||||||
|
PUSH DE
|
||||||
|
LD H,D
|
||||||
|
LD L,E
|
||||||
|
INC DE
|
||||||
|
LD (HL),#20
|
||||||
|
LD BC,10
|
||||||
|
LDIR
|
||||||
|
POP DE
|
||||||
|
POP HL
|
||||||
|
LD A,(HL)
|
||||||
|
CP #21
|
||||||
|
RET C
|
||||||
|
LD BC,#0902
|
||||||
|
MASK1 LD A,(HL)
|
||||||
|
CP #21
|
||||||
|
CCF
|
||||||
|
RET NC
|
||||||
|
CP #22
|
||||||
|
JR Z,MASK7
|
||||||
|
CP "*"
|
||||||
|
JR Z,MASK3
|
||||||
|
CP "+"
|
||||||
|
JR Z,MASK7
|
||||||
|
CP ","
|
||||||
|
JR Z,MASK7
|
||||||
|
CP "."
|
||||||
|
JR Z,MASK5
|
||||||
|
CP "/"
|
||||||
|
JR Z,MASK7
|
||||||
|
CP ":"
|
||||||
|
JR Z,MASK7
|
||||||
|
CP ";"
|
||||||
|
JR Z,MASK7
|
||||||
|
CP "<"
|
||||||
|
JR Z,MASK7
|
||||||
|
CP "="
|
||||||
|
JR Z,MASK7
|
||||||
|
CP ">"
|
||||||
|
JR Z,MASK7
|
||||||
|
CP "["
|
||||||
|
JR Z,MASK7
|
||||||
|
CP '\' ;
|
||||||
|
JR Z,MASK7
|
||||||
|
CP "]"
|
||||||
|
JR Z,MASK7
|
||||||
|
CP "|"
|
||||||
|
JR Z,MASK7
|
||||||
|
CP "a"
|
||||||
|
JR C,MASK2
|
||||||
|
CP "{"
|
||||||
|
JR NC,MASK2
|
||||||
|
SUB #20
|
||||||
|
MASK2 LD (DE),A
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DJNZ MASK1
|
||||||
|
MASK7 LD A,16
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
MASK3 LD A,"?"
|
||||||
|
INC HL
|
||||||
|
DJNZ MASK6
|
||||||
|
LD A,16
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
MASK6 LD (DE),A
|
||||||
|
INC DE
|
||||||
|
DJNZ MASK6
|
||||||
|
LD B,1
|
||||||
|
JR MASK1
|
||||||
|
|
||||||
|
MASK5 LD A," "
|
||||||
|
INC HL
|
||||||
|
DJNZ MASK4
|
||||||
|
LD B,4
|
||||||
|
DEC C
|
||||||
|
JP NZ,MASK1
|
||||||
|
LD A,16
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
MASK4 LD (DE),A
|
||||||
|
INC DE
|
||||||
|
DJNZ MASK4
|
||||||
|
LD B,4
|
||||||
|
DEC C
|
||||||
|
JP NZ,MASK1
|
||||||
|
LD A,16
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
372
DSS/drivers/media/ATAPI/Hidden/Cd_bios.asm
Normal file
372
DSS/drivers/media/ATAPI/Hidden/Cd_bios.asm
Normal file
@ -0,0 +1,372 @@
|
|||||||
|
MASTER EQU 0
|
||||||
|
SLAVE EQU 1
|
||||||
|
;========================================================
|
||||||
|
R170 EQU #0050 ;Data
|
||||||
|
R171 EQU #0051 ;Error
|
||||||
|
R172 EQU #0052 ;Direct
|
||||||
|
R173 EQU #0053 ;Reserve
|
||||||
|
R174 EQU #0054 ;Lenght block low
|
||||||
|
R175 EQU #0055 ;Lenght block high
|
||||||
|
R176 EQU #4052 ;Drive device
|
||||||
|
R177 EQU #4053 ;Status
|
||||||
|
|
||||||
|
W170 EQU #0150 ;Data
|
||||||
|
W171 EQU #0151 ;????
|
||||||
|
W172 EQU #0152 ;????
|
||||||
|
W173 EQU #0153 ;Reserve
|
||||||
|
W174 EQU #0154 ;Lenght block low
|
||||||
|
W175 EQU #0155 ;Lenght block high
|
||||||
|
W176 EQU #4152 ;Drive device
|
||||||
|
W177 EQU #4153 ;Command
|
||||||
|
|
||||||
|
BSY EQU 7
|
||||||
|
DRQ EQU 3
|
||||||
|
ERR EQU 0
|
||||||
|
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------;
|
||||||
|
SIZESEC: DW #0800
|
||||||
|
|
||||||
|
PKTSIZE: DB 12
|
||||||
|
;-----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
CDCMD BIT 7,C
|
||||||
|
JP NZ,EXTCD
|
||||||
|
INC C
|
||||||
|
DEC C
|
||||||
|
JP Z,RESETCD ; 0
|
||||||
|
DEC C
|
||||||
|
JP Z,RESETCD ; 1
|
||||||
|
DEC C
|
||||||
|
JP Z,NOPCDC ; 2
|
||||||
|
DEC C
|
||||||
|
JP Z,CHEK_C ; 3
|
||||||
|
DEC C
|
||||||
|
JP Z,GBPB_C ; 4 ; [ ] ¯¥à¥¥á⨠¢ DSS
|
||||||
|
DEC C
|
||||||
|
JP Z,READC ; 5
|
||||||
|
DEC C
|
||||||
|
JP Z,NOPCDC ; 6
|
||||||
|
NOPCDC LD A,1
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
EXTCD RES 7,C
|
||||||
|
INC C
|
||||||
|
DEC C
|
||||||
|
JP Z,NOPCDC
|
||||||
|
DEC C
|
||||||
|
JP Z,OPENC
|
||||||
|
DEC C
|
||||||
|
JP Z,CLOSC
|
||||||
|
JP NOPCDC
|
||||||
|
|
||||||
|
|
||||||
|
RESETCD LD B,50
|
||||||
|
RESECD PUSH BC
|
||||||
|
LD A,(CDDRIVE)
|
||||||
|
CALL CD_TEST
|
||||||
|
POP BC
|
||||||
|
RET NC
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
EI
|
||||||
|
HALT
|
||||||
|
DJNZ RESECD
|
||||||
|
RET
|
||||||
|
|
||||||
|
CHEK_C LD A,(CDDRIVE)
|
||||||
|
CALL CD_TEST
|
||||||
|
LD A,#FF
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; [ ] ¯¥à¥¥á⨠¢ DSS
|
||||||
|
GBPB_C LD HL,CD_BPB
|
||||||
|
LD BC,#0200
|
||||||
|
LDIR
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
READC LD A,(CDDRIVE)
|
||||||
|
JP CD_READ
|
||||||
|
|
||||||
|
OPENC LD A,(CDDRIVE)
|
||||||
|
JP CD_OPEN
|
||||||
|
|
||||||
|
CLOSC LD A,(CDDRIVE)
|
||||||
|
JP CD_CLOS
|
||||||
|
|
||||||
|
CD_TEST LD HL,CMDNOPP
|
||||||
|
LD DE,0
|
||||||
|
JP AP_COM
|
||||||
|
|
||||||
|
CD_OPEN LD HL,CMDOPEN
|
||||||
|
LD DE,0
|
||||||
|
JP AP_COM
|
||||||
|
|
||||||
|
CD_CLOS LD HL,CMDCLOS
|
||||||
|
LD DE,0
|
||||||
|
JP AP_COM
|
||||||
|
|
||||||
|
; HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - SECTOR COUNT
|
||||||
|
; A - DRIVE
|
||||||
|
CD_READ:
|
||||||
|
LD C,A
|
||||||
|
LD A,H
|
||||||
|
LD (SECREAD+0),A
|
||||||
|
LD A,L
|
||||||
|
LD (SECREAD+1),A
|
||||||
|
LD A,XH
|
||||||
|
LD (SECREAD+2),A
|
||||||
|
LD A,XL
|
||||||
|
LD (SECREAD+3),A
|
||||||
|
LD A,B
|
||||||
|
LD (COUNT+1),A
|
||||||
|
LD HL,CMDREAD
|
||||||
|
LD A,C
|
||||||
|
CALL AP_COM
|
||||||
|
RET
|
||||||
|
|
||||||
|
; INPUT: HL - AP paket (12bytes)
|
||||||
|
; RETURN: CF - ERROR
|
||||||
|
; 01h - RECOVERED ERROR
|
||||||
|
; 02h - NOT READY
|
||||||
|
; 03h - MEDIUM ERROR
|
||||||
|
; 04h - HARDWARE ERROR
|
||||||
|
; 05h - ILLEGAL REQUEST
|
||||||
|
; 06h - UNIT ATTETION
|
||||||
|
; 07h - DATA PROTECT
|
||||||
|
; 0Bh - ABORTED COMMAND
|
||||||
|
; 80h - TIME OUT
|
||||||
|
|
||||||
|
AP_COM ;AND #01
|
||||||
|
;LD A,#A0 ;0
|
||||||
|
;JR Z,APCOM1
|
||||||
|
;LD A,#B0
|
||||||
|
APCOM1 ;LD BC,W176
|
||||||
|
;OUT (C),A ;SELECT DRIVE
|
||||||
|
EXX
|
||||||
|
LD DE,#8000
|
||||||
|
LD BC,R177
|
||||||
|
CALL WAITPRT
|
||||||
|
EXX
|
||||||
|
JR NC,CDREADY
|
||||||
|
LD BC,W177
|
||||||
|
LD A,#08
|
||||||
|
OUT (C),A
|
||||||
|
LD B,#80
|
||||||
|
DJNZ $
|
||||||
|
EXX
|
||||||
|
LD DE,#8000
|
||||||
|
LD BC,R177
|
||||||
|
CALL WAITPRT
|
||||||
|
EXX
|
||||||
|
RET C
|
||||||
|
CDREADY XOR A
|
||||||
|
EXX
|
||||||
|
LD BC,W171
|
||||||
|
OUT (C),A
|
||||||
|
LD DE,(SIZESEC) ;SIZE BLOCK
|
||||||
|
LD BC,W174
|
||||||
|
OUT (C),E
|
||||||
|
LD BC,W175
|
||||||
|
OUT (C),D
|
||||||
|
LD BC,W177
|
||||||
|
LD A,#A0 ;ATAPI.Packet
|
||||||
|
OUT (C),A
|
||||||
|
LD DE,#8000
|
||||||
|
LD BC,R177
|
||||||
|
CALL WAITPRT
|
||||||
|
EXX
|
||||||
|
RET C
|
||||||
|
EXX
|
||||||
|
LD DE,#0908
|
||||||
|
LD BC,R177
|
||||||
|
CALL WAITPRT
|
||||||
|
EXX
|
||||||
|
BIT ERR,A
|
||||||
|
JR NZ,CDERROR
|
||||||
|
JR NC,YEP_DRQ
|
||||||
|
LD A,#80
|
||||||
|
RET
|
||||||
|
|
||||||
|
YEP_DRQ LD BC,W170
|
||||||
|
LD A,(PKTSIZE)
|
||||||
|
SRL A
|
||||||
|
OUTPKT OUTI
|
||||||
|
OUTI
|
||||||
|
DEC A
|
||||||
|
JR NZ,OUTPKT
|
||||||
|
LD B,#80
|
||||||
|
DJNZ $
|
||||||
|
AP_LOOP EXX
|
||||||
|
LD DE,#8000
|
||||||
|
LD BC,R177
|
||||||
|
CALL WAITPRT
|
||||||
|
EXX
|
||||||
|
RET C
|
||||||
|
LD BC,R177
|
||||||
|
IN A,(C)
|
||||||
|
BIT ERR,A
|
||||||
|
JR Z,NO_ERR
|
||||||
|
CDERROR LD BC,R171 ;ERROR
|
||||||
|
IN A,(C)
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
AND #0F
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
NO_ERR BIT DRQ,A
|
||||||
|
LD A,0
|
||||||
|
RET Z ;NO DATA REQUEST
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,R174
|
||||||
|
IN E,(C)
|
||||||
|
LD BC,R175
|
||||||
|
IN D,(C) ;TRANSFER BLOCK SIZE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
RET Z ;BLOCK = 0
|
||||||
|
LD BC,R172
|
||||||
|
IN A,(C)
|
||||||
|
AND #02
|
||||||
|
;CP #02
|
||||||
|
JP NZ,FROM_CD
|
||||||
|
TO_CD LD BC,R170
|
||||||
|
WR_T_CD OUTI
|
||||||
|
OUTI
|
||||||
|
DEC DE
|
||||||
|
DEC DE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR NZ,WR_T_CD
|
||||||
|
EX DE,HL
|
||||||
|
JR AP_LOOP
|
||||||
|
|
||||||
|
FROM_CD LD A,H
|
||||||
|
OR L
|
||||||
|
JR Z,NULL
|
||||||
|
LD BC,R170
|
||||||
|
RD_F_CD INI
|
||||||
|
INI
|
||||||
|
DEC DE
|
||||||
|
DEC DE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR NZ,RD_F_CD
|
||||||
|
EX DE,HL
|
||||||
|
JR AP_LOOP
|
||||||
|
|
||||||
|
NULL LD BC,R170
|
||||||
|
RD_N_CD IN A,(C)
|
||||||
|
DEC B
|
||||||
|
IN A,(C)
|
||||||
|
DEC B
|
||||||
|
DEC DE
|
||||||
|
DEC DE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR NZ,RD_N_CD
|
||||||
|
; DE = 0 !!!
|
||||||
|
JR AP_LOOP
|
||||||
|
|
||||||
|
; E - Second * 10
|
||||||
|
|
||||||
|
PAUSE LD HL,#0000
|
||||||
|
PAUSE1 DEC L
|
||||||
|
JR NZ,PAUSE1
|
||||||
|
DEC H
|
||||||
|
JR NZ,PAUSE1
|
||||||
|
DEC E
|
||||||
|
JR NZ,PAUSE1
|
||||||
|
RET
|
||||||
|
|
||||||
|
; D - MASK
|
||||||
|
; E - PATTERN
|
||||||
|
; BC - PORT
|
||||||
|
|
||||||
|
WAITPRT LD A,100
|
||||||
|
LD HL,#0000
|
||||||
|
WAITPX EX AF,AF'
|
||||||
|
WAITP0 IN A,(C)
|
||||||
|
CP #FF
|
||||||
|
JR Z,WAITP1
|
||||||
|
AND D
|
||||||
|
CP E
|
||||||
|
JR NZ,WAITP2
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
WAITP2 DEC L
|
||||||
|
JR NZ,WAITP0
|
||||||
|
DEC H
|
||||||
|
JR NZ,WAITP0
|
||||||
|
EX AF,AF'
|
||||||
|
DEC A
|
||||||
|
JR NZ,WAITPX
|
||||||
|
EX AF,AF'
|
||||||
|
WAITP1 SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
CMDNOPP DEFB #00
|
||||||
|
DEFB 00,00,00
|
||||||
|
DEFB #00
|
||||||
|
DEFB 00,00,00
|
||||||
|
DEFB 00,00,00
|
||||||
|
DEFB #00
|
||||||
|
|
||||||
|
CMDOPEN DEFB #1B
|
||||||
|
DEFB #00,#00,#00
|
||||||
|
DEFB #02
|
||||||
|
DEFB #00,#00,#00,#00,#00,#00,#00
|
||||||
|
|
||||||
|
CMDCLOS DEFB #1B
|
||||||
|
DEFB #00,#00,#00
|
||||||
|
DEFB #03
|
||||||
|
DEFB #00,#00,#00,#00,#00,#00,#00
|
||||||
|
|
||||||
|
;CMDREAD DEFB #28,#00
|
||||||
|
CMDREAD DEFB #28,#00
|
||||||
|
SECREAD DEFB #00,#00,#00,#00
|
||||||
|
DEFB #00
|
||||||
|
COUNT DEFB #00,#01
|
||||||
|
DEFB #00,#00,#00
|
||||||
|
|
||||||
|
|
||||||
|
; Area for boot sector [512Bytes]
|
||||||
|
CD_BPB DB #00,#00,#00 ; +00 JMP
|
||||||
|
DB " " ; +03 DOS NAME
|
||||||
|
|
||||||
|
; Block Parameters BIOS
|
||||||
|
|
||||||
|
DW #0200 ; +0B BYTE PER SECTOR
|
||||||
|
DB 4 ; +0D SECTORS PER CLUSTER
|
||||||
|
DW 1 ; +0E RESERVE SECTORS
|
||||||
|
DB 1 ; +10 AMOUNT FATS
|
||||||
|
DW 512 ; +11 FILES IN DIRECTORY
|
||||||
|
DW 0 ; +13 ALL SECTORS ON DISK
|
||||||
|
DB #F8 ; +15 ID FORMAT
|
||||||
|
DW 1 ; +16 SIZE FAT IN SECTORS
|
||||||
|
DW 63 ; +18 SECTOR PER TRACK
|
||||||
|
DW 255 ; +1A AMOUNT SIDES
|
||||||
|
DW #0010 ; +1C HIDDEN SECTORS
|
||||||
|
|
||||||
|
DS 24
|
||||||
|
|
||||||
|
DB "FAT16" ; +36 FAT ID
|
||||||
|
|
||||||
|
DS 453
|
||||||
|
; end boot sector
|
||||||
|
;========================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
356
DSS/drivers/media/ATAPI/Hidden/Cdriver.asm
Normal file
356
DSS/drivers/media/ATAPI/Hidden/Cdriver.asm
Normal file
@ -0,0 +1,356 @@
|
|||||||
|
;CD ROM DRIVE DRIVER
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;Rev Date Name Description
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
; 02-08-2001 DNS Initial this module
|
||||||
|
;---------------------------------------------------------------
|
||||||
|
;========================================================
|
||||||
|
R170 EQU #0050 ;Data
|
||||||
|
R171 EQU #0051 ;Error
|
||||||
|
R172 EQU #0052 ;Direct
|
||||||
|
R173 EQU #0053 ;Reserve
|
||||||
|
R174 EQU #0054 ;Lenght block low
|
||||||
|
R175 EQU #0055 ;Lenght block high
|
||||||
|
R176 EQU #4052 ;Drive device
|
||||||
|
R177 EQU #4053 ;Status
|
||||||
|
|
||||||
|
W170 EQU #0150 ;Data
|
||||||
|
W171 EQU #0151 ;????
|
||||||
|
W172 EQU #0152 ;????
|
||||||
|
W173 EQU #0153 ;Reserve
|
||||||
|
W174 EQU #0154 ;Lenght block low
|
||||||
|
W175 EQU #0155 ;Lenght block high
|
||||||
|
W176 EQU #4152 ;Drive device
|
||||||
|
W177 EQU #4153 ;Command
|
||||||
|
|
||||||
|
RAM_ATAPI_PK EQU #FEE0
|
||||||
|
RAM_ATAPI_READ EQU #FEF0
|
||||||
|
|
||||||
|
|
||||||
|
; BSY EQU 7
|
||||||
|
; DRQ EQU 3
|
||||||
|
; ERR EQU 0
|
||||||
|
|
||||||
|
RESETC
|
||||||
|
RESETCD LD B,50
|
||||||
|
RESECD PUSH BC
|
||||||
|
LD A,1
|
||||||
|
CALL CD_TEST
|
||||||
|
POP BC
|
||||||
|
RET NC
|
||||||
|
EI
|
||||||
|
HALT
|
||||||
|
DJNZ RESECD
|
||||||
|
RET
|
||||||
|
|
||||||
|
LREADC
|
||||||
|
|
||||||
|
READC LD A,1
|
||||||
|
JP CD_READ
|
||||||
|
|
||||||
|
OPENC LD A,1
|
||||||
|
JP CD_OPEN
|
||||||
|
|
||||||
|
CLOSC LD A,1
|
||||||
|
JP CD_CLOS
|
||||||
|
|
||||||
|
SIZESEC EQU #0800
|
||||||
|
PKTSIZE EQU 12
|
||||||
|
|
||||||
|
CD_TEST LD HL,CMDNOPP
|
||||||
|
LD DE,0
|
||||||
|
CALL AP_COM
|
||||||
|
RET
|
||||||
|
|
||||||
|
DETECTC
|
||||||
|
|
||||||
|
CD_OPEN LD HL,CMDOPEN
|
||||||
|
LD DE,0
|
||||||
|
CALL AP_COM
|
||||||
|
RET
|
||||||
|
|
||||||
|
CD_CLOS LD HL,CMDCLOS
|
||||||
|
LD DE,0
|
||||||
|
CALL AP_COM
|
||||||
|
RET
|
||||||
|
|
||||||
|
; HL:IX - SECTOR
|
||||||
|
; DE - ADDRESS
|
||||||
|
; B - SECTOR COUNT
|
||||||
|
; A - DRIVE
|
||||||
|
|
||||||
|
CD_READ LD C,A
|
||||||
|
EXX
|
||||||
|
LD C,PAGE3
|
||||||
|
IN A,(C)
|
||||||
|
PUSH AF
|
||||||
|
LD A,SYSPAGE
|
||||||
|
OUT (C),A
|
||||||
|
LD HL,CMDREAD
|
||||||
|
LD DE,RAM_ATAPI_READ
|
||||||
|
LD BC,PKTSIZE
|
||||||
|
LDIR
|
||||||
|
EXX
|
||||||
|
LD A,H
|
||||||
|
LD (RAM_ATAPI_READ+SECREAD+0),A ;R01
|
||||||
|
LD A,L
|
||||||
|
LD (RAM_ATAPI_READ+SECREAD+1),A ;R01
|
||||||
|
LD A,XH
|
||||||
|
LD (RAM_ATAPI_READ+SECREAD+2),A ;R01
|
||||||
|
LD A,XL
|
||||||
|
LD (RAM_ATAPI_READ+SECREAD+3),A ;R01
|
||||||
|
LD A,B
|
||||||
|
LD (RAM_ATAPI_READ+COUNT+1),A ;R01
|
||||||
|
POP AF
|
||||||
|
OUT (PAGE3),A
|
||||||
|
;R01 LD HL,CMDREAD
|
||||||
|
LD HL,RAM_ATAPI_READ
|
||||||
|
LD A,C
|
||||||
|
CALL AP_COM
|
||||||
|
RET
|
||||||
|
|
||||||
|
; INPUT: HL - AP paket (12bytes)
|
||||||
|
; RETURN: CF - ERROR
|
||||||
|
; 01h - RECOVERED ERROR
|
||||||
|
; 02h - NOT READY
|
||||||
|
; 03h - MEDIUM ERROR
|
||||||
|
; 04h - HARDWARE ERROR
|
||||||
|
; 05h - ILLEGAL REQUEST
|
||||||
|
; 06h - UNIT ATTETION
|
||||||
|
; 07h - DATA PROTECT
|
||||||
|
; 0Bh - ABORTED COMMAND
|
||||||
|
; 80h - TIME OUT
|
||||||
|
|
||||||
|
AP_COM AND #01
|
||||||
|
LD A,#A0
|
||||||
|
JR Z,APCOM1
|
||||||
|
LD A,#B0
|
||||||
|
APCOM1 LD BC,W176
|
||||||
|
OUT (C),A ;SELECT DRIVE
|
||||||
|
EXX
|
||||||
|
LD DE,#8000
|
||||||
|
LD BC,R177
|
||||||
|
CALL CWAITPRT
|
||||||
|
EXX
|
||||||
|
JR NC,CDREADY
|
||||||
|
LD BC,W177
|
||||||
|
LD A,#08
|
||||||
|
OUT (C),A
|
||||||
|
LD B,#00
|
||||||
|
DJNZ $
|
||||||
|
EXX
|
||||||
|
LD DE,#8000
|
||||||
|
LD BC,R177
|
||||||
|
CALL CWAITPRT
|
||||||
|
EXX
|
||||||
|
RET C
|
||||||
|
CDREADY
|
||||||
|
LD C,PAGE3
|
||||||
|
IN B,(C)
|
||||||
|
|
||||||
|
PUSH DE
|
||||||
|
PUSH BC
|
||||||
|
|
||||||
|
LD A,SYSPAGE
|
||||||
|
OUT (C),A
|
||||||
|
LD A,B
|
||||||
|
LD DE,RAM_ATAPI_PK
|
||||||
|
LD BC,PKTSIZE
|
||||||
|
LDIR
|
||||||
|
|
||||||
|
POP BC
|
||||||
|
POP DE
|
||||||
|
OUT (C),B
|
||||||
|
|
||||||
|
XOR A
|
||||||
|
EXX
|
||||||
|
OUT (C),A
|
||||||
|
XOR A
|
||||||
|
LD BC,W171
|
||||||
|
OUT (C),A
|
||||||
|
LD DE,SIZESEC ;SIZE BLOCK
|
||||||
|
LD BC,W174
|
||||||
|
OUT (C),E
|
||||||
|
LD BC,W175
|
||||||
|
OUT (C),D
|
||||||
|
LD BC,W177
|
||||||
|
LD A,#A0
|
||||||
|
OUT (C),A
|
||||||
|
LD DE,#8000
|
||||||
|
LD BC,R177
|
||||||
|
CALL CWAITPRT
|
||||||
|
EXX
|
||||||
|
RET C
|
||||||
|
EXX
|
||||||
|
IF _MAME
|
||||||
|
LD DE,#0808
|
||||||
|
ELSE
|
||||||
|
LD DE,#0908
|
||||||
|
ENDIF
|
||||||
|
LD BC,R177
|
||||||
|
CALL CWAITPRT
|
||||||
|
EXX
|
||||||
|
BIT ERR,A
|
||||||
|
JR NZ,CDERROR
|
||||||
|
JR NC,YEP_DRQ
|
||||||
|
LD A,#80
|
||||||
|
RET
|
||||||
|
|
||||||
|
YEP_DRQ LD C,PAGE3
|
||||||
|
IN B,(C)
|
||||||
|
PUSH BC
|
||||||
|
LD A,SYSPAGE
|
||||||
|
OUT (PAGE3),A
|
||||||
|
LD HL,RAM_ATAPI_PK
|
||||||
|
LD BC,W170
|
||||||
|
LD A,PKTSIZE
|
||||||
|
SRL A
|
||||||
|
OUTPKT OUTI
|
||||||
|
OUTI
|
||||||
|
DEC A
|
||||||
|
JR NZ,OUTPKT
|
||||||
|
POP BC
|
||||||
|
OUT (C),B
|
||||||
|
LD B,#80
|
||||||
|
DJNZ $
|
||||||
|
AP_LOOP EXX
|
||||||
|
LD DE,#8000
|
||||||
|
LD BC,R177
|
||||||
|
CALL CWAITPRT
|
||||||
|
EXX
|
||||||
|
RET C
|
||||||
|
LD BC,R177
|
||||||
|
IN A,(C)
|
||||||
|
BIT ERR,A
|
||||||
|
JR Z,NO_ERR
|
||||||
|
CDERROR LD BC,R171 ;ERROR
|
||||||
|
IN A,(C)
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
AND #0F
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
NO_ERR BIT DRQ,A
|
||||||
|
LD A,0
|
||||||
|
RET Z ;NO DATA REQUEST
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,R174
|
||||||
|
IN E,(C)
|
||||||
|
LD BC,R175
|
||||||
|
IN D,(C) ;TRANSFER BLOCK SIZE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
RET Z ;BLOCK = 0
|
||||||
|
LD BC,R172
|
||||||
|
IN A,(C)
|
||||||
|
AND #02
|
||||||
|
CP #02
|
||||||
|
JP Z,FROM_CD
|
||||||
|
TO_CD LD BC,R170
|
||||||
|
WR_T_CD OUTI
|
||||||
|
OUTI
|
||||||
|
DEC DE
|
||||||
|
DEC DE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR NZ,WR_T_CD
|
||||||
|
EX DE,HL
|
||||||
|
JR AP_LOOP
|
||||||
|
|
||||||
|
FROM_CD LD A,H
|
||||||
|
OR L
|
||||||
|
JR Z,NULL
|
||||||
|
LD BC,R170
|
||||||
|
RD_F_CD INI
|
||||||
|
INI
|
||||||
|
DEC DE
|
||||||
|
DEC DE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR NZ,RD_F_CD
|
||||||
|
EX DE,HL
|
||||||
|
JR AP_LOOP
|
||||||
|
|
||||||
|
NULL LD BC,R170
|
||||||
|
RD_N_CD IN A,(C)
|
||||||
|
DEC B
|
||||||
|
IN A,(C)
|
||||||
|
DEC B
|
||||||
|
DEC DE
|
||||||
|
DEC DE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR NZ,RD_N_CD
|
||||||
|
; DE = 0 !!!
|
||||||
|
JR AP_LOOP
|
||||||
|
|
||||||
|
; E - Second * 10
|
||||||
|
|
||||||
|
PAUSE LD HL,#0000
|
||||||
|
PAUSE1 DEC L
|
||||||
|
JR NZ,PAUSE1
|
||||||
|
DEC H
|
||||||
|
JR NZ,PAUSE1
|
||||||
|
DEC E
|
||||||
|
JR NZ,PAUSE1
|
||||||
|
RET
|
||||||
|
|
||||||
|
; D - MASK
|
||||||
|
; E - PATTERN
|
||||||
|
; BC - PORT
|
||||||
|
|
||||||
|
CWAITPRT
|
||||||
|
LD A,100
|
||||||
|
LD HL,#0000
|
||||||
|
CWAITPX EX AF,AF'
|
||||||
|
CWAITP0 IN A,(C)
|
||||||
|
CP #FF
|
||||||
|
JR Z,CWAITP1
|
||||||
|
AND D
|
||||||
|
CP E
|
||||||
|
JR NZ,CWAITP2
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
|
||||||
|
CWAITP2 DEC L
|
||||||
|
JR NZ,CWAITP0
|
||||||
|
DEC H
|
||||||
|
JR NZ,CWAITP0
|
||||||
|
EX AF,AF'
|
||||||
|
DEC A
|
||||||
|
JR NZ,CWAITPX
|
||||||
|
EX AF,AF'
|
||||||
|
CWAITP1 SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
CMDNOPP DEFB #00
|
||||||
|
DEFB 00,00,00
|
||||||
|
DEFB #00
|
||||||
|
DEFB 00,00,00
|
||||||
|
DEFB 00,00,00
|
||||||
|
DEFB #00
|
||||||
|
|
||||||
|
CMDOPEN DEFB #1B
|
||||||
|
DEFB #00,#00,#00
|
||||||
|
DEFB #02
|
||||||
|
DEFB #00,#00,#00,#00,#00,#00,#00
|
||||||
|
|
||||||
|
CMDCLOS DEFB #1B
|
||||||
|
DEFB #00,#00,#00
|
||||||
|
DEFB #03
|
||||||
|
DEFB #00,#00,#00,#00,#00,#00,#00
|
||||||
|
|
||||||
|
CMDREAD DEFB #28,#00
|
||||||
|
SECREAD EQU $-CMDREAD
|
||||||
|
DEFB #00,#00,#00,#00
|
||||||
|
DEFB #00
|
||||||
|
COUNT EQU $-CMDREAD
|
||||||
|
DEFB #00,#01
|
||||||
|
DEFB #00,#00,#00
|
||||||
|
|
||||||
|
;========================================================
|
||||||
|
|
||||||
|
|
||||||
6
DSS/drivers/media/ATAPI/Hidden/DUMP.TXT
Normal file
6
DSS/drivers/media/ATAPI/Hidden/DUMP.TXT
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
00000000 00 43 44 30 30 31 01 45 4c 20 54 4f 52 49 54 4f |.CD001.EL TORITO|
|
||||||
|
00000010 20 53 50 45 43 49 46 49 43 41 54 49 4f 4e 00 00 | SPECIFICATION..|
|
||||||
|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|
||||||
|
*
|
||||||
|
00000040 00 00 00 00 00 00 00 13 00 00 00 00 00 00 00 00 |................|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user