mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
Initial commit
Estex DSS
This commit is contained in:
commit
91774c8b23
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "Shared_Includes"]
|
||||
path = Shared_Includes
|
||||
url = https://github.com/Tolik-Trek/Shared_Includes.git
|
||||
706
BOOT/BOOT.ASM
Normal file
706
BOOT/BOOT.ASM
Normal file
@ -0,0 +1,706 @@
|
||||
; <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 ; ¯ãâì á¨á⥬ë
|
||||
|
||||
155
BOOT/BOOTNAME.ASM
Normal file
155
BOOT/BOOTNAME.ASM
Normal file
@ -0,0 +1,155 @@
|
||||
;[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
|
||||
;
|
||||
756
BOOT/DSSBOOT.ASM
Normal file
756
BOOT/DSSBOOT.ASM
Normal file
@ -0,0 +1,756 @@
|
||||
;---------------------------------------------------------------
|
||||
;Rev Date Name Decription
|
||||
;---------------------------------------------------------------
|
||||
;R04 25-03-2023 BAO ; !FIXIT
|
||||
;R03 23-01-2000 DNS OPTIMIZE NEW BOOTING PROCEDURE
|
||||
;R02 08-01-2000 DNS NEW BOOTING PROCEDURE
|
||||
;R01 25-05-1998 DNS Console printing
|
||||
;R00 09-11-1998 DNS Color printing start message
|
||||
; Install CGA palette
|
||||
; +------------------------------+
|
||||
; + System Bootstrap +
|
||||
; + Initial revision 09 Nov 1998 +
|
||||
; +------------------------------+
|
||||
|
||||
DEFINE ORIGINAL_DSS 0
|
||||
DEFINE UNIVERSAL_BOOT 1
|
||||
|
||||
DISP #8000
|
||||
|
||||
OUTPUT 'build/DSSloader.bin'
|
||||
|
||||
ADRIVE EQU #00
|
||||
CDRIVE EQU #02
|
||||
|
||||
|
||||
|
||||
DRIVE:
|
||||
_mSYSID
|
||||
|
||||
DI
|
||||
LD (DRIVE),A
|
||||
LD C,BIOS.EXT_VERSION
|
||||
RST #18
|
||||
LD A,INCORR
|
||||
JR C,FAIL
|
||||
LD A,(DRIVE)
|
||||
BIT 7,A
|
||||
JR Z,GOOD_DRIVE
|
||||
EX DE,HL
|
||||
LD DE,#0215 ; ¥á«¨ ¢¥àá¨ï ¨¦¥ 2.21, â® ®è¨¡ª
|
||||
SBC HL,DE
|
||||
LD A,INCORR
|
||||
JR C,FAIL
|
||||
GOOD_DRIVE:
|
||||
LD DE,#8200
|
||||
LD HL,0
|
||||
LD IX,2
|
||||
LD BC,2*256+BIOS.DRV_READ
|
||||
LD A,(DRIVE)
|
||||
RST #18
|
||||
JR C,NULL
|
||||
JP CONTINU
|
||||
|
||||
FAIL CALL MESSAGE
|
||||
NULL LD A,FAILURE
|
||||
CALL MESSAGE
|
||||
DI
|
||||
HALT
|
||||
JR $
|
||||
|
||||
FMESAGE LD HL,MSG0
|
||||
LD BC,MSGE-MSG0
|
||||
INC A
|
||||
EX AF,AF'
|
||||
XOR A
|
||||
EX AF,AF'
|
||||
NEXTMSG EX AF,AF'
|
||||
CPIR
|
||||
RET PO
|
||||
RET NZ
|
||||
EX AF,AF'
|
||||
DEC A
|
||||
JR NZ,NEXTMSG
|
||||
RET
|
||||
|
||||
MESSAGE CALL FMESAGE
|
||||
JR PRINTZ
|
||||
|
||||
;R01 Start
|
||||
PRINTZ LD A,(HL) ;R01
|
||||
INC HL
|
||||
OR A
|
||||
RET Z
|
||||
CALL PRINTX
|
||||
JR PRINTZ
|
||||
|
||||
PRINTX CP #0D
|
||||
JR Z,CR_
|
||||
CP #0A
|
||||
JR Z,LF_
|
||||
LD BC,#0182
|
||||
RST #18
|
||||
RET
|
||||
CR_ LD C,#8E
|
||||
RST #18
|
||||
LD E,0
|
||||
LD C,#84
|
||||
RST #18
|
||||
RET
|
||||
LF_ LD C,#8E
|
||||
RST #18
|
||||
LD A,#1F
|
||||
CP D
|
||||
JR NZ,LF2
|
||||
PUSH DE
|
||||
PUSH HL
|
||||
LD DE,#0020
|
||||
LD BC,#018A
|
||||
RST #18
|
||||
LD DE,#1F00
|
||||
LD C,#84
|
||||
RST #18
|
||||
LD A," "
|
||||
LD BC,#5082
|
||||
RST #18
|
||||
POP HL
|
||||
POP DE
|
||||
DEC D
|
||||
LF2 INC D
|
||||
LD C,#84
|
||||
RST #18
|
||||
RET ;R01
|
||||
;R01 End
|
||||
|
||||
FAILURE EQU 0
|
||||
INCORR EQU 1
|
||||
ERRPART EQU 2
|
||||
ERRIBPB EQU 3
|
||||
NO_SYS EQU 4
|
||||
NOSHELL EQU 5
|
||||
STARTDO EQU 6
|
||||
;a BIOS version that is incompatible with this version of DOS
|
||||
; 0 10 20 30 40 50 60 70 80
|
||||
MSG0 DB 0
|
||||
DB 13,10,"The system has been halted. Press RESET to restart your computer.",13,10
|
||||
DB 0
|
||||
DB 13,10
|
||||
DB "You started your computer with a BIOS version that is incompatible with this",13,10
|
||||
DB "version of DSS. Please update BIOS to run this version of DSS.",13,10
|
||||
DB 0
|
||||
DB "Invalid partition table.",13,10
|
||||
DB 0
|
||||
DB "Invalid BOOT sector.",13,10
|
||||
DB 0
|
||||
DB "Can't open file SYSTEM.DOS ...",13,10
|
||||
DB 0
|
||||
DB "Can't open file SYSTEM.EXE ...",13,10
|
||||
DB 0
|
||||
DB 13,10,"Starting DSS... ",13,10,13,10
|
||||
DB 0
|
||||
MSGE DB 0
|
||||
|
||||
CONTINU
|
||||
LD HL,0
|
||||
LD (DISKL),HL
|
||||
LD (DISKH),HL
|
||||
|
||||
LD BC,1*256+BIOS.GetMem
|
||||
RST #18 ;GET PAGE FOR DOS
|
||||
LD (BANKDOS),A
|
||||
CALL GET_BPB ;READ BPB
|
||||
LD A,ERRIBPB
|
||||
JP C,FAIL
|
||||
CALL GETROOT
|
||||
LD A,NO_SYS
|
||||
JP C,FAIL
|
||||
|
||||
LD HL,(FCLUSTR)
|
||||
LD DE,#C000
|
||||
CALL FLOAD
|
||||
DI
|
||||
XOR A
|
||||
OUT (SYS_PORT.OFF),A
|
||||
|
||||
LD A,#10
|
||||
LD BC,#7FFD
|
||||
OUT (C),A
|
||||
|
||||
LD A,1
|
||||
LD B,#1F ;1FFD
|
||||
OUT (C),A
|
||||
|
||||
LD A,(BANKDOS)
|
||||
OUT (SLOT0),A
|
||||
|
||||
;DOS LOADED
|
||||
IF UNIVERSAL_BOOT
|
||||
|
||||
LD A,(DRIVE)
|
||||
LD C,#00
|
||||
RST #10
|
||||
jp c,XFAIL
|
||||
|
||||
LD A,STARTDO
|
||||
CALL DOSMESS
|
||||
|
||||
LD A,(DRIVE)
|
||||
LD B,1
|
||||
LD C,Dss.BootDSK
|
||||
RST #10
|
||||
|
||||
LD B,0
|
||||
ELSE
|
||||
|
||||
IF ORIGINAL_DSS
|
||||
LD C,#00
|
||||
RST #10
|
||||
ELSE
|
||||
LD A,(DRIVE)
|
||||
LD C,#00
|
||||
RST #10
|
||||
jp c,XFAIL
|
||||
ENDIF
|
||||
|
||||
LD A,STARTDO
|
||||
CALL DOSMESS
|
||||
|
||||
IF ORIGINAL_DSS
|
||||
LD A,(DRIVE)
|
||||
LD B,1
|
||||
LD C,Dss.BootDSK
|
||||
RST #10
|
||||
|
||||
LD B,0
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
LD C,Dss.BootDSK
|
||||
RST #10
|
||||
|
||||
LD B,"A"
|
||||
ADD A,B
|
||||
|
||||
LD HL,ROOT
|
||||
LD (HL),A
|
||||
LD C,Dss.ChDir
|
||||
RST #10
|
||||
|
||||
LD HL,PSHELL
|
||||
LD BC,Dss.Exec
|
||||
RST #10
|
||||
LD A,NOSHELL
|
||||
JP XFAIL
|
||||
|
||||
PSHELL: DB '\SYSTEM.EXE /P',0
|
||||
ROOT: DB 'X:\',0
|
||||
|
||||
DOSMESS CALL FMESAGE
|
||||
LD C,Dss.PChars
|
||||
RST #10
|
||||
RET
|
||||
|
||||
XFAIL CALL DOSMESS
|
||||
LD A,FAILURE
|
||||
CALL DOSMESS
|
||||
DI
|
||||
HALT
|
||||
.halt JR .halt
|
||||
|
||||
PART_TB PUSH BC
|
||||
LD HL,(BOOT+510)
|
||||
LD DE,#AA55
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JR NZ,ERRP
|
||||
LD IX,BOOT+#01BE
|
||||
LD B,4
|
||||
DOSAGA LD A,(IX+4)
|
||||
CP #0E
|
||||
JR Z,YEPDOS
|
||||
CP 6
|
||||
JR Z,YEPDOS
|
||||
CP 4
|
||||
JR Z,YEPDOS
|
||||
CP 1
|
||||
JR Z,YEPDOS
|
||||
LD DE,#10
|
||||
; ®è¨¡ª ¢ ®à¨£¨ «¥
|
||||
; ADD IY,DE
|
||||
ADD IX,DE
|
||||
DJNZ DOSAGA
|
||||
ERRP LD A,ERRPART
|
||||
JP FAIL
|
||||
|
||||
YEPDOS LD E,(IX+08)
|
||||
LD D,(IX+09)
|
||||
LD L,(IX+10)
|
||||
LD H,(IX+11)
|
||||
LD XH,D
|
||||
LD XL,E
|
||||
LD (DISKL),IX
|
||||
LD (DISKH),HL
|
||||
LD DE,BOOT
|
||||
LD BC,1*256+BIOS.DRV_READ
|
||||
LD A,(DRIVE)
|
||||
RST #18
|
||||
POP BC
|
||||
LD A,C
|
||||
RET
|
||||
|
||||
SET_PRM PUSH BC
|
||||
LD A,B
|
||||
LD C,BIOS.DRV_GET_PAR
|
||||
RST #18
|
||||
LD A,(BOOT.S_P_T)
|
||||
LD L,A
|
||||
POP AF
|
||||
PUSH AF
|
||||
LD C,BIOS.DRV_SET_PAR
|
||||
RST #18
|
||||
POP BC
|
||||
LD A,C
|
||||
RET
|
||||
|
||||
GET_BPB LD IX,#0000
|
||||
LD HL,#0000
|
||||
LD DE,BOOT
|
||||
LD BC,1*256+BIOS.DRV_READ
|
||||
LD A,(DRIVE)
|
||||
RST #18
|
||||
RET C
|
||||
LD A,(DRIVE)
|
||||
LD B,A
|
||||
AND #F0
|
||||
LD C,A
|
||||
CP #80
|
||||
JR NZ,NX1
|
||||
CALL PART_TB ;HDD
|
||||
RET C
|
||||
NX1 CP #00
|
||||
JR NZ,NX2
|
||||
CALL SET_PRM ;FDD
|
||||
NX2: LD HL,(BOOT+510)
|
||||
LD DE,#AA55
|
||||
AND A
|
||||
SBC HL,DE
|
||||
SCF
|
||||
RET NZ
|
||||
LD IY,BOOT ;Analysing Block Parametr BIOS
|
||||
LD A,(IY+_sBOOT_SEC.ID_FORM)
|
||||
CP #F0
|
||||
RET C
|
||||
LD HL,0 ;calc. first sector FAT
|
||||
LD (DIR_FRH),HL
|
||||
|
||||
LD E,(IY+_sBOOT_SEC.RESERVE) ;Reserve sec
|
||||
LD D,(IY+_sBOOT_SEC.RESERVE+1)
|
||||
ADD HL,DE
|
||||
LD (FAT_FRM),HL ;first sector FAT
|
||||
LD E,(IY+_sBOOT_SEC.S_P_F) ;sectors in FAT
|
||||
LD D,(IY+_sBOOT_SEC.S_P_F+1)
|
||||
LD A,(BOOT.FAT_NUM) ;amount FATs
|
||||
C_DATA1 ADD HL,DE
|
||||
DEC A
|
||||
JR NZ,C_DATA1
|
||||
LD (DIR_FRM),HL ;first sector DIR
|
||||
EX DE,HL
|
||||
LD L,(IY+_sBOOT_SEC.F_P_DIR) ;Number file handel
|
||||
LD H,(IY+_sBOOT_SEC.F_P_DIR+1)
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
ADD HL,HL
|
||||
LD A,H
|
||||
SRL A
|
||||
LD (DIR_S_S),A ;Sectors per dir
|
||||
LD L,A
|
||||
LD H,0
|
||||
ADD HL,DE
|
||||
LD (DAT_FRM),HL ;First sector data
|
||||
|
||||
LD C,(IY+_sBOOT_SEC.B_P_S) ;Size sector
|
||||
LD B,(IY+_sBOOT_SEC.B_P_S+1)
|
||||
LD HL,0
|
||||
LD A,(BOOT.S_P_C)
|
||||
NEXTAD3
|
||||
ADD HL,BC ;calc. cluster size
|
||||
DEC A
|
||||
JR NZ,NEXTAD3
|
||||
LD (CLU_LEN),HL
|
||||
|
||||
LD HL,BOOT.ID_FAT
|
||||
LD DE,FATMSG
|
||||
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"
|
||||
SCF
|
||||
RET NZ
|
||||
LD A,(HL)
|
||||
CP "6" ; FAT16
|
||||
LD HL,#FFFF
|
||||
JR Z,BPB_FAT
|
||||
CP "2" ; FAT12
|
||||
SCF
|
||||
RET NZ
|
||||
LD HL,#0FFF
|
||||
BPB_FAT
|
||||
LD (FAT_TYP),A
|
||||
LD (ENDCLUS),HL
|
||||
|
||||
LD IX,(DISKL)
|
||||
LD HL,(DISKH)
|
||||
LD DE,(FAT_FRM)
|
||||
LD BC,#0000
|
||||
ADD IX,DE
|
||||
ADC HL,BC
|
||||
;HL:IX
|
||||
LD DE,FAT
|
||||
LD BC,3*256+BIOS.DRV_READ
|
||||
LD A,(DRIVE)
|
||||
RST #18
|
||||
RET C
|
||||
LD HL,0
|
||||
LD (FATCASH),HL
|
||||
XOR A
|
||||
RET
|
||||
|
||||
IBMDOS_ LD A,(IY+_sBOOT_SEC.ID_FORM)
|
||||
CP #F0
|
||||
RET C
|
||||
CP #F8
|
||||
LD A,"6"
|
||||
LD HL,#FFFF
|
||||
JR Z,BPB_FAT
|
||||
LD A,"2"
|
||||
LD HL,#0FFF
|
||||
JR BPB_FAT
|
||||
|
||||
GETROOT LD HL,(DIR_FRH)
|
||||
LD IX,(DIR_FRL)
|
||||
LD BC,(DISKL)
|
||||
LD DE,(DISKH)
|
||||
LD A,(DIR_S_S)
|
||||
NEXTSEC PUSH AF
|
||||
ADD IX,BC
|
||||
ADC HL,DE
|
||||
;HL:IX
|
||||
PUSH IX
|
||||
PUSH HL
|
||||
LD BC,1*256+BIOS.DRV_READ
|
||||
LD DE,DIR
|
||||
LD A,(DRIVE)
|
||||
RST #18
|
||||
CALL SEARCH
|
||||
POP HL
|
||||
POP IX
|
||||
POP BC
|
||||
RET C
|
||||
RET NZ
|
||||
LD A,B
|
||||
LD DE,0
|
||||
LD BC,1
|
||||
DEC A
|
||||
JR NZ,NEXTSEC
|
||||
SCF
|
||||
RET
|
||||
|
||||
SEARCH LD C,17 ;HANDELS PER SECTOR 512/32 + 1
|
||||
LD IX,DIR-#0020
|
||||
SKIPNAM LD DE,#0020
|
||||
ADD IX,DE
|
||||
DEC C
|
||||
RET Z
|
||||
LD A,(IX+00)
|
||||
OR A
|
||||
SCF
|
||||
RET Z
|
||||
CP #E5
|
||||
JR Z,SKIPNAM
|
||||
LD A,(IX+11)
|
||||
AND #10
|
||||
JR NZ,SKIPNAM
|
||||
LD HL,MASKARE
|
||||
LD D,XH
|
||||
LD E,XL
|
||||
LD B,11
|
||||
SEARCH2 LD A,(DE)
|
||||
CP (HL)
|
||||
JR NZ,SKIPNAM
|
||||
INC HL
|
||||
INC DE
|
||||
DJNZ SEARCH2
|
||||
LD D,XH
|
||||
LD E,XL
|
||||
LD HL,HANDBUF
|
||||
EX DE,HL
|
||||
LD BC,#0020
|
||||
LDIR
|
||||
XOR A
|
||||
INC A
|
||||
RET
|
||||
|
||||
; HL - CLUSTER
|
||||
; DE - ADDRESS
|
||||
|
||||
FLOAD LD (READMEM),DE
|
||||
LD_FILE PUSH HL
|
||||
CALL NSECTOR
|
||||
LD DE,(READMEM)
|
||||
LD A,(BOOT.S_P_C)
|
||||
CP #20
|
||||
JR C,SMCLUS
|
||||
LD BC,#2052
|
||||
LD A,(BANKDOS)
|
||||
EX AF,AF'
|
||||
LD A,(DRIVE)
|
||||
RST #18
|
||||
POP HL
|
||||
AND A
|
||||
RET
|
||||
|
||||
SMCLUS LD B,A
|
||||
LD C,#52
|
||||
LD A,(BANKDOS)
|
||||
EX AF,AF'
|
||||
LD A,(DRIVE)
|
||||
RST #18
|
||||
LD HL,(READMEM)
|
||||
LD DE,(CLU_LEN)
|
||||
ADD HL,DE
|
||||
LD (READMEM),HL
|
||||
POP HL
|
||||
RET C
|
||||
CALL R_F_FAT
|
||||
RET C
|
||||
EX DE,HL
|
||||
JP LD_FILE
|
||||
|
||||
; HL - CLUSTER
|
||||
; HL:IX - SECTOR
|
||||
|
||||
NSECTOR DEC HL
|
||||
DEC HL
|
||||
EX DE,HL
|
||||
LD A,(BOOT.S_P_C)
|
||||
LD B,A
|
||||
LD HL,0
|
||||
LD IX,0
|
||||
ADD_DE1 ADD IX,DE
|
||||
JP NC,ADD_DE2
|
||||
INC HL
|
||||
ADD_DE2 DJNZ ADD_DE1
|
||||
LD DE,(DAT_FRM)
|
||||
ADD IX,DE
|
||||
LD DE,#0000
|
||||
ADC HL,DE
|
||||
LD DE,(DISKL)
|
||||
ADD IX,DE
|
||||
LD DE,(DISKH)
|
||||
ADC HL,DE
|
||||
RET
|
||||
|
||||
;-----------------
|
||||
|
||||
; HL - CLUSTER
|
||||
|
||||
; DE - (CLUSTER)
|
||||
|
||||
R_F_FAT PUSH HL
|
||||
LD A,(FAT_TYP)
|
||||
CP "2"
|
||||
JP Z,R_F_F12
|
||||
R_F_F16 LD DE,768 ; DE - CLUSTERS IN CASH
|
||||
XOR A
|
||||
R_F_00H INC A ; HL - CLUSTER
|
||||
SBC HL,DE
|
||||
JP NC,R_F_00H
|
||||
ADD HL,DE
|
||||
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
|
||||
DEC A
|
||||
LD BC,(FATCASH) ; A - ELEMENT OF CASH
|
||||
CP C
|
||||
CALL NZ,RE_FAT
|
||||
LD DE,FAT
|
||||
ADD HL,DE
|
||||
LD E,(HL)
|
||||
INC HL
|
||||
LD D,(HL)
|
||||
LD HL,#FFEF
|
||||
XOR A
|
||||
SBC HL,DE
|
||||
POP HL
|
||||
RET
|
||||
|
||||
R_F_F12 LD D,H
|
||||
LD E,L
|
||||
ADD HL,HL
|
||||
ADD HL,DE
|
||||
RR H
|
||||
RR L
|
||||
PUSH AF
|
||||
EX DE,HL
|
||||
LD HL,(BOOT.B_P_S)
|
||||
LD B,H
|
||||
LD C,L
|
||||
ADD HL,HL
|
||||
ADD HL,BC
|
||||
EX DE,HL
|
||||
XOR A ; DE - SIZE SECTOR * 3
|
||||
R_F_00 INC A ; HL - FAT OFFSET
|
||||
SBC HL,DE
|
||||
JP NC,R_F_00
|
||||
ADD HL,DE
|
||||
DEC A
|
||||
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)
|
||||
JP C,R_F_F01
|
||||
LD A,D
|
||||
AND #0F
|
||||
LD D,A
|
||||
JP 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 LD HL,#0FEF
|
||||
XOR A
|
||||
SBC HL,DE
|
||||
POP HL
|
||||
RET
|
||||
|
||||
RE_FAT PUSH HL
|
||||
LD L,A
|
||||
LD H,0
|
||||
LD (FATCASH),HL
|
||||
LD E,L
|
||||
LD D,H
|
||||
ADD HL,HL
|
||||
ADD HL,DE
|
||||
LD IX,0
|
||||
LD DE,(FAT_FRM)
|
||||
ADD HL,DE
|
||||
EX DE,HL
|
||||
JR NC,NOINX
|
||||
INC IX
|
||||
NOINX LD HL,(DISKL)
|
||||
ADD HL,DE
|
||||
EX DE,HL
|
||||
LD BC,(DISKH)
|
||||
JR NC,NOINX2
|
||||
INC IX
|
||||
NOINX2 ADD IX,BC
|
||||
PUSH IX
|
||||
PUSH DE
|
||||
POP IX
|
||||
POP HL
|
||||
LD DE,FAT
|
||||
LD BC,#0355
|
||||
LD A,(DRIVE)
|
||||
RST #18
|
||||
POP HL
|
||||
RET
|
||||
|
||||
MASKARE DB "SYSTEM DOS"
|
||||
|
||||
FATMSG DB "FAT"
|
||||
|
||||
; Area for boot sector [512Bytes]
|
||||
BOOT _sBOOT_SEC = $
|
||||
|
||||
; BOOT EQU $
|
||||
; ID_NAME EQU BOOT+#03 ; +03 DOS NAME
|
||||
; ; Block Parameters BIOS
|
||||
; B_P_S EQU BOOT+#0B ; +0B BYTE PER SECTOR
|
||||
; S_P_C EQU BOOT+#0D ; +0D SECTORS PER CLUSTER
|
||||
; RESERVE EQU BOOT+#0E ; +0E RESERVE SECTORS
|
||||
; FAT_NUM EQU BOOT+#10 ; +10 AMOUNT FATS
|
||||
; F_P_DIR EQU BOOT+#11 ; +11 FILES IN DIRECTORY
|
||||
; S_P_D EQU BOOT+#13 ; +13 ALL SECTORS ON DISK
|
||||
; ID_FORM EQU BOOT+#15 ; +15 ID FORMAT
|
||||
; S_P_F EQU BOOT+#16 ; +16 SIZE FAT IN SECTORS
|
||||
; S_P_T EQU BOOT+#18 ; +18 SECTOR PER TRACK
|
||||
; HEADS EQU BOOT+#1A ; +1A AMOUNT SIDES
|
||||
; HIDDEN EQU BOOT+#1C ; +1C HIDDEN SECTORS
|
||||
; ID_FAT EQU BOOT+#36 ; +36 FAT ID
|
||||
; ; end boot sector
|
||||
|
||||
|
||||
DIR EQU BOOT+512
|
||||
FAT EQU DIR+512
|
||||
|
||||
VALUE EQU 3*512+FAT
|
||||
FATCASH EQU VALUE+0
|
||||
FAT_FRM EQU VALUE+2 ; MSD_FAT_SEC first sector FAT
|
||||
DIR_FRH EQU VALUE+4 ; MSD_CAT_SEC first sector DIR
|
||||
DIR_FRL EQU VALUE+6 ; MSD_CAT_SEC first sector DIR
|
||||
DIR_FRM EQU VALUE+6
|
||||
DIR_S_S EQU VALUE+8 ; DIR_SEC_SIZE
|
||||
DAT_FRM EQU VALUE+9 ; MSD_DAT_SEC
|
||||
FAT_TYP EQU VALUE+11; TYPE FAT (#32 - 12bit, #36 - 16bit)
|
||||
CLU_LEN EQU VALUE+12; CLASTER_LEN
|
||||
ENDCLUS EQU VALUE+14
|
||||
|
||||
HANDBUF EQU VALUE+16
|
||||
FTIME EQU VALUE+16+22
|
||||
FDATE EQU VALUE+16+24
|
||||
FCLUSTR EQU VALUE+16+26
|
||||
FSIZE0 EQU VALUE+16+28
|
||||
FSIZE1 EQU VALUE+16+30
|
||||
|
||||
DISKH EQU VALUE+48
|
||||
DISKL EQU VALUE+50
|
||||
READMEM EQU VALUE+52
|
||||
SHEL_FM EQU VALUE+54
|
||||
BANKDOS EQU VALUE+55
|
||||
; EQU VALUE+56
|
||||
|
||||
;-----------------
|
||||
BLOCK #8600-$-3,0
|
||||
DB 'SPT'
|
||||
; BIGA EQU (($/256)+1)*256
|
||||
; BIGA2 EQU BIGA-$-2
|
||||
; DS BIGA2
|
||||
; DB "dp"
|
||||
; E______
|
||||
|
||||
;STACK EQU (($/256)+2)*256
|
||||
|
||||
ENT
|
||||
;START DI
|
||||
; LD (SPZ+1),SP
|
||||
; LD SP,#BFFF
|
||||
; LD C,#FE
|
||||
; CALL #3D13
|
||||
;SPZ LD SP,#0000
|
||||
; EI
|
||||
; RET
|
||||
|
||||
OUTEND
|
||||
;[]-----------------------------------------------------------[]
|
||||
9
BOOT/README.TXT
Normal file
9
BOOT/README.TXT
Normal file
@ -0,0 +1,9 @@
|
||||
<EFBFBD>à®£à ¬¬ § ¯¨á¨ FDD/HDD boot-§ £àã§ç¨ª ¨ ä ©«®¢ á¨á⥬ë.
|
||||
|
||||
”¨âç¨ ¯à®£à ¬¬ë:
|
||||
- ‚ ®â«¨ç¨¥ ®â ®à¨£¨ «ì®£® boot-¨áâ ««ïâ®à , íâ ¬®¦¥â
|
||||
¯¥à¥¯¨áë¢ âì 㦥 ãáâ ®¢«¥ë© boot-§ £àã§ç¨ª.
|
||||
- ” ©«ë á¨á⥬ë (system.dos, system.exe) ¬®£ãâ ¨¬¥âì
|
||||
«î¡ë¥ à §¬¥àë.
|
||||
- <20>ਠ§ £à㧪¥ ª®¬¯ìîâ¥à á ¤¨áª¥âë, § ¯à 訢 ¥âáï ®¢ ï
|
||||
¤¨áª¥â ¤«ï á®§¤ ¨ï ¨§ ¥¥ § £à㧮箩.
|
||||
2276
Console/CONSOLE.ASM
Normal file
2276
Console/CONSOLE.ASM
Normal file
File diff suppressed because it is too large
Load Diff
71
Console/DOS_EQU.ASM
Normal file
71
Console/DOS_EQU.ASM
Normal file
@ -0,0 +1,71 @@
|
||||
/*
|
||||
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
|
||||
*/
|
||||
104
Console/DSS.INC
Normal file
104
Console/DSS.INC
Normal file
@ -0,0 +1,104 @@
|
||||
|
||||
DSS_VERSION EQU #00
|
||||
DSS_CHDISK EQU #01
|
||||
DSS_CURDISK EQU #02
|
||||
DSS_DSKINFO EQU #03
|
||||
;DSS_G_ENTRY EQU #04
|
||||
; EQU #05
|
||||
; EQU #06
|
||||
; EQU #07
|
||||
; EQU #08
|
||||
DSS_BOOTDSK EQU #09
|
||||
;File io
|
||||
DSS_CREATE EQU #0A
|
||||
DSS_CREAT_N EQU #0B
|
||||
; EQU #0C
|
||||
;DSS_ERASE EQU #0D
|
||||
DSS_DELETE EQU #0E
|
||||
;DSS_MOVE EQU #0F
|
||||
DSS_RENAME EQU #10
|
||||
DSS_OPEN EQU #11
|
||||
DSS_CLOSE EQU #12
|
||||
DSS_READ EQU #13
|
||||
DSS_WRITE EQU #14
|
||||
DSS_MOVE_FP EQU #15
|
||||
DSS_ATTRIB EQU #16
|
||||
DSS_GET_D_T EQU #17
|
||||
DSS_PUT_D_T EQU #18
|
||||
DSS_F_FIRST EQU #19
|
||||
DSS_F_NEXT EQU #1A
|
||||
DSS_MKDIR EQU #1B
|
||||
DSS_RMDIR EQU #1C
|
||||
DSS_CHDIR EQU #1D
|
||||
DSS_CURDIR EQU #1E
|
||||
; EQU #1F
|
||||
; EQU #20
|
||||
DSS_SYSTIME EQU #21
|
||||
DSS_SETTIME EQU #22
|
||||
; EQU #23
|
||||
; EQU #24
|
||||
; EQU #25
|
||||
; EQU #26
|
||||
; EQU #27
|
||||
; EQU #28
|
||||
; EQU #29
|
||||
; EQU #2A
|
||||
; EQU #2B
|
||||
; EQU #2C
|
||||
; EQU #2D
|
||||
; EQU #2E
|
||||
; EQU #2F
|
||||
;Keyboard
|
||||
DSS_WAITKEY EQU #30
|
||||
DSS_SCANKEY EQU #31
|
||||
DSS_ECHOKEY EQU #32
|
||||
DSS_CTRLKEY EQU #33
|
||||
;DSS_EDIT EQU #34
|
||||
DSS_K_CLEAR EQU #35
|
||||
DSS_K_SETUP EQU #36
|
||||
DSS_TESTKEY EQU #37
|
||||
;Memory
|
||||
DSS_SETWIN EQU #38
|
||||
DSS_SETWIN1 EQU #39
|
||||
DSS_SETWIN2 EQU #3A
|
||||
DSS_SETWIN3 EQU #3B
|
||||
DSS_INFOMEM EQU #3C
|
||||
DSS_GETMEM EQU #3D
|
||||
DSS_FREEMEM EQU #3E
|
||||
DSS_SETMEM EQU #3F
|
||||
;Execution
|
||||
DSS_EXEC EQU #40
|
||||
DSS_EXIT EQU #41
|
||||
DSS_WAIT EQU #42
|
||||
|
||||
DSS_GSWITCH EQU #43
|
||||
DSS_DOSNAME EQU #44
|
||||
DSS_EX_PATH EQU #45
|
||||
DSS_ENVIRON EQU #46
|
||||
DSS_APPINFO EQU #47
|
||||
; EQU #48
|
||||
; EQU #49
|
||||
; EQU #4A
|
||||
; EQU #4B
|
||||
; EQU #4C
|
||||
; EQU #4D
|
||||
; EQU #4E
|
||||
; EQU #4F
|
||||
|
||||
DSS_SETVMOD EQU #50
|
||||
DSS_GETVMOD EQU #51
|
||||
DSS_LOCATE EQU #52
|
||||
DSS_CURSOR EQU #53
|
||||
DSS_SELPAGE EQU #54
|
||||
DSS_SCROLL EQU #55
|
||||
DSS_CLEAR EQU #56
|
||||
DSS_RDCHAR EQU #57
|
||||
DSS_WRCHAR EQU #58
|
||||
DSS_WINCOPY EQU #59
|
||||
DSS_WINREST EQU #5A
|
||||
DSS_PUTCHAR EQU #5B
|
||||
DSS_PCHARS EQU #5C
|
||||
;DSS_RES_PRN EQU #5D
|
||||
;DSS_CTRLPRN EQU #5E
|
||||
DSS_PRINT EQU #5F
|
||||
;
|
||||
66
Console/Errors.TXT
Normal file
66
Console/Errors.TXT
Normal file
@ -0,0 +1,66 @@
|
||||
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
|
||||
|
||||
4
Console/HISTORY.TXT
Normal file
4
Console/HISTORY.TXT
Normal file
@ -0,0 +1,4 @@
|
||||
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
Normal file
2074
Console/SYS.old
Normal file
File diff suppressed because it is too large
Load Diff
32
DSS/CHANGES.LOG
Normal file
32
DSS/CHANGES.LOG
Normal file
@ -0,0 +1,32 @@
|
||||
;ˆ§¬¥¥¨ï ¯®á«¥ ¢¥àᨨ 1.70
|
||||
‚ ¦®¥:
|
||||
|
||||
‘।¥¥:
|
||||
|
||||
‚®®¡é¥ ¥ ¢ ¦®¥:
|
||||
¨á¯à ¢¨âì ¢ë室 ¨§ äãªæ¨¨ #41 ¯à¨ ¢®§¬®¦®¬ 㢥«¨ç¥¨¨ ®¬¥à â ᪨ 1 ¯à¨ 255
|
||||
|
||||
; TEST
|
||||
|
||||
;ˆ§¬¥¥¨ï ¯®á«¥ ¢¥àᨨ 1.60
|
||||
10.02.2003 - „®¡ ¢«¥ ¢¨§ã «¨§ æ¨ï ªãàá®à ¢ äãªæ¨¨ ECHOKEY.
|
||||
06.02.2003 - ˆá¯à ¢«¥ ®è¨¡ª ¢ à §¡®à¥ ¨¬¥¨ ä ©« ç¨ î饣®áï á â®çª¨.
|
||||
29.01.2003 - ˆá¯à ¢«¥ ®è¨¡ª ¢ PUT_D_T, ¥ ®¡®¢«ï« áì ¤ â ¢ ä ©« å, ¢ ª®â®àë¥ ¥ ¯à®¨§¢®¤¨« áì § ¯¨áì.
|
||||
;ˆ§¬¥¥¨ï ¯®á«¥ ¢¥àᨨ 1.60RC
|
||||
05.12.2002 - <20>¥ «¨§®¢ fn. APPINFO 47h, ¨ä®à¬ æ¨ï ® ¯à¨«®¦¥¨¨.
|
||||
26.11.2002 - ˆá¯à ¢«¥ ®è¨¡ª ¢ CHDIR, ¥ ¢ë¯®«ï«áï § ¯à®á "." ¨§ ROOT
|
||||
19.11.2002 - „®¡ ¢«¥ ª®à४â¨à®¢ª âਡãâ ä ©« ¯à¨ ¥£® á®§¤ ¨¨.
|
||||
19.11.2002 - „®¡ ¢«¥® ¬ ᪨஢ ¨¥ ââਡãâ VOLUME LABEL.
|
||||
19.11.2002 - ˆá¯à ¢«¥ ®è¨¡ª á âਡã⮬ system.
|
||||
17.11.2002 - <20>¥ «¨§®¢ ® system environment, fn. 46h
|
||||
07.11.2002 - „®¡ ¢«¥ § ¯à¥â/à §à¥è¥¨¥ ¯à¥àë¢ ¨© ¢ äãªæ¨¨ WINCOPY ¨ WINREST
|
||||
07.11.2002 - ˆá¯à ¢«¥ ®è¨¡ª ¢ äãªæ¨¨ SCROLL (A=0)
|
||||
;ˆ§¬¥¥¨ï ¯®á«¥ ¢¥àᨨ 1.55
|
||||
06.08.2001 - „®¡ ¢«¥ ¯®¤¤¥à¦ª Secondary IDE
|
||||
06.08.2001 - ˆá¯à ¢«¥ ®è¨¡ª á ¯®¤à §¤¥« ¬¨ ¢â®à®£® ¢¨ç¥áâ¥à
|
||||
11.07.2001 - <20>®¤¤¥à¦ª ¯à¨â¥à ¤«ï Sp2000
|
||||
30.07.2001 - ˆá¯à ¢«¥® ®¯¨á ¨¥ ¢å®¤ëå ¯ à ¬¥â஢ äãªæ¨¨ 㤠«¥¨ï ä ©« (0Eh);
|
||||
;ˆ§¬¥¥¨ï ¯®á«¥ ¢¥àᨨ 1.54
|
||||
18.07.2001 - „®¡ ¢«¥® ®¯¨á ¨¥ à ¡®âë á £à ä¨ç¥áª¨¬ íªà ®¬;
|
||||
18.07.2001 - „®¡ ¢«¥® ®¯¨á ¨¥ ¯ à ¬¥âà äãªæ¨¨ ¯®«ã票ï ०¨¬ íªà (51h);
|
||||
15.03.2001 - „®¡ ¢«¥® ®¯¨á ¨¥ äãªæ¨¨ à ¡®âë á ª®¬ ¤®© áâப®©(45h);
|
||||
249
DSS/DISK_X.ASM
Normal file
249
DSS/DISK_X.ASM
Normal file
@ -0,0 +1,249 @@
|
||||
|
||||
; DISK DRIVER SPECIFICATION
|
||||
;---------------------------------------------
|
||||
; COMMAND 00h (INITIALIZATION)
|
||||
;
|
||||
; INPUT: A - DRIVE LETTER
|
||||
; IX - ENVIRONMENT
|
||||
; RETURN: A - AMOUNT DRIVE SUPPORT
|
||||
; HL - LENGTH DRIVER
|
||||
;---------------------------------------------
|
||||
; COMMAND 01h (OPEN)
|
||||
;
|
||||
; INPUT: A - DRIVE
|
||||
;
|
||||
;---------------------------------------------
|
||||
; COMMAND 02h (CLOSE)
|
||||
;
|
||||
; INPUT: A - DRIVE
|
||||
; RETURN: A -
|
||||
;---------------------------------------------
|
||||
; COMMAND 03h (MEDIA CHECK)
|
||||
;
|
||||
; INPUT: A - DRIVE
|
||||
; RETURN: A - 00h - OLD DISK, 0FFh - NEW DISK
|
||||
;---------------------------------------------
|
||||
; COMMAND 04h (GET BPB)
|
||||
;
|
||||
; INPUT: HL - ADDRESS
|
||||
; A - DRIVE
|
||||
;---------------------------------------------
|
||||
; COMMAND 05h (INPUT)
|
||||
;
|
||||
; INPUT: IX:DE - ABSOLUTE SECTOR
|
||||
; HL - MEMORY ADDRESS
|
||||
; B - SECTORS COUNT
|
||||
; A - DRIVE
|
||||
;---------------------------------------------
|
||||
; COMMAND 06h (OUTPUT)
|
||||
;
|
||||
; INPUT: IX:DE - ABSOLUTE SECTOR
|
||||
; HL - MEMORY ADDRESS
|
||||
; B - SECTORS COUNT
|
||||
; A - DRIVE
|
||||
;---------------------------------------------
|
||||
; COMMAND 07h (REMOVABLE)
|
||||
;
|
||||
; INPUT: A - DRIVE
|
||||
; RETURN: A = 0 - REMOVABLE
|
||||
; A = 1 - NONREMOVABLE
|
||||
;---------------------------------------------
|
||||
; COMMAND 08h (GENERIC IOCTL)
|
||||
;
|
||||
; INPUT: A - DRIVE
|
||||
; B - SUBCOMMAND
|
||||
; DE - MAGIC NUMBER (55AAh)
|
||||
; SUBCOMMAND
|
||||
;----------------------
|
||||
; 00 - GET DEVICE PARAMETERS
|
||||
; 01 - READ TRACK
|
||||
; 02 - TEST TRACK
|
||||
; 80 - SET DEVICE PARAMETERS
|
||||
; 81 - WRITE TRACK
|
||||
; 82 - FORMAT TRACK
|
||||
;---------------------------------------------
|
||||
;
|
||||
; ERRORS:
|
||||
; 0 - NO ERRORS
|
||||
; 1 - BAD COMMAND
|
||||
; 2 - BAD DRIVE NUMBER
|
||||
; 3 - UNKNOW FORMAT
|
||||
; 4 - NOT READY
|
||||
; 5 - SEEK ERROR
|
||||
; 6 - SECTOR NOT FOUND
|
||||
; 7 - CRC ERROR
|
||||
; 8 - WRITE PROTECT
|
||||
; 9 - READ ERROR
|
||||
; 10 - WRITE ERROR
|
||||
; 11 - FAILURE
|
||||
; 12 - BUSY (DEVICE OPENED)
|
||||
; 13 - RESERVED
|
||||
|
||||
;INTDISK PUSH HL
|
||||
; PUSH BC
|
||||
; LD HL,DEVICE
|
||||
; INC A
|
||||
;INTD001 DEC A
|
||||
; JP Z,YEP
|
||||
; LD C,(HL)
|
||||
; INC C
|
||||
; INC HL
|
||||
; INC HL
|
||||
; INC HL
|
||||
; JP NZ,INTD001
|
||||
; POP BC
|
||||
; POP HL
|
||||
; LD A,2
|
||||
; SCF
|
||||
; RET
|
||||
|
||||
;YEP LD A,(HL)
|
||||
; INC HL
|
||||
; LD C,(HL)
|
||||
; INC HL
|
||||
; LD H,(HL)
|
||||
; LD L,C
|
||||
; POP BC
|
||||
; EX (SP),HL
|
||||
; RET
|
||||
|
||||
DSS_MAX_DRIVES_AMOUNT EQU 26
|
||||
|
||||
INTDISK:
|
||||
CP #FF
|
||||
JR NZ,.noNeedRescan
|
||||
CP C
|
||||
JR Z,INITDVC_RET_DRIVE
|
||||
|
||||
.noNeedRescan:
|
||||
PUSH HL
|
||||
PUSH BC
|
||||
LD C,A
|
||||
ADD A,A
|
||||
ADD A,C
|
||||
LD C,A
|
||||
LD B,0
|
||||
LD HL,DEVICE
|
||||
ADD HL,BC
|
||||
LD A,(HL)
|
||||
INC A
|
||||
JR Z,NODEV
|
||||
DEC A
|
||||
INC HL
|
||||
LD C,(HL)
|
||||
INC HL
|
||||
LD H,(HL)
|
||||
LD L,C
|
||||
POP BC
|
||||
EX (SP),HL
|
||||
RET
|
||||
|
||||
NODEV POP BC
|
||||
POP HL
|
||||
LD A,DSS_Error.drv.INVALID_DRIVE
|
||||
SCF
|
||||
RET
|
||||
|
||||
PDEVICE DW DEVICE
|
||||
DEVICE: BLOCK DSS_MAX_DRIVES_AMOUNT*3,#FF
|
||||
.End: DB #FF
|
||||
|
||||
FLOPPY EQU #0001
|
||||
FIXED EQU #0002
|
||||
CDROM EQU #0004
|
||||
NETWORK EQU #0008
|
||||
|
||||
;DISKS: DB 27 ;LENGTH DISK INFO
|
||||
; DW FLOPPY ;DISK TYPE
|
||||
; DB 2,"A:" ;DISK NAME
|
||||
; DB 11,"NO NAME "
|
||||
; DB 8,"FAT12 "
|
||||
; DB #00 ;PHISICAL DRIVE NUMBER
|
||||
;
|
||||
; DB 27 ;LENGTH DISK INFO
|
||||
; DW FLOPPY ;DISK TYPE
|
||||
; DB 2,"B:" ;DISK NAME
|
||||
; DB 11,"NO NAME "
|
||||
; DB 8,"FAT12 "
|
||||
; DB #01 ;PHISICAL DRIVE NUMBER
|
||||
;
|
||||
; DB 27 ;LENGTH DISK INFO
|
||||
; DW FIXED ;DISK TYPE
|
||||
; DB 2,"C:" ;DISK NAME
|
||||
; DB 11,"NO NAME "
|
||||
; DB 8,"FAT16 "
|
||||
; DB #80 ;PHISICAL DRIVE NUMBER
|
||||
;
|
||||
; DB #00 ;END OF TABLE
|
||||
INITDVC_RET_DRIVE:
|
||||
CALL INITDVC
|
||||
LD A,(LDRIVE)
|
||||
AND A
|
||||
RET
|
||||
|
||||
INITDVC XOR A
|
||||
LD (LDRIVE),A
|
||||
LD HL,DEVICE
|
||||
LD (PDEVICE),HL
|
||||
LD C,A
|
||||
CALL FDDRIVE
|
||||
LD DE,FDDRIVE
|
||||
CALL MAKEDVC
|
||||
// XOR A
|
||||
LD C,0
|
||||
CALL HDDRIVE
|
||||
LD DE,HDDRIVE
|
||||
CALL MAKEDVC
|
||||
// XOR A
|
||||
LD C,0
|
||||
CALL RMDRIVE
|
||||
LD DE,RMDRIVE
|
||||
CALL MAKEDVC
|
||||
XOR A
|
||||
RET
|
||||
|
||||
MAKEDVC LD C,A
|
||||
LD HL,LDRIVE
|
||||
ADD A,(HL)
|
||||
LD (HL),A
|
||||
LD A,C
|
||||
LD C,0
|
||||
OR A
|
||||
RET Z
|
||||
LD HL,(PDEVICE)
|
||||
.loop: LD (HL),C
|
||||
INC HL
|
||||
LD (HL),E
|
||||
INC HL
|
||||
LD (HL),D
|
||||
INC HL
|
||||
INC C
|
||||
DEC A
|
||||
JR NZ,.loop
|
||||
LD (PDEVICE),HL
|
||||
DEC A
|
||||
LD (HL),A
|
||||
RET
|
||||
|
||||
;DEVICE DB #00
|
||||
; DW FDDRIVE ; FDD A
|
||||
; DB #01
|
||||
; DW FDDRIVE ; FDD B
|
||||
; DB #00
|
||||
; DW HDDRIVE ; HDD C
|
||||
; DB #01
|
||||
; DW HDDRIVE ; HDD D
|
||||
; DB #02
|
||||
; DW HDDRIVE ; HDD E
|
||||
; DB #03
|
||||
; DW HDDRIVE ; HDD F
|
||||
; DB #04
|
||||
; DW HDDRIVE ; HDD G
|
||||
; DB #05
|
||||
; DW HDDRIVE ; HDD H
|
||||
; DB #06
|
||||
; DW HDDRIVE ; HDD I
|
||||
; DB #07
|
||||
; DW HDDRIVE ; HDD J
|
||||
; DB #FF
|
||||
|
||||
572
DSS/DOS-MAIN.ASM
Normal file
572
DSS/DOS-MAIN.ASM
Normal file
@ -0,0 +1,572 @@
|
||||
|
||||
;[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
Normal file
1748
DSS/DOS5.ASM
Normal file
File diff suppressed because it is too large
Load Diff
831
DSS/DOS_FM.ASM
Normal file
831
DSS/DOS_FM.ASM
Normal file
@ -0,0 +1,831 @@
|
||||
|
||||
;[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]
|
||||
|
||||
547
DSS/DOS_X.ASM
Normal file
547
DSS/DOS_X.ASM
Normal file
@ -0,0 +1,547 @@
|
||||
|
||||
;[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]
|
||||
|
||||
237
DSS/DRV-MAIN.ASM
Normal file
237
DSS/DRV-MAIN.ASM
Normal file
@ -0,0 +1,237 @@
|
||||
;[BEGIN]
|
||||
;//MODULE: DRV-MAIN AUTHOR: Denis Parinov
|
||||
;//CREATE: 2003-03-12
|
||||
;---------------------------------------------------------------
|
||||
;Rev Date Name Description
|
||||
;---------------------------------------------------------------
|
||||
;R00 2003-03-19 DNS Initial version
|
||||
;---------------------------------------------------------------
|
||||
// INCLUDE "hardware.inc"
|
||||
// INCLUDE "bios.inc"
|
||||
|
||||
|
||||
; ORG #0000
|
||||
|
||||
MODULE DRV ; !FIXIT ®¡®©â¨áì ¡¥§ ¬®¤ã«ï
|
||||
;PAGEDRV EQU 0
|
||||
|
||||
;!TODO
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
; <[NOT USED]> ;
|
||||
A0000: JP RST_00 ;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
;
|
||||
|
||||
;
|
||||
RST_00:
|
||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
|
||||
;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
; <[BIOS API]> ;
|
||||
BLOCK 8-$,#FF ;
|
||||
A0008: PUSH AF ;
|
||||
LD A,SYS_PORT.PAGE8;
|
||||
OUT (SYS_PORT.ON),A ;
|
||||
POP AF ;
|
||||
RET ;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
;
|
||||
|
||||
;!FIXIT
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
; <[DSS API]> ;
|
||||
BLOCK #10-$,#FF ;
|
||||
A0010: ;JP RST_10 ;
|
||||
DI : HALT ;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
;
|
||||
|
||||
;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
; <[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
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
; <[NOT USED]> ;
|
||||
BLOCK #20-$,#FF ;
|
||||
A0020: JP RST_20 ;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
;
|
||||
|
||||
;
|
||||
RST_20:
|
||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
|
||||
;!TODO
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
; <[NOT USED]> ;
|
||||
BLOCK #28-$,#FF ;
|
||||
A0028: JP RST_28 ;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
;
|
||||
|
||||
;
|
||||
RST_28:
|
||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
|
||||
;!TODO
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
; <[NOT USED]> ;
|
||||
BLOCK #30-$,#FF ;
|
||||
A0030: JP RST_30 ;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
;
|
||||
|
||||
;
|
||||
RST_30:
|
||||
LD A,DSS_Error.drv.INVALID_COMMAND
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
|
||||
;!FIXIT
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
; <[MAIN INT]> ;
|
||||
BLOCK #38-$,#FF ;
|
||||
A0038: ;
|
||||
// JP RST_38 ;
|
||||
; RST_38: ;
|
||||
; 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 ;
|
||||
; 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 ;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
;
|
||||
|
||||
;
|
||||
KEYSCAN: RET ;!FIXIT
|
||||
;
|
||||
|
||||
;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
; <[ NMI ]> ;
|
||||
NMI: RETN ;
|
||||
BLOCK #66-$,#FF ;
|
||||
A0066: JP NMI ;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
;
|
||||
|
||||
|
||||
;-------------------------------;
|
||||
;ADRST10 EQU #00 ;!!!!!
|
||||
;-------------------------------;
|
||||
;!FIXIT
|
||||
RST_10 PUSH HL
|
||||
LD L,C
|
||||
LD H,ADRST10/256
|
||||
LD C,(HL)
|
||||
INC H
|
||||
LD H,(HL)
|
||||
LD L,C
|
||||
EX (SP),HL
|
||||
RET
|
||||
|
||||
;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
; <[DRIVE PAGE SWITCH]> ;
|
||||
BLOCK #7E-$,0 ;
|
||||
PORTAL.toMAIN: ;
|
||||
PUSH BC ;
|
||||
RETBANK+2: ;
|
||||
LD BC,0*256+SLOT0 ;
|
||||
OUT (C),B ;
|
||||
ASSERT $!=84,'-> Portal error!';
|
||||
;Entry point from DSS main page ; !FIXIT ¥á«¨ 2 à § ¯à¨«¥â¥âì íâã â®çªã ¢å®¤ , â® § áàñâáï RETBANK
|
||||
LD (RETBANK),A ;
|
||||
POP BC ;
|
||||
POP AF ;
|
||||
ADCALL+1: ;
|
||||
CALL DISPATCH ; ¯ âç¨âáï INTDISK
|
||||
JR PORTAL.toMAIN ;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
;
|
||||
/*
|
||||
push hl
|
||||
|
||||
*/
|
||||
|
||||
|
||||
;!FIXIT çñâ ¥ â® âãâ
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
LD B,#00; ;
|
||||
OUT (C),A ;
|
||||
;--- ;
|
||||
POP BC ;
|
||||
RET ;
|
||||
PORTAL.outDRV: ;
|
||||
RET ;
|
||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||
;
|
||||
|
||||
;
|
||||
DISPATCH
|
||||
CALL INITDVC
|
||||
LD HL,INTDISK
|
||||
LD (ADCALL),HL
|
||||
LD A,(LDRIVE)
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
|
||||
LDRIVE DB #00
|
||||
|
||||
INCLUDE 'disk_x.asm'
|
||||
INCLUDE 'ide_drv0.asm'
|
||||
INCLUDE 'fdd_drv0.asm'
|
||||
;INCLUDE 'ram_drv0.asm'
|
||||
INCLUDE 'ram_drv1.asm'
|
||||
|
||||
DB 0
|
||||
|
||||
ENDMODULE
|
||||
; OUTEND
|
||||
;[END]
|
||||
72
DSS/DSS_MACROSES.Z80
Normal file
72
DSS/DSS_MACROSES.Z80
Normal file
@ -0,0 +1,72 @@
|
||||
;
|
||||
MACRO _mSavePath
|
||||
; PUSH HL
|
||||
; LD HL,BACK_CUR_PATH
|
||||
; EX (SP),HL
|
||||
; CALL SAVE_CUR_PATH
|
||||
ENDM
|
||||
;
|
||||
;
|
||||
MACRO _mRestorePath
|
||||
; CALL BACK_CUR_PATH
|
||||
ENDM
|
||||
;
|
||||
|
||||
;
|
||||
MACRO _mRestorStackAfterRestorePath
|
||||
; POP HL ;CLEAR STACK "BACK_CUR_PATH"
|
||||
ENDM
|
||||
;
|
||||
|
||||
;
|
||||
MACRO _mDSS_Version
|
||||
DB 'DSS_'
|
||||
db '0'+VERS
|
||||
db '.'
|
||||
db MODF/10+'0'
|
||||
db MODF-(MODF/10)*10+'0'
|
||||
ENDM
|
||||
;
|
||||
|
||||
;
|
||||
MACRO C_OSTYPE
|
||||
IF OSTYPE = DP
|
||||
|
||||
C_OSNAME
|
||||
DB "-DP [",#30+REVISION,']',0
|
||||
|
||||
ELSEIF OSTYPE = BETA
|
||||
|
||||
C_OSNAME
|
||||
DB '-BETA [',#30+REVISION,']',0
|
||||
|
||||
ELSEIF OSTYPE = RC
|
||||
|
||||
C_OSNAME
|
||||
DB '-RC [',#30+REVISION,']',0
|
||||
|
||||
ELSEIF OSTYPE = RELEASE
|
||||
|
||||
C_OSRELEASE
|
||||
;DB "-RELEASE",0
|
||||
|
||||
ELSE
|
||||
|
||||
C_OSNAME
|
||||
DB "-UNKNOWN",0
|
||||
|
||||
ENDIF
|
||||
ENDM
|
||||
;
|
||||
|
||||
;
|
||||
MACRO C_OSNAME
|
||||
DB "ESTEX",0
|
||||
ENDM
|
||||
;
|
||||
|
||||
;
|
||||
MACRO C_OSRELEASE
|
||||
DB "Estex DSS",0
|
||||
ENDM
|
||||
;
|
||||
62
DSS/DSS_MAP.TXT
Normal file
62
DSS/DSS_MAP.TXT
Normal file
@ -0,0 +1,62 @@
|
||||
0000-0038h RESTARTS
|
||||
|
||||
003B-006BH 38h Interrupt
|
||||
|
||||
0066-0068h NMI
|
||||
|
||||
0069-0072h RST10 routine
|
||||
|
||||
0073-007Fh Align space
|
||||
|
||||
0080-0085h CALL interpage gate
|
||||
|
||||
0086-00C3h BPB struct
|
||||
|
||||
00C4-00FAh DSS INIT routine
|
||||
|
||||
00FB-00FFH SPACE
|
||||
|
||||
0100-01FFH MEMORY TABLE (OWNER)
|
||||
|
||||
0200-03FFH FUNCTIONS ADDRESSES
|
||||
|
||||
0400-043FH KEYBOARD BUFFER
|
||||
0440-0BD1H KEYBOARD DRIVER
|
||||
|
||||
0BD2-0EF5H SCREEN DRIVER
|
||||
|
||||
0EF6-1100H FAT ROUTINES
|
||||
|
||||
1101-1342H DISK IO ROUTINES
|
||||
|
||||
1343-1443H CURRENT DIR NAME BUFFER
|
||||
|
||||
1444-16BDH HANDLES AND FILE IO ROUTINES
|
||||
|
||||
16BE-25C7H FILE AND DIR ROUTINES (DOS5)
|
||||
|
||||
25C8-27ACH EXECUTE ROUTINES
|
||||
|
||||
27AD-2882H MEMORY ROUTINES
|
||||
|
||||
2883-2CAEH EXEC
|
||||
|
||||
?2CAF-2EAEH EXEBUFFER (GLUK?)
|
||||
|
||||
2EAF-2FAEH PROCESS STACK BUFFER
|
||||
|
||||
2FAF-30CBH ENVIRONMENT ROUTINES
|
||||
|
||||
30CC-35E0H MOUSE DRIVER
|
||||
35E1-36E0H MOUSE IMAGE BUFFER
|
||||
|
||||
36E1-370DH DTA BUFFER
|
||||
|
||||
370D-37FFH SPACE
|
||||
|
||||
3800-39FFH BUFFER & SECTOR BUFFER
|
||||
|
||||
|
||||
3832-3833H ENDCODE
|
||||
|
||||
3833-3FFFH FREE-SPACE
|
||||
241
DSS/ENVIRON.ASM
Normal file
241
DSS/ENVIRON.ASM
Normal file
@ -0,0 +1,241 @@
|
||||
;[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
Normal file
1228
DSS/EXECUTE.ASM
Normal file
File diff suppressed because it is too large
Load Diff
473
DSS/FAT_X.ASM
Normal file
473
DSS/FAT_X.ASM
Normal file
@ -0,0 +1,473 @@
|
||||
|
||||
;[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
Normal file
366
DSS/FDD_DRV0.ASM
Normal file
@ -0,0 +1,366 @@
|
||||
|
||||
; 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
|
||||
|
||||
;==============================================
|
||||
|
||||
|
||||
|
||||
706
DSS/IDE_DRV0.ASM
Normal file
706
DSS/IDE_DRV0.ASM
Normal file
@ -0,0 +1,706 @@
|
||||
;---------------------------------------------------------------
|
||||
;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
Normal file
920
DSS/INTMOUSE.ASM
Normal file
@ -0,0 +1,920 @@
|
||||
|
||||
;[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]
|
||||
|
||||
927
DSS/KEYINTER.ASM
Normal file
927
DSS/KEYINTER.ASM
Normal file
@ -0,0 +1,927 @@
|
||||
|
||||
;[BEGIN]
|
||||
;//MODULE: KEYINTER
|
||||
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
|
||||
;//UPDATE: 24-10-1999 DNS Restore module
|
||||
;------------------------------------------------
|
||||
;R02 13-04-2023 BAO FIX BUG IN K_CLEAR WITH STACK OVERFLOW
|
||||
;R01 10-02-2003 DNS Add cursor visualisation
|
||||
;
|
||||
_mInfoALIGN 256,0
|
||||
;KEYBOARD BUFFER
|
||||
SBUF: BLOCK 64,0
|
||||
|
||||
|
||||
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
|
||||
|
||||
|
||||
UNCODE DW 0
|
||||
|
||||
WAITKEY LD HL,HOST
|
||||
LD A,(HEAD)
|
||||
CP (HL)
|
||||
JR Z,WAITKEY
|
||||
CALL GETSYM
|
||||
LD A,E
|
||||
AND A
|
||||
RET
|
||||
|
||||
SCANKEY LD HL,HOST
|
||||
LD A,(HEAD)
|
||||
CP (HL)
|
||||
RET Z
|
||||
CALL GETSYM
|
||||
LD A,E
|
||||
RET
|
||||
;
|
||||
|
||||
;
|
||||
IF CLASSIC_CURSOR ;------------------------------;
|
||||
|
||||
ECHOKEY:
|
||||
CURCOUNT+1: LD A,#FF ;R01
|
||||
INC A ;R01
|
||||
LD (CURCOUNT),A ;R01
|
||||
AND #FF ;R01
|
||||
JR NZ,NOTUR ;R01
|
||||
CURSYM+1: LD A,#00 ;R01
|
||||
XOR #01 ;R01
|
||||
LD (CURSYM),A ;R01
|
||||
LD A," " ;R01
|
||||
JR Z,CURSKI ;R01
|
||||
LD A,"_" ;R01
|
||||
CURSKI: CALL PUTCHAR ;R01
|
||||
LD A,8 ;R01 BACKSPACE
|
||||
CALL PUTCHAR ;R01
|
||||
NOTUR: CALL SCANKEY
|
||||
JR Z,ECHOKEY
|
||||
PUSH DE
|
||||
PUSH BC
|
||||
PUSH AF ;R01
|
||||
LD A," " ;R01
|
||||
CALL PUTCHAR ;R01
|
||||
LD A,8 ;R01 BACKSPACE
|
||||
CALL PUTCHAR ;R01
|
||||
POP AF ;R01
|
||||
CALL PUTCHAR
|
||||
POP BC
|
||||
POP DE
|
||||
LD A,E
|
||||
AND A
|
||||
RET
|
||||
|
||||
ELSE ;------------------------------;
|
||||
|
||||
delay_curs: EQU 11 ; ç áâ®â ¬¨£ ¨ï ªãàá®à
|
||||
INS_CUR_ZG: EQU #19
|
||||
CURSOR_ZG: EQU #1A
|
||||
NORM_ZG: EQU #1B
|
||||
|
||||
|
||||
ECHOKEY: CALL Cursor_On ; ¢ª«. ªãàá®à, ãáâ ®¢¨âì 䮪ãá "Input Line"
|
||||
EI
|
||||
.loop: CALL SCANKEY
|
||||
JR Z,.loop
|
||||
PUSH DE
|
||||
PUSH BC
|
||||
PUSH AF
|
||||
CALL Cursor_Off ; ¢ëª«. ªãàá®à
|
||||
POP AF
|
||||
OR A ; ¤®¡ ¢¨«
|
||||
CALL NZ,PUTCHAR ; ¢ë¢®¤ "a" íªà
|
||||
POP BC
|
||||
POP DE
|
||||
LD A,E
|
||||
AND A
|
||||
RET
|
||||
|
||||
Cursor:
|
||||
.Flag+1: LD A,0 ; ä« £ ªãàá®à 00-¥â/01-¥áâì
|
||||
CPL
|
||||
LD (.Flag),A
|
||||
; ‚ª«îç¨âì ªãàá®à
|
||||
Cursor_On: LD C,BIOS.LP_GET_PLACE ; ã§ âì ¯®«®¦. ªãàá®à
|
||||
RST ToBIOS
|
||||
LD (Cursor_Off.pos),DE
|
||||
XOR A
|
||||
LD C,BIOS.WIN_GET_SYM ; ¯®«ãç¨âì ᨬ¢®«
|
||||
RST ToBIOS
|
||||
LD BC,NORM_ZG*256+BIOS.WIN_PUT_SYM ; b=§ ª®£¥., á=ᨬ¢®« íªà
|
||||
LD A,(Cursor.Flag)
|
||||
OR A
|
||||
JR Z,.put
|
||||
LD B,CURSOR_ZG ; ç¥àâ
|
||||
LD A,(KEYFLAG) ; ä« £¨ ª« ¢ë
|
||||
BIT 1,A ; ¡¨â Ins
|
||||
JR NZ,.put
|
||||
LD B,INS_CUR_ZG ; ¡«®ª
|
||||
.put: XOR A ; ®¬¥à ®ª
|
||||
RST ToBIOS
|
||||
LD A,1
|
||||
LD (Cursor_Off.Flag),A
|
||||
LD A,delay_curs
|
||||
RET
|
||||
|
||||
; ‚몫îç¨âì ªãàá®à
|
||||
Cursor_Off:
|
||||
.Flag+1: LD A,0 ; ä« £ ªãàá®à : 00-¢ëª«/01-¢ª«
|
||||
OR A
|
||||
RET Z
|
||||
LD A,-1 ; = #FF
|
||||
LD (Cursor.Flag),A
|
||||
INC A
|
||||
LD (.Flag),A
|
||||
LD A,delay_curs
|
||||
LD (cursor_interrupt.timer),A
|
||||
.pos+1: LD DE,0 ; Y/X ¯®«®¦.
|
||||
BIT 7,E
|
||||
RET NZ
|
||||
LD C,BIOS.WIN_GET_SYM ; ¯®«ãç¨âì ᨬ¢®«
|
||||
XOR A
|
||||
RST ToBIOS
|
||||
XOR A
|
||||
LD BC,NORM_ZG*256+BIOS.WIN_PUT_SYM ; ᨬ¢®« íªà
|
||||
RST ToBIOS
|
||||
RET
|
||||
|
||||
; ‚¥ªâ®à ®¡á«ã¦¨¢ ¨ï ªãàá®à
|
||||
cursor_interrupt:
|
||||
LD A,(Cursor_Off.Flag)
|
||||
OR A
|
||||
RET Z
|
||||
.timer+1: LD A,1 ; ¯ ã§ ¬¨£ ¨ï
|
||||
DEC A
|
||||
CALL Z,Cursor
|
||||
LD (.timer),A
|
||||
RET
|
||||
|
||||
; <20> áâனª § ª®£¥¥à â®à ªãàá®à ç¥àâ®çª®©
|
||||
SETUP_CURSORS:
|
||||
in a,(SLOT2)
|
||||
push af ; á®åà. ¯®àâ
|
||||
ld a,(BANKTBL+TXTPAGE) ; 2-© «®£. ®¬¥à áâà ¨æë à áè. „Ž‘
|
||||
out (SLOT2),a
|
||||
; ¯®«ãç¨âì á¨áâ. § ª®£¥.
|
||||
ld de,#8000 ;!HARDCODE ¡ãä¥à ¤«ï 2048 ¡ ©â ¤ ëå
|
||||
push de
|
||||
ld c,BIOS.WIN_GET_ZG ; ¯®«ãç¨âì § ª®£¥.
|
||||
rst ToBIOS
|
||||
; § ¯®«¨âì ª®¤®¬ #FF 2 ¨¦¨¥ «¨¨¨
|
||||
ld hl,#8000+(2048-(2*256)) ;!HARDCODE ¯®á«¥¤¨¥ 512 ¡ ©â
|
||||
ld bc,511
|
||||
ld a,CURSOR_ZG; ; ®¬¥à § ª®£¥. "ç¥àâ®çª "
|
||||
call .fill_data_font
|
||||
pop hl
|
||||
; § ¯®«¨âì ®áâ «ìë¥ 6 «¨¨© (¯®«ë© ¡«®ª)
|
||||
ld bc,2048-513 ;!HARDCODE
|
||||
ld a,INS_CUR_ZG ; ®¬¥à § ª®£¥. "¡«®ª"
|
||||
call .fill_data_font
|
||||
pop af
|
||||
out (SLOT2),a ; ¢®ááâ. ¯®àâ
|
||||
ret
|
||||
; <20> áâனª § ª®£¥. ¨ ¥£® ॣ¨áâà æ¨ï
|
||||
; ¢å®¤: a=®¬¥à § ª®£¥.
|
||||
; hl=¤ ë¥
|
||||
; bc=à §¬¥à ¤ ëå
|
||||
.fill_data_font:
|
||||
ld e,l
|
||||
ld d,h
|
||||
ld (hl),#FF
|
||||
inc de
|
||||
ldir
|
||||
ld de,#8000 ; § ª®£¥.
|
||||
ld c,BIOS.WIN_SET_ZG ; ãáâ. § ª®£¥.
|
||||
rst ToBIOS
|
||||
ret
|
||||
;
|
||||
ENDIF ;------------------------------;
|
||||
|
||||
|
||||
|
||||
CTRLKEY LD HL,HOST
|
||||
LD A,(HEAD)
|
||||
CP (HL)
|
||||
LD BC,(KEYFLAG)
|
||||
LD A,#00
|
||||
RET Z
|
||||
DEC A
|
||||
RET
|
||||
|
||||
TESTKEY LD HL,HOST
|
||||
LD A,(HEAD)
|
||||
CP (HL)
|
||||
RET Z
|
||||
LD L,(HL)
|
||||
LD H,SBUF/256
|
||||
LD E,(HL)
|
||||
INC L
|
||||
LD D,(HL)
|
||||
INC L
|
||||
LD B,(HL)
|
||||
INC L
|
||||
LD C,(HL)
|
||||
LD A,E
|
||||
RET
|
||||
|
||||
; K_CLEAR LD A,(HOST)
|
||||
; LD (HEAD),A
|
||||
; LD A,#2F
|
||||
; CP B
|
||||
; JR C,K_C2
|
||||
; LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||
; SCF
|
||||
; RET
|
||||
|
||||
; K_C2 LD A,#34 ;R02
|
||||
; CP B
|
||||
; JR NC,K_C3
|
||||
; LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||
; SCF
|
||||
; RET
|
||||
|
||||
; K_C3 LD C,B
|
||||
; RST #10
|
||||
; RET
|
||||
|
||||
;small optimization
|
||||
K_CLEAR LD A,(HOST)
|
||||
LD (HEAD),A
|
||||
LD A,#2F
|
||||
CP B
|
||||
JR NC,.error
|
||||
LD A,#34 ;R02
|
||||
CP B
|
||||
JR C,.error
|
||||
LD C,B
|
||||
JP #10
|
||||
.error: LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
|
||||
PUTSYM LD HL,HEAD
|
||||
LD A,(HOST)
|
||||
SUB 4
|
||||
AND #3F
|
||||
CP (HL)
|
||||
JR Z,FULL_BF
|
||||
LD A,(HL)
|
||||
INC (HL)
|
||||
INC (HL)
|
||||
INC (HL)
|
||||
INC (HL)
|
||||
RES 6,(HL)
|
||||
LD L,A
|
||||
LD H,SBUF/256
|
||||
LD (HL),E
|
||||
INC L
|
||||
LD (HL),D
|
||||
INC L
|
||||
LD (HL),B
|
||||
INC L
|
||||
LD (HL),C
|
||||
RET
|
||||
|
||||
GETSYM LD HL,HOST
|
||||
LD A,(HEAD)
|
||||
CP (HL)
|
||||
RET Z
|
||||
LD A,(HL)
|
||||
INC (HL)
|
||||
INC (HL)
|
||||
INC (HL)
|
||||
INC (HL)
|
||||
RES 6,(HL)
|
||||
LD L,A
|
||||
LD H,SBUF/256
|
||||
LD E,(HL)
|
||||
INC L
|
||||
LD D,(HL)
|
||||
INC L
|
||||
LD B,(HL)
|
||||
INC L
|
||||
LD C,(HL)
|
||||
RET
|
||||
|
||||
FULL_BF EX AF,AF'
|
||||
BIT SF_BUFF,(IX+SOUND_K)
|
||||
JR Z,FBF
|
||||
EXX
|
||||
LD DE,230
|
||||
LD HL,50
|
||||
CALL BEEP
|
||||
EXX
|
||||
FBF EX AF,AF'
|
||||
RET
|
||||
|
||||
E0_KEY SET FLAG_E0,(IX+KEYFLG)
|
||||
JR RESCAN
|
||||
|
||||
F0_KEY SET FLAG_F0,(IX+KEYFLG)
|
||||
JR RESCAN
|
||||
|
||||
E1_KEY SET FLAG_E1,(IX+KEYFLG)
|
||||
JR RESCAN
|
||||
|
||||
KEYSCAN LD IX,KEYFLAG
|
||||
|
||||
RESCAN IN A,(COM_A)
|
||||
BIT 0,A
|
||||
RET Z
|
||||
IN A,(DAT_A)
|
||||
CP #F0
|
||||
JR Z,F0_KEY
|
||||
CP #E0
|
||||
JR Z,E0_KEY
|
||||
CP #E1
|
||||
JR Z,E1_KEY
|
||||
BIT FLAG_F0,(IX+KEYFLG)
|
||||
JR NZ,UN_KEY
|
||||
LD L,A
|
||||
CALL XLAT
|
||||
CALL SHIFTS
|
||||
RES FLAG_E0,(IX+KEYFLG)
|
||||
RES FLAG_E1,(IX+KEYFLG)
|
||||
RET Z ;IT'S SHIFT KEY
|
||||
|
||||
CALL INPCODE ;L - AT POS. CODE
|
||||
PUTCODE:
|
||||
LD HL,#1C00 ;Caps Lock
|
||||
AND A
|
||||
SBC HL,DE
|
||||
CALL Z,CAPS_X
|
||||
LD HL,#B800 ;Ctrl + Space
|
||||
AND A
|
||||
SBC HL,DE
|
||||
CALL Z,RUS_X
|
||||
LD HL,#5000 ;Insert
|
||||
AND A
|
||||
SBC HL,DE
|
||||
CALL Z,INS_X
|
||||
LD HL,#4900 ;Num Lock
|
||||
AND A
|
||||
SBC HL,DE
|
||||
CALL Z,NUM_X
|
||||
LD HL,#C900 ;Pause Lock
|
||||
AND A
|
||||
SBC HL,DE
|
||||
CALL Z,PAUSE_X
|
||||
LD HL,#4800 ;Scroll Lock
|
||||
AND A
|
||||
SBC HL,DE
|
||||
CALL Z,SCL_X
|
||||
|
||||
;small optimization
|
||||
; LD HL,#CF00 ;Ctrl + Alt + Del
|
||||
; AND A
|
||||
; SBC HL,DE
|
||||
; CALL Z,RST_X
|
||||
;;;
|
||||
LD BC,(KEYFLAG)
|
||||
CALL PUTSYM
|
||||
RET
|
||||
|
||||
UN_KEY RES FLAG_F0,(IX+KEYFLG)
|
||||
LD L,A
|
||||
CALL XLAT
|
||||
CALL UNSHIFT
|
||||
RES FLAG_E0,(IX+KEYFLG)
|
||||
LD H,0
|
||||
LD (UNCODE),HL
|
||||
RET
|
||||
|
||||
CAPS_X LD A,(IX+K_LOCK)
|
||||
XOR 1<<CAPS_L
|
||||
LD (IX+K_LOCK),A
|
||||
RET
|
||||
|
||||
RUS_X BIT X_CTRL,(IX+K_SHIFT)
|
||||
RET Z
|
||||
LD A,(IX+K_LOCK)
|
||||
XOR 1<<LANG_L
|
||||
LD (IX+K_LOCK),A
|
||||
BIT SF_ALT,(IX+SOUND_K)
|
||||
RET Z
|
||||
EXX
|
||||
LD DE,190
|
||||
LD HL,20
|
||||
CALL BEEP
|
||||
EXX
|
||||
RET
|
||||
|
||||
INS_X LD A,(IX+K_LOCK)
|
||||
XOR 1<<INS_L
|
||||
LD (IX+K_LOCK),A
|
||||
RET
|
||||
|
||||
NUM_X LD A,(IX+K_LOCK)
|
||||
XOR 1<<NUM_L
|
||||
LD (IX+K_LOCK),A
|
||||
RET
|
||||
|
||||
PAUSE_X BIT X_CTRL,(IX+K_SHIFT)
|
||||
RET Z
|
||||
POP HL ;!!!!! “ ‘ ©¬ ã¡à POP
|
||||
LD A,(IX+K_LOCK)
|
||||
XOR 1<<PAUSE_L
|
||||
LD (IX+K_LOCK),A
|
||||
BIT PAUSE_L,A
|
||||
RET Z
|
||||
EI
|
||||
PAUSE_ HALT
|
||||
BIT PAUSE_L,(IX+K_LOCK)
|
||||
JR NZ,PAUSE_
|
||||
DI
|
||||
RET
|
||||
|
||||
SCL_X LD A,(IX+K_LOCK)
|
||||
XOR 1<<SCRL_L
|
||||
LD (IX+K_LOCK),A
|
||||
RET
|
||||
|
||||
;small optimization
|
||||
; RST_X BIT X_CTRL,(IX+K_SHIFT)
|
||||
; RET Z
|
||||
; BIT X_ALT,(IX+K_SHIFT)
|
||||
; RET Z
|
||||
; XOR A
|
||||
; LD BC,#01FD
|
||||
; RST ToBIOS
|
||||
; RET
|
||||
;;;
|
||||
|
||||
UNSHIFT LD A,L
|
||||
CP #37 ;L ALT
|
||||
JR NZ,USH1
|
||||
RES L_ALT,(IX+K_SHIFT)
|
||||
BIT R_ALT,(IX+K_SHIFT)
|
||||
RET NZ
|
||||
RES X_ALT,(IX+K_SHIFT)
|
||||
RET
|
||||
USH1 CP #39 ;R ALT
|
||||
JR NZ,USH2
|
||||
RES R_ALT,(IX+K_SHIFT)
|
||||
BIT L_ALT,(IX+K_SHIFT)
|
||||
RET NZ
|
||||
RES X_ALT,(IX+K_SHIFT)
|
||||
RET
|
||||
USH2 CP #36 ;L CTRL
|
||||
JR NZ,USH3
|
||||
RES L_CTRL,(IX+K_SHIFT)
|
||||
BIT R_CTRL,(IX+K_SHIFT)
|
||||
RET NZ
|
||||
RES X_CTRL,(IX+K_SHIFT)
|
||||
RET
|
||||
USH3 CP #3A ;R CTRL
|
||||
JR NZ,USH4
|
||||
RES R_CTRL,(IX+K_SHIFT)
|
||||
BIT L_CTRL,(IX+K_SHIFT)
|
||||
RET NZ
|
||||
RES X_CTRL,(IX+K_SHIFT)
|
||||
RET
|
||||
USH4 CP #29 ;L SHIFT
|
||||
JR NZ,USH5
|
||||
RES L_SHIFT,(IX+K_SHIFT)
|
||||
RET
|
||||
USH5 CP #34 ;R SHIFT
|
||||
JR NZ,USH6
|
||||
RES R_SHIFT,(IX+K_SHIFT)
|
||||
USH6 RET
|
||||
|
||||
SHIFTS LD A,L
|
||||
CP #37 ;L ALT
|
||||
JR NZ,NSH1
|
||||
SET L_ALT,(IX+K_SHIFT)
|
||||
SET X_ALT,(IX+K_SHIFT)
|
||||
RET
|
||||
NSH1 CP #39 ;R ALT
|
||||
JR NZ,NSH2
|
||||
SET R_ALT,(IX+K_SHIFT)
|
||||
SET X_ALT,(IX+K_SHIFT)
|
||||
RET
|
||||
NSH2 CP #36 ;L CTRL
|
||||
JR NZ,NSH3
|
||||
SET L_CTRL,(IX+K_SHIFT)
|
||||
SET X_CTRL,(IX+K_SHIFT)
|
||||
RET
|
||||
NSH3 CP #3A ;R CTRL
|
||||
JR NZ,NSH4
|
||||
SET R_CTRL,(IX+K_SHIFT)
|
||||
SET X_CTRL,(IX+K_SHIFT)
|
||||
RET
|
||||
NSH4 CP #29 ;L SHIFT
|
||||
JR NZ,NSH5
|
||||
SET L_SHIFT,(IX+K_SHIFT)
|
||||
RET
|
||||
NSH5 CP #34 ;R SHIFT
|
||||
JR NZ,NSH6
|
||||
SET R_SHIFT,(IX+K_SHIFT)
|
||||
NSH6 RET
|
||||
|
||||
;
|
||||
;;
|
||||
_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
|
||||
;
|
||||
XLAT BIT FLAG_E0,(IX+KEYFLG)
|
||||
JR Z,W_O_E0
|
||||
CP #11 ;Right ALT
|
||||
LD L,#39
|
||||
RET Z
|
||||
CP #14 ;Right CTRL
|
||||
LD L,#3A
|
||||
RET Z
|
||||
CP #5A ;enter
|
||||
LD L,#4E
|
||||
RET Z
|
||||
CP #4A ; /
|
||||
LD L,#4A
|
||||
RET Z
|
||||
CP #7C ; * - Print Screen
|
||||
LD L,#47
|
||||
RET Z
|
||||
LD L,A
|
||||
W_O_E0 LD H,high XLAT_T
|
||||
LD L,(HL)
|
||||
RET
|
||||
;;
|
||||
;
|
||||
|
||||
;INPCODE BIT 1,(IX+1) ;00110000
|
||||
; JR NZ,FN_KEY ;LRCAcaRP
|
||||
INPCODE LD D,L
|
||||
LD E,0
|
||||
BIT LANG_L,(IX+K_LOCK)
|
||||
JP NZ,RUSCODE
|
||||
LD A,(IX+K_SHIFT)
|
||||
AND #C0
|
||||
JR NZ,SHIFT_L
|
||||
SET 7,D
|
||||
BIT X_ALT,(IX+K_SHIFT)
|
||||
RET NZ
|
||||
BIT X_CTRL,(IX+K_SHIFT)
|
||||
RET NZ
|
||||
LD D,L
|
||||
BIT CAPS_L,(IX+K_LOCK)
|
||||
LD BC,CAPSTAB
|
||||
JR NZ,CONVER
|
||||
LD BC,NORMTAB
|
||||
CONVER LD H,0
|
||||
ADD HL,BC
|
||||
LD E,(HL)
|
||||
RET
|
||||
|
||||
SHIFT_L LD BC,SHIFTAB
|
||||
BIT CAPS_L,(IX+K_LOCK)
|
||||
JR Z,CONVER5
|
||||
LD BC,SHF2TAB
|
||||
CONVER5 LD H,0
|
||||
ADD HL,BC
|
||||
LD E,(HL)
|
||||
SET 7,D
|
||||
RET
|
||||
|
||||
RUSCODE LD A,(IX+K_SHIFT)
|
||||
AND #C0
|
||||
JR NZ,SHIFT_R
|
||||
SET 7,D
|
||||
BIT X_ALT,(IX+K_SHIFT)
|
||||
RET NZ
|
||||
BIT X_CTRL,(IX+K_SHIFT)
|
||||
RET NZ
|
||||
LD D,L
|
||||
BIT CAPS_L,(IX+K_LOCK)
|
||||
LD BC,CAPSRUS
|
||||
JR NZ,CONVER2
|
||||
LD BC,NORMRUS
|
||||
CONVER2 LD H,0
|
||||
ADD HL,BC
|
||||
LD E,(HL)
|
||||
RET
|
||||
|
||||
SHIFT_R LD BC,SHIFRUS
|
||||
BIT CAPS_L,(IX+K_LOCK)
|
||||
JR Z,CONVER4
|
||||
LD BC,SHF2RUS
|
||||
CONVER4 LD H,0
|
||||
ADD HL,BC
|
||||
LD E,(HL)
|
||||
SET 7,D
|
||||
RET
|
||||
|
||||
K_SETUP INC B
|
||||
DEC B
|
||||
JP Z,KEYMAP
|
||||
DEC B
|
||||
JP Z,K_SND_R
|
||||
DEC B
|
||||
JP Z,K_SND_W
|
||||
LD A,DSS_Error.sys.INVALID_ACCESS
|
||||
SCF
|
||||
RET
|
||||
|
||||
K_SND_R LD A,(SOUND_K)
|
||||
AND A
|
||||
RET
|
||||
|
||||
K_SND_W LD (SOUND_K),A
|
||||
AND A
|
||||
RET
|
||||
|
||||
KEYMAP LD BC,ENDNORM-NORMTAB
|
||||
BIT 7,A
|
||||
JR NZ,READMAP
|
||||
LD DE,NORMTAB
|
||||
OR A
|
||||
JR Z,LTAB
|
||||
LD DE,SHIFTAB
|
||||
DEC A
|
||||
JR Z,LTAB
|
||||
LD DE,CAPSTAB
|
||||
DEC A
|
||||
JR Z,LTAB
|
||||
LD DE,SHF2TAB
|
||||
DEC A
|
||||
JR Z,LTAB
|
||||
LD DE,NORMRUS
|
||||
DEC A
|
||||
JR Z,LTAB
|
||||
LD DE,SHIFRUS
|
||||
DEC A
|
||||
JR Z,LTAB
|
||||
LD DE,CAPSRUS
|
||||
DEC A
|
||||
JR Z,LTAB
|
||||
LD DE,SHF2RUS
|
||||
DEC A
|
||||
JR Z,LTAB
|
||||
XOR A ; ????? ¬®¦¥â âãâ ¤® .INVALID_COMMAND ?
|
||||
SCF
|
||||
RET
|
||||
LTAB LDIR
|
||||
XOR A
|
||||
RET
|
||||
|
||||
READMAP RES 7,A
|
||||
LD DE,NORMTAB
|
||||
OR A
|
||||
JR Z,RTAB
|
||||
LD DE,SHIFTAB
|
||||
DEC A
|
||||
JR Z,RTAB
|
||||
LD DE,CAPSTAB
|
||||
DEC A
|
||||
JR Z,RTAB
|
||||
LD DE,SHF2TAB
|
||||
DEC A
|
||||
JR Z,RTAB
|
||||
LD DE,NORMRUS
|
||||
DEC A
|
||||
JR Z,RTAB
|
||||
LD DE,SHIFRUS
|
||||
DEC A
|
||||
JR Z,RTAB
|
||||
LD DE,CAPSRUS
|
||||
DEC A
|
||||
JR Z,RTAB
|
||||
LD DE,SHF2RUS
|
||||
DEC A
|
||||
JR Z,RTAB
|
||||
XOR A ; ????? ¬®¦¥â âãâ ¤® .INVALID_COMMAND ?
|
||||
SCF
|
||||
RET
|
||||
RTAB EX DE,HL
|
||||
LDIR
|
||||
XOR A
|
||||
RET
|
||||
|
||||
; `
|
||||
; 0
|
||||
; Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Back
|
||||
; 1 2 3 4 5 6 7 8 9 A B C D E
|
||||
; Tab,"Q","W","E","R","T","Y","U","I","O","P","[","]"
|
||||
; F 10 11 12 13 14 15 16 17 18 19 1A 1B
|
||||
; Cps,"A","S","D","F","G","H","J","K","L",";","'",Enter
|
||||
; 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28
|
||||
; LSh,"Z","X","C","V","B","N","M",",",".","/",RSh,#5C
|
||||
; 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35
|
||||
; LCl,LAt,SPC,Rat,RCl,F01,F02,F03,F04,F05,F06,F07,F08
|
||||
; 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42
|
||||
; F09,F10,F11,F12,prn,scr,num,"/","*","-","+",ent,Del
|
||||
; 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
|
||||
; Ins,End,Dwn,PgD,Lft,"5",Rgh,Hom,Upp,PgU
|
||||
; 50 51 52 53 54 55 56 57 58 59
|
||||
;
|
||||
;================================
|
||||
Esc EQU #1B
|
||||
Bcs EQU #08
|
||||
Tab EQU #09
|
||||
Cps EQU #00
|
||||
Spc EQU #20
|
||||
Ent EQU #0D
|
||||
|
||||
;Standart ASCII tables
|
||||
NORMTAB DB "`",Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
|
||||
DB Tab,"q","w","e","r","t","y","u","i","o","p","[","]"
|
||||
DB Cps,"a","s","d","f","g","h","j","k","l",";","'",Ent
|
||||
DB #00,"z","x","c","v","b","n","m",#2C,".","/",#00,#5C
|
||||
DB #00,#00,Spc,#00,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
ENDNORM
|
||||
|
||||
SHIFTAB DB "~",Esc,"!","@","#","$","%","^","&","*","(",")","_","+",Bcs
|
||||
DB Tab,"Q","W","E","R","T","Y","U","I","O","P","{","}"
|
||||
DB Cps,"A","S","D","F","G","H","J","K","L",":",#22,Ent
|
||||
DB #00,"Z","X","C","V","B","N","M","<",">","?",#00,"|"
|
||||
DB #00,#00,Spc,#00,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
|
||||
CAPSTAB DB "`",Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
|
||||
DB Tab,"Q","W","E","R","T","Y","U","I","O","P","[","]"
|
||||
DB Cps,"A","S","D","F","G","H","J","K","L",";","'",Ent
|
||||
DB #00,"Z","X","C","V","B","N","M",#2C,".","/",#00,#5C
|
||||
DB #00,#00,Spc,#00,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
|
||||
SHF2TAB DB "~",Esc,"!","@","#","$","%","^","&","*","(",")","_","+",Bcs
|
||||
DB Tab,"q","w","e","r","t","y","u","i","o","p","{","}"
|
||||
DB Cps,"a","s","d","f","g","h","j","k","l",":",#22,Ent
|
||||
DB #00,"z","x","c","v","b","n","m","<",">","?",#00,"|"
|
||||
DB #00,#00,Spc,#00,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
|
||||
;Standart Russian tables
|
||||
NORMRUS DB #F1,Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
|
||||
DB Tab,#A9,#E6,#E3,#AA,#A5,#AD,#A3,#E8,#E9,#A7,#E5,#EA
|
||||
DB Cps,#E4,#EB,#A2,#A0,#AF,#E0,#AE,#AB,#A4,#A6,#ED,Ent
|
||||
DB #00,#EF,#E7,#E1,#AC,#A8,#E2,#EC,#A1,#EE,".",#00,#5C
|
||||
DB #00,#00,Spc,#00,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
|
||||
SHIFRUS DB #F0,Esc,"!",#22,"#","$",":",#2C,".",";","?","%","_","+",Bcs
|
||||
DB Tab,#89,#96,#93,#8A,#85,#8D,#83,#98,#99,#87,#95,#9A
|
||||
DB Cps,#94,#9B,#82,#80,#8F,#90,#8E,#8B,#84,#86,#9D,Ent
|
||||
DB #00,#9F,#97,#91,#8C,#88,#92,#9C,#81,#9E,#2C,#00,"|"
|
||||
DB #00,#00,Spc,#00,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
|
||||
CAPSRUS DB #F0,Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs
|
||||
DB Tab,#89,#96,#93,#8A,#85,#8D,#83,#98,#99,#87,#95,#9A
|
||||
DB Cps,#94,#9B,#82,#80,#8F,#90,#8E,#8B,#84,#86,#9D,Ent
|
||||
DB #00,#9F,#97,#91,#8C,#88,#92,#9C,#81,#9E,".",#00,#5C
|
||||
DB #00,#00,Spc,#00,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
|
||||
SHF2RUS DB #F1,Esc,"!",#22,"#","$",":",#2C,".",";","?","%","_","+",Bcs
|
||||
DB Tab,#A9,#E6,#E3,#AA,#A5,#AD,#A3,#E8,#E9,#A7,#E5,#EA
|
||||
DB Cps,#E4,#EB,#A2,#A0,#AF,#E0,#AE,#AB,#A4,#A6,#ED,Ent
|
||||
DB #00,#EF,#E7,#E1,#AC,#A8,#E2,#EC,#A1,#EE,#2C,#00,"|"
|
||||
DB #00,#00,Spc,#00,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
DB #00,#00,#00,"/","*","-","+",Ent,#00
|
||||
DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00
|
||||
|
||||
;================================
|
||||
|
||||
BEEP LD A,#10
|
||||
OUT (#FE),A
|
||||
LD B,D
|
||||
LD C,E
|
||||
BPP DEC BC
|
||||
LD A,B
|
||||
OR C
|
||||
JR NZ,BPP
|
||||
LD A,#00
|
||||
OUT (#FE),A
|
||||
LD B,D
|
||||
LD C,E
|
||||
BPP2 DEC BC
|
||||
LD A,B
|
||||
OR C
|
||||
JR NZ,BPP2
|
||||
DEC HL
|
||||
LD A,H
|
||||
OR L
|
||||
JR NZ,BEEP
|
||||
RET
|
||||
|
||||
COM_A EQU #19 ;!FIXIT sp2000.inc
|
||||
DAT_A EQU #18 ;!FIXIT sp2000.inc
|
||||
|
||||
KINIT XOR A ;LD A,0
|
||||
OUT (COM_A),A
|
||||
INC A ;LD A,1
|
||||
OUT (COM_A),A
|
||||
XOR A ;LD A,0 ;#18
|
||||
OUT (COM_A),A
|
||||
LD A,3
|
||||
OUT (COM_A),A
|
||||
LD A,#C1
|
||||
OUT (COM_A),A
|
||||
LD A,4
|
||||
OUT (COM_A),A
|
||||
LD A,#07 ;#05
|
||||
OUT (COM_A),A
|
||||
LD A,5
|
||||
OUT (COM_A),A
|
||||
LD A,#62
|
||||
OUT (COM_A),A
|
||||
RET
|
||||
|
||||
;//MODULE: KEYINTER
|
||||
;[END]
|
||||
12
DSS/KNOWN.BUG
Normal file
12
DSS/KNOWN.BUG
Normal file
@ -0,0 +1,12 @@
|
||||
+ function WINCOPY & WINREST не запрещают прерывания перед вызовом BIOS (используется вывод стеком!).
|
||||
|
||||
- при выводе на консоль длинного текста, экран не скролируется. Проверять на достижение 80 позиции!
|
||||
|
||||
+ ошибка в функции SCROLL A=0.
|
||||
|
||||
+ ошибка при просмотре каталога в функциях установки атрибутов пропускаются системные файлы. п/п SEARCH MASK=#23
|
||||
|
||||
- игнорирование ошибок при записи системных областей FAT/DIR, невозможность отработать ошибку write-protect, так как она теряется при попытке записать измененный каталог на диск. Но возникает ошибка file not found так как сразо после создания система открывает файл.
|
||||
|
||||
- ошибка разбора допустимого имени файла, если оно состоит из "." так как подрузомевается пробелы точка пробелы.
|
||||
|
||||
613
DSS/RAM_DRV0.ASM
Normal file
613
DSS/RAM_DRV0.ASM
Normal file
@ -0,0 +1,613 @@
|
||||
;
|
||||
; 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
Normal file
477
DSS/RAM_DRV1.ASM
Normal file
@ -0,0 +1,477 @@
|
||||
|
||||
|
||||
; 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 $
|
||||
;
|
||||
67
DSS/Structures.inc
Normal file
67
DSS/Structures.inc
Normal file
@ -0,0 +1,67 @@
|
||||
;
|
||||
STRUCT _sStack ; 256 bytes
|
||||
buffer BLOCK 255,0
|
||||
SPoint BYTE 0
|
||||
ENDS
|
||||
;
|
||||
|
||||
;
|
||||
STRUCT _sEXE_HEADER ; 512 bytes
|
||||
EXE_EXT TEXT 3,{"EX","E"}
|
||||
VERSION BYTE 0
|
||||
OFFCOD1 WORD 0
|
||||
OFFCOD2 WORD 0
|
||||
LOADER WORD 0
|
||||
RESERVED BLOCK 6,0
|
||||
LD_ADDR WORD 0
|
||||
PC_REG WORD 0
|
||||
SP_REG WORD 0
|
||||
RESERVED2 BLOCK 490,0
|
||||
ENDS
|
||||
;
|
||||
|
||||
;File Manipulator (FM)
|
||||
STRUCT _sFM ; 44 bytes
|
||||
.NAME: TEXT 8,{". "," "} ;+00 NAME
|
||||
.EXT: TEXT 3,{" "," "} ;+08 EXT
|
||||
.ATTRIBUT: BYTE #10 ;+11 ATTRIBUT
|
||||
.RESERVED_L: BYTE 0 ;+12 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï ç⥨ï
|
||||
.RESERVED_H: BYTE 0 ;+13 RESERVED; !TODO á«¥¤ãî騩 ª« áâ¥à ¤«ï § ¯¨á¨
|
||||
.RESERVED_X: BLOCK 8,0 ;+14 RESERVED
|
||||
.TIME: WORD #0000 ;+22 TIME
|
||||
.DATE: WORD #0000 ;+24 DATE
|
||||
.ST_CLUSTER: WORD #0000 ;+26 START CLUSTER
|
||||
.F_SIZE: DWORD #0000 ;+28 SIZE FILE
|
||||
.F_POSITION: DWORD #0000 ;+32 FILE POSITION (FP)
|
||||
.DIR_CLUSTER: WORD #0000 ;+36 DIRECTORY CLUSTER
|
||||
.HANDLE: WORD #0000 ;+38 HANDLE NUMBER
|
||||
.DRIVE: BYTE #00 ;+40 DRIVE OR CURRENT
|
||||
.ACCESS_MODE: BYTE #00 ;+41 ACCESS MODE
|
||||
.TASK_NUM: BYTE #00 ;+42 TASK
|
||||
.EMPTY: BYTE #00 ;+43 EMPTY
|
||||
ENDS
|
||||
;
|
||||
; NAM EQU 0 ; LEN4 EQU 31
|
||||
; EXT EQU 8 ; POS1 EQU 32
|
||||
; ATR EQU 11 ; POS2 EQU 33
|
||||
; TIM1 EQU 22 ; POS3 EQU 34
|
||||
; TIM2 EQU 23 ; POS4 EQU 35
|
||||
; DAT1 EQU 24 ; DIRCLU1 EQU 36
|
||||
; DAT2 EQU 25 ; DIRCLU2 EQU 37
|
||||
; CLU1 EQU 26 ; HND1 EQU 38
|
||||
; CLU2 EQU 27 ; HND2 EQU 39
|
||||
; LEN1 EQU 28 ; FDRV EQU 40
|
||||
; LEN2 EQU 29 ; AMODE EQU 41
|
||||
; LEN3 EQU 30 ; FTASK EQU 42
|
||||
|
||||
;
|
||||
STRUCT _sBuffers
|
||||
FileManipulator _sFM ; 44 bytes * FMCOUNT
|
||||
FM_RESERVE BLOCK _sFM * (FMCOUNT-1),0
|
||||
BootSector _sBOOT_SEC ; 62 bytes ;!TODO ¯¥à¥¥á⨠¢ ®¡« áâì ¡ãä¥à®¢
|
||||
EXE_Header _sEXE_HEADER ; 512 bytes
|
||||
Stack _sStack ; 256 bytes
|
||||
Buffer BLOCK 512,0 ; FOR BUFFER & SECBUF
|
||||
MemoryTable BLOCK 256,0 ; 256 bytes
|
||||
ENDS
|
||||
;
|
||||
24
DSS/VERSION.INC
Normal file
24
DSS/VERSION.INC
Normal file
@ -0,0 +1,24 @@
|
||||
;
|
||||
; DSS Version
|
||||
VERS EQU 01 ;Version Number (XX.)
|
||||
MODF EQU 70 ;Modification (.xx)
|
||||
BUILD EQU 1
|
||||
;
|
||||
|
||||
; Release Types
|
||||
RELEASE EQU 0
|
||||
RC EQU 1
|
||||
BETA EQU 2
|
||||
DP EQU 3
|
||||
;
|
||||
|
||||
; Bulid Type
|
||||
OSTYPE EQU BETA
|
||||
REVISION EQU 1
|
||||
;
|
||||
|
||||
; Default date
|
||||
DAY EQU 30
|
||||
MONTH EQU 03
|
||||
YEAR EQU 2023
|
||||
;
|
||||
682
DSS/VIDEO.ASM
Normal file
682
DSS/VIDEO.ASM
Normal file
@ -0,0 +1,682 @@
|
||||
|
||||
;[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]
|
||||
36
DSS/defines.inc
Normal file
36
DSS/defines.inc
Normal file
@ -0,0 +1,36 @@
|
||||
;
|
||||
DEFINE TEST_FEATURE 1
|
||||
;
|
||||
|
||||
;
|
||||
DEFINE SHORT_RSTx10_TABLE 0 ; 㪮à®ç¥ ï â ¡«¨æ äãªæ¨© rst #10. 96 äãªæ¨©.
|
||||
;
|
||||
|
||||
;
|
||||
DEFINE MAX_RAMDRIVES 16
|
||||
DEFINE NeedSafePort_Y 1
|
||||
DEFINE TABisSPACES 1
|
||||
DEFINE CLASSIC_CURSOR 0
|
||||
;
|
||||
;-------------------[MEMORY]-------------------------;
|
||||
DEFINE USING_MEMPAGES 4
|
||||
|
||||
;!FIXIT ᤥ« âì ⨯ DIRPAGE EQU 0 + BANKTBL ¨ ã¯à®áâ¨âì BANK
|
||||
DIRPAGE EQU 0
|
||||
FATPAGE EQU 1
|
||||
TXTPAGE EQU 2
|
||||
ENVPAGE EQU 2
|
||||
DRVPAGE EQU 3
|
||||
;
|
||||
|
||||
DIRSPEC.DEPTH EQU 256 ; '\' + 1..255
|
||||
|
||||
TXTADDR EQU #C000
|
||||
ENVADDR EQU #E400
|
||||
DIR EQU #C000
|
||||
FAT EQU #C000
|
||||
|
||||
FMCOUNT EQU 10 ; Š®«¨ç¥á⢮ ä ©«®¢ëå ¬ ¨¯ã«ïâ®à®¢
|
||||
HANDBUF.SIZE EQU 32
|
||||
;----------------------------------------------------;
|
||||
;
|
||||
1
Shared_Includes
Submodule
1
Shared_Includes
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 6e27011b6259b0256ce65d91a53ef1185223eafa
|
||||
Loading…
Reference in New Issue
Block a user