Compare commits
2 Commits
21b636c181
...
21c3c59489
Author | SHA1 | Date |
---|---|---|
Juhani Krekelä | 21c3c59489 | |
Juhani Krekelä | d47321c53b |
94
edlin.asm
94
edlin.asm
|
@ -21,29 +21,39 @@ sys_set_dta equ 0x1a
|
||||||
sys_block_read equ 0x27
|
sys_block_read equ 0x27
|
||||||
|
|
||||||
; Special instruction encodings
|
; Special instruction encodings
|
||||||
%macro add_cx_ax 0
|
%define r_ax 0
|
||||||
db 0x03, 0xC8 ; add cx, ax (direction swapped)
|
%define r_cx 1
|
||||||
%endmacro
|
%define r_dx 2
|
||||||
%macro add_di_cx 0
|
%define r_bx 3
|
||||||
db 0x03, 0xF9 ; 023E add di, cx (direction swapped)
|
%define r_sp 4
|
||||||
%endmacro
|
%define r_bp 5
|
||||||
|
%define r_si 6
|
||||||
|
%define r_di 7
|
||||||
|
|
||||||
%macro or_al_al 0
|
%define r_al 0
|
||||||
db 0x0a, 0xc0 ; or al, al (direction swapped)
|
%define r_cl 1
|
||||||
%endmacro
|
%define r_dl 2
|
||||||
|
%define r_bl 3
|
||||||
|
%define r_ah 4
|
||||||
|
%define r_ch 5
|
||||||
|
%define r_dh 6
|
||||||
|
%define r_bh 7
|
||||||
|
|
||||||
%macro xor_ax_ax 0
|
; Direction swapped reg, reg
|
||||||
db 0x33, 0xc0 ; xor ax, ax (direction swapped)
|
%macro addw 2
|
||||||
|
db 0x03, 0xc0 + 8 * %1 + %2
|
||||||
%endmacro
|
%endmacro
|
||||||
|
%macro orb 2
|
||||||
%macro mov_ax_cx 0
|
db 0x0a, 0xc0 + 8 * %1 + %2
|
||||||
db 0x8b, 0xc1 ; mov ax, cx (direction swapped)
|
|
||||||
%endmacro
|
%endmacro
|
||||||
%macro mov_dx_cx 0
|
%macro subw 2
|
||||||
db 0x8b, 0xD1 ; mov dx, cx (direction swapped)
|
db 0x2b, 0xc0 + 8 * %1 + %2
|
||||||
%endmacro
|
%endmacro
|
||||||
%macro mov_di_dx 0
|
%macro xorw 2
|
||||||
db 0x8B, 0xfa ; mov di, dx (direction swapped)
|
db 0x33, 0xc0 + 8 * %1 + %2
|
||||||
|
%endmacro
|
||||||
|
%macro movw 2
|
||||||
|
db 0x8b, 0xc0 + 8 * %1 + %2
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro cmp_byteaddr_bytext 2
|
%macro cmp_byteaddr_bytext 2
|
||||||
|
@ -77,7 +87,7 @@ ensure_file_argument:
|
||||||
je print_filename_missing_error
|
je print_filename_missing_error
|
||||||
|
|
||||||
; AL at program start a flag of whether drive specifier in first parameter valid
|
; AL at program start a flag of whether drive specifier in first parameter valid
|
||||||
or_al_al
|
orb r_al, r_al
|
||||||
mov dx, invalid_name_error
|
mov dx, invalid_name_error
|
||||||
jnz _trampoline_error_1
|
jnz _trampoline_error_1
|
||||||
|
|
||||||
|
@ -93,7 +103,7 @@ open_file:
|
||||||
int 0x21
|
int 0x21
|
||||||
|
|
||||||
mov [new_file_flag], al
|
mov [new_file_flag], al
|
||||||
or_al_al
|
orb r_al, r_al
|
||||||
jz delete_old_bak
|
jz delete_old_bak
|
||||||
|
|
||||||
mov dx, new_file_str
|
mov dx, new_file_str
|
||||||
|
@ -123,7 +133,7 @@ delete_old_bak: ; 01b9
|
||||||
|
|
||||||
mov ah, sys_create_file
|
mov ah, sys_create_file
|
||||||
int 0x21
|
int 0x21
|
||||||
or_al_al
|
orb r_al, r_al
|
||||||
jz setup_file_parameters
|
jz setup_file_parameters
|
||||||
|
|
||||||
mov dx, directory_full_error
|
mov dx, directory_full_error
|
||||||
|
@ -134,7 +144,7 @@ print_bak_error: ; 01e6
|
||||||
jmp error
|
jmp error
|
||||||
|
|
||||||
setup_file_parameters: ; 01ec
|
setup_file_parameters: ; 01ec
|
||||||
xor_ax_ax
|
xorw r_ax, r_ax
|
||||||
mov [psp_fcb_1 + fcb_record_low], ax
|
mov [psp_fcb_1 + fcb_record_low], ax
|
||||||
mov [psp_fcb_1 + fcb_record_high], ax
|
mov [psp_fcb_1 + fcb_record_high], ax
|
||||||
mov [__0a58_fcb + fcb_record_low], ax
|
mov [__0a58_fcb + fcb_record_low], ax
|
||||||
|
@ -145,7 +155,7 @@ setup_file_parameters: ; 01ec
|
||||||
mov [__0a58_fcb + fcb_record_size], ax
|
mov [__0a58_fcb + fcb_record_size], ax
|
||||||
|
|
||||||
mov dx, disk_transfer_area
|
mov dx, disk_transfer_area
|
||||||
mov_di_dx
|
movw r_di, r_dx
|
||||||
mov ah, sys_set_dta
|
mov ah, sys_set_dta
|
||||||
int 0x21
|
int 0x21
|
||||||
|
|
||||||
|
@ -161,13 +171,13 @@ setup_file_parameters: ; 01ec
|
||||||
|
|
||||||
; __0a94 = ¼ available memory
|
; __0a94 = ¼ available memory
|
||||||
shr cx, 1
|
shr cx, 1
|
||||||
mov_ax_cx
|
movw r_ax, r_cx
|
||||||
shr cx, 1
|
shr cx, 1
|
||||||
mov [__0a94], cx
|
mov [__0a94], cx
|
||||||
; cx = ¾ available memory
|
; cx = ¾ available memory
|
||||||
add_cx_ax
|
addw r_cx, r_ax
|
||||||
|
|
||||||
mov_dx_cx
|
movw r_dx, r_cx
|
||||||
add dx, disk_transfer_area
|
add dx, disk_transfer_area
|
||||||
mov [__0a96], dx
|
mov [__0a96], dx
|
||||||
|
|
||||||
|
@ -175,8 +185,8 @@ read_file:
|
||||||
mov dx, psp_fcb_1
|
mov dx, psp_fcb_1
|
||||||
mov ah, sys_block_read
|
mov ah, sys_block_read
|
||||||
int 0x21
|
int 0x21
|
||||||
call __035e
|
call find_file_end_char
|
||||||
add_di_cx
|
addw r_di, r_cx
|
||||||
|
|
||||||
__0240:
|
__0240:
|
||||||
db 0xFC ; 0240 cld
|
db 0xFC ; 0240 cld
|
||||||
|
@ -300,18 +310,22 @@ db 0x17 ; 035A pop ss
|
||||||
db 0x04, 0xA6 ; 035B add al,0xa6
|
db 0x04, 0xA6 ; 035B add al,0xa6
|
||||||
db 0x08 ; 035D db 0x08
|
db 0x08 ; 035D db 0x08
|
||||||
|
|
||||||
__035e:
|
find_file_end_char: ; 035e
|
||||||
db 0x57 ; 035E push di
|
push di
|
||||||
db 0x51 ; 035F push cx
|
push cx
|
||||||
db 0xB0, 0x1A ; 0360 mov al,0x1a
|
|
||||||
db 0xF2, 0xAE ; 0362 repne scasb
|
mov al, 0x1a ; ^Z
|
||||||
db 0x8B, 0xF9 ; 0364 mov di,cx
|
repne scasb
|
||||||
db 0x59 ; 0366 pop cx
|
movw r_di, r_cx
|
||||||
db 0x9F ; 0367 lahf
|
|
||||||
db 0x2B, 0xCF ; 0368 sub cx,di
|
pop cx
|
||||||
db 0x9E ; 036A sahf
|
lahf
|
||||||
db 0x5F ; 036B pop di
|
subw r_cx, r_di
|
||||||
db 0xC3 ; 036C ret
|
sahf
|
||||||
|
|
||||||
|
pop di
|
||||||
|
ret
|
||||||
|
|
||||||
db 0xE9, 0x8E, 0x00 ; 036D jmp 0x3fe
|
db 0xE9, 0x8E, 0x00 ; 036D jmp 0x3fe
|
||||||
db 0xF6, 0x06, 0x7E, 0x0A, 0xFF ; 0370 test byte [0xa7e],0xff
|
db 0xF6, 0x06, 0x7E, 0x0A, 0xFF ; 0370 test byte [0xa7e],0xff
|
||||||
db 0x75, 0xF6 ; 0375 jnz 0x36d
|
db 0x75, 0xF6 ; 0375 jnz 0x36d
|
||||||
|
|
Loading…
Reference in New Issue