#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