165 lines
2.3 KiB
NASM
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 $ - .
|