mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +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