Line prefixes for listings

This commit is contained in:
Juhani Krekelä 2021-07-31 00:08:04 +03:00
parent 0b46aa1336
commit 95d5901852
1 changed files with 88 additions and 49 deletions

137
edlin.asm
View File

@ -49,6 +49,18 @@ int_ctrl_break equ 0x23
%macro addw 2
db 0x03, 0xc0 + 8 * %1 + %2
%endmacro
%macro adcb 2
db 0x12, 0xc0 + 8 * %1 + %2
%endmacro
%macro cmpw 2
db 0x3b, 0xc0 + 8 * %1 + %2
%endmacro
%macro movw 2
db 0x8b, 0xc0 + 8 * %1 + %2
%endmacro
%macro movb 2
db 0x8a, 0xc0 + 8 * %1 + %2
%endmacro
%macro orw 2
db 0x0b, 0xc0 + 8 * %1 + %2
%endmacro
@ -58,15 +70,12 @@ int_ctrl_break equ 0x23
%macro subw 2
db 0x2b, 0xc0 + 8 * %1 + %2
%endmacro
%macro subb 2
db 0x2a, 0xc0 + 8 * %1 + %2
%endmacro
%macro xorw 2
db 0x33, 0xc0 + 8 * %1 + %2
%endmacro
%macro cmpw 2
db 0x3b, 0xc0 + 8 * %1 + %2
%endmacro
%macro movw 2
db 0x8b, 0xc0 + 8 * %1 + %2
%endmacro
; Sign extended byte to byte
%macro cmpb_addr_ext 2
@ -561,49 +570,79 @@ db 0x42 ; 04AC inc dx
db 0x3B, 0xDA ; 04AD cmp bx,dx
db 0x75, 0xF7 ; 04AF jnz 0x4a8
db 0xC3 ; 04B1 ret
db 0x53 ; 04B2 push bx
db 0xB0, 0x20 ; 04B3 mov al,0x20
db 0xE8, 0x6C, 0x04 ; 04B5 call 0x924
db 0xE8, 0x13, 0x00 ; 04B8 call 0x4ce
db 0xB0, 0x3A ; 04BB mov al,0x3a
db 0xE8, 0x64, 0x04 ; 04BD call 0x924
db 0xB0, 0x2A ; 04C0 mov al,0x2a
db 0x5B ; 04C2 pop bx
db 0x3B, 0x1E, 0x90, 0x0A ; 04C3 cmp bx,[0xa90]
db 0x74, 0x02 ; 04C7 jz 0x4cb
db 0xB0, 0x20 ; 04C9 mov al,0x20
db 0xE9, 0x56, 0x04 ; 04CB jmp 0x924
db 0x33, 0xC0 ; 04CE xor ax,ax
db 0x8A, 0xD0 ; 04D0 mov dl,al
db 0xB9, 0x10, 0x00 ; 04D2 mov cx,0x10
db 0xD1, 0xE3 ; 04D5 shl bx,1
db 0x12, 0xC0 ; 04D7 adc al,al
db 0x27 ; 04D9 daa
db 0x86, 0xC4 ; 04DA xchg al,ah
db 0x12, 0xC0 ; 04DC adc al,al
db 0x27 ; 04DE daa
db 0x86, 0xC4 ; 04DF xchg al,ah
db 0x12, 0xD2 ; 04E1 adc dl,dl
db 0xE2, 0xF0 ; 04E3 loop 0x4d5
db 0xB3, 0x10 ; 04E5 mov bl,0x10
db 0x92 ; 04E7 xchg ax,dx
db 0xE8, 0x16, 0x00 ; 04E8 call 0x501
db 0x8A, 0xC6 ; 04EB mov al,dh
db 0xE8, 0x02, 0x00 ; 04ED call 0x4f2
db 0x8A, 0xC2 ; 04F0 mov al,dl
db 0x8A, 0xF0 ; 04F2 mov dh,al
db 0xD0, 0xE8 ; 04F4 shr al,1
db 0xD0, 0xE8 ; 04F6 shr al,1
db 0xD0, 0xE8 ; 04F8 shr al,1
db 0xD0, 0xE8 ; 04FA shr al,1
db 0xE8, 0x02, 0x00 ; 04FC call 0x501
db 0x8A, 0xC6 ; 04FF mov al,dh
db 0x24, 0x0F ; 0501 and al,0xf
db 0x74, 0x02 ; 0503 jz 0x507
db 0xB3, 0x00 ; 0505 mov bl,0x0
db 0x04, 0x30 ; 0507 add al,0x30
db 0x2A, 0xC3 ; 0509 sub al,bl
db 0xE9, 0x16, 0x04 ; 050B jmp 0x924
print_line_prefix: ; 04b2
push bx
mov al, ' '
call print_char
call print_number
mov al, ':'
call print_char
mov al, '*'
pop bx
cmp bx, [current_line]
je .end
mov al, ' '
.end: jmp print_char
print_number: ; 04ce
; Input in bx
; Zero out the 5-digit BCD number
xorw r_ax, r_ax
movb r_dl, r_al
mov cx, 16
.loop: ; 04d5
shl bx, 1
; Double al (bcd), and add in carry out from the shift
adcb r_al, r_al
daa
; Double ah (bcd) and propagate carry
xchg al, ah
adcb r_al, r_al
daa
xchg al, ah
; Double dl (bcd) and propagate carry
adcb r_dl, r_dl
loop .loop
print_bcd:
; Prints a 5-digit BCD number stored in DX:AX as such (x is ignored)
; dh dl ah al
; xx x1 23 45
mov bl, '0' - ' ' ; If value is zero, replace with space
xchg ax, dx
; First digit, low nybble of dl
call print_bcd_digit
; Next two digits, ah
movb r_al, r_dh
call print_bcd_byte
; Final two digits, al
movb r_al, r_dl
print_bcd_byte: ; 04f2
movb r_dh, r_al
times 4 shr al, 1
call print_bcd_digit
movb r_al, r_dh
print_bcd_digit: ; 0501
and al, 0xf
jz .to_ascii
mov bl, 0 ; Only apply replacement to zero values
.to_ascii:
add al, '0'
subb r_al, r_bl
jmp print_char
command_l: ; 050e
db 0x8B, 0x1E, 0x80, 0x0A ; 050E mov bx,[0xa80]