kernel/test/test.asm

165 lines
2.3 KiB
NASM

%if 0
Usage of the works is permitted provided that this
instrument is retained with the works, so that any entity
that uses the works is notified of this instrument.
DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
%endif
%include "lmacros3.mac"
cpu 8086
org 256
start:
mov ah, 3Ch
xor cx, cx
mov dx, filename
int 21h
mov dx, msg.creating
jc error.nofile
xchg bx, ax
mov ah, 40h
mov dx, buffer
mov cx, buffer.size
int 21h
mov dx, msg.writing
jc error
cmp ax, cx
mov dx, msg.full
jne error
mov ah, 3Eh
int 21h
xor ax, ax
jmp quit
error:
mov ah, 3Eh
int 21h
.nofile:
push ax
mov ah, 09h
int 21h
pop ax
call disp_ax_hex
mov al, 13
call disp_al
mov al, 10
call disp_al
mov ax, -1
jmp quit
; INP: al = character to display
; CHG: -
; STT: ds, es don't care
disp_al:
push ax
push dx
xchg ax, dx
mov ah, 02h
int 21h
pop dx
pop ax
retn
; Display number in ax hexadecimal, always 4 digits
;
; INP: ax = number
; OUT: displayed using disp_al
; CHG: none
disp_ax_hex:
xchg al, ah
call disp_al_hex
xchg al, ah
disp_al_hex:
push cx
mov cl, 4
rol al, cl
call disp_al_nybble_hex
rol al, cl
pop cx
disp_al_nybble_hex:
push ax
and al, 0Fh
add al, '0'
cmp al, '9'
jbe @F
add al, -'9' -1 +'A'
@@:
call disp_al
pop ax
retn
%if 0
Shut down machine
by C. Masloch, 2020
Usage of the works is permitted provided that this
instrument is retained with the works, so that any entity
that uses the works is notified of this instrument.
DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
%endif
cpu 8086
; org 256
quit:
int3
mov ax, 0F000h
mov es, ax
mov di, 0FFF5h
mov si, msg.dosemudate
mov cx, 4
repe cmpsw ; running in DosEmu?
jne .quit_not_dosemu
xor bx, bx
mov ax, -1
int 0E6h ; dosemu quit
.quit_not_dosemu:
; from https://stackoverflow.com/a/5240330/738287
mov ax, 5301h
xor bx, bx
int 15h ; connect to APM API
mov ax, 530Eh
xor bx, bx
mov cx, 0102h
int 15h ; set APM version to 1.02
mov ax, 5307h
mov bx, 1
mov cx, 3
int 15h ; shut down system
mov dx, msg.failed
mov ah, 09h
int 21h
mov ax, 4C00h
int 21h
align 4
msg:
.dosemudate: db "02/25/93"
.failed: db "Quit failed.",13,10,36
.creating: ascic "Creating failed, code="
.writing: ascic "Writing failed, code="
.full: ascic "Writing failed, full. AX="
filename:
asciz "result.txt"
buffer:
.: db "success"
.size: equ $ - .