Line prefixes for listings
This commit is contained in:
parent
0b46aa1336
commit
95d5901852
137
edlin.asm
137
edlin.asm
|
@ -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]
|
||||
|
|
Loading…
Reference in New Issue