#11 Article 168 Posted at 1987/06/10 19:53:03 by NOZOMU (MAP041) [PRG.NL2]
Subject: NLOADER2 for 98+MASM ソノ1
;
; NLOADER2 MASM version for PC-9801
;
; Programmed at '87/06/10 by NOZOMU
;
; nloader2.asm デ ソースファイルヲ ツクリ、
;
; masm nloader2;
; link nloader2;
; exe2bin nloader2 nloader2.com
; del nloader2.obj
; del nloader2.exe
;
; シヨウホウ ハ
;
; nloader2 file_name -c
;
; -c オプションガ ツクト カラーデ、 ツカナイト 8カイチョウ タイリングデ ヒョウジシマス。
; ファイルネーム ト オプションハ ドチラガ サキニ キテモ カマイマセン
; マタ、 エラーガ オキタ バアイハ グラフイックノ ヒョウジヲ キンシ シマスカラ、
; ナニモ パラメータヲ ツケナケレバ、 グラフィック ショウキョノ カワリニ ナリマス。
;
pgroup group prog
prog segment byte public 'prog'
ASSUME CS:PGROUP,ds:pgroup,es:pgroup,ss:pgroup
org 100h
start:
push ax
push bx
push cx
push dx
mov gray,1
mov ah,65 ;Prohibit to display graphic
int 24
mov si,80h
mov di,offset file_name
mov al,[si]
cmp al,0
jne copy_file_name
mov ah,09h ;Display string
mov dx,offset request_file_name
int 21h
jmp exit_program
copy_file_name:
inc si
mov al,[si]
cmp al,'-'
jne not_option
inc si
mov al,[si]
cmp al,'c'
jne illegal_option
mov gray,0
jmp short copy_file_name
illegal_option:
mov ah,09h ;Display string
mov dx,offset illegal_option_message
int 21h
jmp exit_program
not_option:
cmp al,0dh
je load_data
cmp al,' '
je copy_file_name
cmp al,09h
je copy_file_name
mov [di],al
inc di
jmp short copy_file_name
load_data:
mov bx,offset logical_page
push bx
mov ax,offset file_name
push ax
call read
cmp ax,0ffffh
je exit_program
mov ah,64 ;Admit to display graphic
int 24
push bx
call display
exit_program:
pop dx
pop cx
pop bx
pop ax
ret
;--------------------------------------
;
; read(file_name,logial_page)
;
; char *file_name,*logical_page
;
;--------------------------------------
public read
read_arg struc
dw ?
dw ?
fn dw ? ;&file_name
lp dw ? ;&logical_page
read_arg ends
read proc near
push bp
mov bp,sp
push bx
push cx
push dx
push di
push si
mov ah,3dh ;file open
mov al,0 ;read mode
mov dx,[bp].fn
int 21h
jb error
mov si,[bp].lp
mov di,offset read_buffer
mov bx,ax ;file handle
mov ah,3fh ;read from file
mov cx,8000 ;data length
mov dx,offset read_buffer
int 21h
get_1char:
mov al,[di]
inc di
sub al,' '
jb get_1char
cmp al,80h
jb skip0
sub al,' '
skip0:
mov dl,al
and dl,00111000b
shr dl,1
shr dl,1
shr dl,1
mov dh,al
and dh,00000111b
test al,01000000b
mov cx,1
jz not_press
mov cl,[di]
inc di
sub cl,' '
cmp cl,80h
jb skip1
sub cl,' '
skip1:
mov ch,0
inc cx
inc cx
not_press:
loop3: mov [si],dx
inc si
inc si
loop loop3
mov ax,[bp].lp