Announcement

Collapse
No announcement yet.

PBDOS : CRT_IO Assembly routines

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • PBDOS : CRT_IO Assembly routines

    Dear Programmers

    Can you please look at if there errors and can you corrected if
    there is one displayed

    Thanks for your help

    This is ONLY for PBDOS

    Code:
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC ClearEol
    'CODESEG
    '       PROC ClearEol
    '       USES SI, DI
    
    '       MOV  AH, 0Fh
    '       INT  10h
    '       CMP  AL, 2
    '       JNB  @@80
    '
    '       MOV  AX, 40
    '       PUSH AX
    '       JMP  @@getcursor
    
    '@@80:
    '       MOV  AX, 80
    '       PUSH AX
    
    '@@getcursor:
    '       MOV  AH, 03h
    '       MOV  BH, 00h
    '       INT  10h
    '
    '       POP  AX
    '       MOV  DH, 00h
    '       SUB  AX, DX
    '       PUSH AX
    
    '       MOV  AH, 08h
    '       MOV  BH, 00h
    '       INT  10h
    
    '       MOV  BL, AH
    '       POP  CX
    '       MOV  AL, 32
    '       MOV  BH, 00h
    '       MOV  AH, 09h
    '       INT  10h
    '
    '       RET
    '       ENDP ClearEol
    'END
    
    SUB pbClearEol()
        ASM mov     ah, &h0f
        ASM int     &h10
        ASM cmp     al, 2
        ASM jnb     @@80
        ASM mov     ax, 40
        ASM push    ax
        ASM jmp     @@getcursor
    
    @@80:
        ASM mov     ax, 80
        ASM push    ax
    
    @@getcursor:
        ASM mov     ah, &h03
        ASM mov     bh, &h00
        ASM int     &h10
        ASM pop     ax
        ASM mov     dh, &h00
        ASM sub     ax, dx
        ASM push    ax
        ASM mov     ah, &h08
        ASM mov     bh, &h00
        ASM int     &h10
        ASM mov     bl, ah
        ASM pop     cx
        ASM mov     al, 32
        ASM mov     bh, &h00
        ASM mov     ah, &h09
        ASM int     &h10
        ASM ret
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC ClrScr
    'CODESEG
    '       PROC ClrScr
    '       USES SI, DI
    '
    '       MOV  AH, 0Fh
    '       INT  10h
    '       MOV  AH, 00h
    '       INT  10h
    '
    '       RET
    '       ENDP ClrScr
    'END
    
    SUB pbClrScr()
        ASM mov     ah, &h0f
        ASM int     &h10
        ASM mov     ah, &h00
        ASM int     &h10
        ASM ret
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC Dec
    'CODESEG
    '       PROC Dec
    '       ARG  getal:WORD
    '
    '       MOV  AX, [WORD getal]
    '       DEC  AX
    '       RET
    'END
    
    
    SUB pbDecr(BYVAL wGetal AS WORD)
        ASM mov     ax, [WORD wGetal]
        ASM dec     ax
        ASM ret
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC delline
    'CODESEG
    '       PROC delline
    '       USES SI, DI
    '
    '       MOV  AH, 03h
    '       MOV  BH, 00h
    '       INT  10h
    '
    '       PUSH DX
    '       PUSH CX
    '
    '       MOV  AH, 08h
    '       MOV  BH, 00h
    '       INT  10h
    
    '       POP  CX
    '       POP  DX
    
    '       MOV  BL, AH
    '       MOV  CH, DH
    '       MOV  CL, 00
    '       MOV  DL, 80
    '       MOV  AX, 0600h
    '       INT  10h
    
    '       RET
    '       ENDP delline
    'END
    
    SUB pbDelLine()
        ASM mov     ah, &h03
        ASM mov     bh, &h00
        ASM int     &h10
        ASM push    dx
        ASM push    cx
        ASM mov     ah, &h08
        ASM mov     bh, &h00
        ASM int     &h10
        ASM pop     cx
        ASM pop     dx
        ASM mov     bl, ah
        ASM mov     ch, dh
        ASM mov     cl, 00
        ASM mov     dl, 80
        ASM mov     ax, &h0600
        ASM int     &h10
        ASM ret
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC DiskFree
    'CODESEG
    '       PROC DiskFree
    '       ARG  drive :WORD
    '
    '       MOV  AH, 36h
    '       MOV  DL, [BYTE drive]
    '       INT  21h
    '
    '       CMP  AX, 65535
    '       JNE  @@disk_ok
    '
    '       MOV  AX, -1
    '       MOV  DX, -1
    '       RET
    '
    '@@disk_ok:
    '       MUL CX
    '       MUL BX
    '
    '       RET
    '       ENDP DiskFree
    'END
    
    SUB pbDiskFree(BYVAL wDrive AS WORD)
        ASM mov     ah, &h36
        ASM mov     dl, [BYTE wDrive]
        ASM int     &h21
        ASM cmp     ax, 65535
        ASM jne     @@disk_ok
        ASM mov     ax, -1
        ASM mov     dx, -1
        ASM ret
    @@disk_ok:
        ASM mul     cx
        ASM mul     bx
        ASM ret
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC DiskSize
    'CODESEG
    '       PROC Disksize
    '       ARG  drive :WORD
    '
    '       MOV  AH, 36h
    '       MOV  DL, [BYTE drive]
    '       INT  21h
    '
    '       CMP  AX, 65535
    '       JNE  @@disk_ok
    '
    '       MOV  AX, -1
    '       MOV  DX, -1
    '       RET
    '
    '@@disk_ok:
    '       MUL DX
    '       MUL CX
    
    '       RET
    '       ENDP Disksize
    'END
    SUB pbDiskFree(BYVAL wDrive AS WORD)
        ASM mov     ah, &h36
        ASM mov     dl, [BYTE wDrive]
        ASM int     &h21
        ASM cmp     ax, 65535
        ASM jne     @@disk_ok
        ASM mov     ax, -1
        ASM mov     dx, -1
        ASM ret
    @@disk_ok:
        ASM mul     dx
        ASM mul     cx
        ASM ret
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC DSeg
    'CODESEG
    '       PROC DSeg
    '       MOV  AX, DS
    '       RET
    '       ENDP DSeg
    'END
    
    SUB pbDSeg()
        ASM mov     ax, ds
        ASM ret
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC GetVerify
    '
    'CODESEG
    '       PROC GetVerify
    '       MOV  AH, 54h
    '       INT  21h
    '       MOV  AH, 00h
    '       RET
    '       ENDP GetVerify
    'END
    
    SUB pbGetVerify()
        ASM mov     ah, &h54
        ASM int     &h21
        ASM mov     ah, &h00
        ASM ret
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC INC
    'CODESEG
    '       PROC INC
    '       ARG  getal:WORD
    '       MOV  AX, [WORD getal]
    '       INC  AX
    '       RET
    'END
    
    SUB pbIncr(BYVAL wGetal AS WORD)
        ASM mov     ax, [WORD wGetal]
        ASM inc     ax
        ASM ret
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC insline
    'CODESEG
    '       PROC insline
    '       USES SI, DI
    '       MOV  AH, 03h
    '       MOV  BH, 00h
    '       INT  10h
    '       PUSH DX
    '       PUSH CX
    '       MOV  AH, 08h
    '       MOV  BH, 00h
    '       INT  10h
    '       POP  CX
    '       POP  DX
    '       MOV  BL, AH
    '       MOV  CH, DH
    '       MOV  CL, 00
    '       MOV  DL, 80
    '       MOV  AX, 0701h
    '       INT  10h
    '       RET
    '       ENDP insline
    'END
    
    SUB pbInsLine()
        ASM MOV     AH, &h03
        ASM MOV     BH, &h00
        ASM INT     &h10
        ASM PUSH    DX
        ASM PUSH    CX
        ASM MOV     AH, &h08
        ASM MOV     BH, &h00
        ASM INT     &h10
        ASM POP     CX
        ASM POP     DX
        ASM MOV     BL, AH
        ASM MOV     CH, DH
        ASM MOV     CL, 00
        ASM MOV     DL, 80
        ASM MOV     AX, &h0701
        ASM INT     &h10
        ASM RET
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC KeyPressed
    'CODESEG
    '       PROC KeyPressed
    '       MOV  AH, 01h
    '       INT  16h
    '       JZ   @@geen_toets
    '       MOV  AX, -1
    '       RET
    '
    '@@geen_toets:
    '       MOV  AX, 0
    '       RET
    '       ENDP KeyPressed
    'END
    
    SUB pbKeyPressed()
        ASM mov     ah, &h01
        ASM int     &h16
        ASM jz      @@No_key
        ASM mov     ax, -1
        ASM ret
    @@No_Key:
        ASM mov     ax, 0
        ASM ret
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC Odd
    'CODESEG
    '       PROC Odd
    '       ARG  getal:WORD
    '       MOV  AX, [WORD getal]
    '       MOV  DX, AX
    '       SHR  DX, 1
    '       SHL  DX, 1
    '       CMP  AX, DX
    '       JE   @@even
    '       MOV  AX, -1
    '       RET
    '@@even:
    '       MOV  AX, 0
    '       RET
    '       ENDP Odd
    'END
    
    SUB pbOdd(BYVAL wGetal AS WORD)
        ASM mov     ax, [WORD wGetal]
        ASM mov     dx, ax
        ASM shr     dx, 1
        ASM shl     dx, 1
        ASM cmp     ax, dx
        ASM je      @@Odd
        ASM mov     ax, -1
        ASM ret
    @@Odd:
        ASM mov     ax, 0
        ASM ret
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC SeekEof
    'CODESEG
    '       PROC SeekEof
    '       ARG  handle :WORD
    '       MOV  AX, 4202h
    '       MOV  CX, 0000h
    '       MOV  DX, 0000h
    '       MOV  BX, [WORD handle]
    '       INT  21h
    '
    '       RET
    '       ENDP SeekEof
    'END
    
    SUB pbSeekEOF(BYVAL wfHandle AS WORD)
        ASM mov     ax, &h4202
        ASM mov     cx, &h0000
        ASM mov     dx, &h0000
        ASM mov     bx, [WORD wfHandle]
        ASM int     &h21
        ASM ret
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC SeekEoln
    'CODESEG
    '       PROC SeekEoln
    '       USES SI, DI
    '       MOV  AH, 0Fh
    '       INT  10h
    '       CMP  AL, 2
    '       JNB  @@80
    '       MOV  AX, 39
    '       PUSH AX
    '       JMP  @@getcursor
    '
    '@@80:
    '       MOV  AX, 79
    '       PUSH AX
    '@@getcursor:
    '       MOV  AH, 03h
    '       MOV  BH, 00h
    '       INT  10h
    '       MOV  AH, 02h
    '       MOV  BH, 00h
    '       POP  CX
    '       MOV  DL, AL
    '       INT  10h
    '       RET
    '       ENDP SeekEoln
    'END
    
    SUB pbSeekEOLN()
        ASM MOV  AH,    &h0F
        ASM INT         &h10
        ASM CMP  AL,    2
        ASM JNB         @@80
        ASM MOV  AX,    39
        ASM PUSH        AX
        ASM JMP         @@getcursor
    @@80:
        ASM MOV  AX,    79
        ASM PUSH AX
    @@getcursor:
        ASM MOV  AH,    &h03
        ASM MOV  BH,    &h00
        ASM INT         &h10
        ASM MOV  AH,    &h02
        ASM MOV  BH,    &h00
        ASM POP         CX
        ASM MOV  DL,    AL
        ASM INT         10h
        ASM RET
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC SetCBreak
    'CODESEG
    '       PROC SetCBreak
    '       ARG  flag :WORD
    '       MOV  DX, [WORD flag]
    '       NEG  DX
    '       MOV  AX, 3301h
    '       INT  21h
    '       RET
    '       ENDP SetCBreak
    'END
    
    SUB pbSetCtrlBreak(BYVAL wFlag AS WORD)
        ASM mov  dx,    [WORD wFlag]
        ASM neg  dx
        ASM mov  ax,    &h3301
        ASM int         &h21
        ASM ret
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC SPTR
    'CODESEG
    '      PROC SPTR
    '       MOV  AX, SP
    '       RET
    '       ENDP SPTR
    'END
    
    SUB pbStackPtr()
        ASM mov  ax,    sp
        ASM ret
    END SUB
    
    'IDEAL
    'MODEL MEDIUM, BASIC
    'PUBLIC SSEG
    'CODESEG
    '       PROC SSEG
    '       MOV  AX, SS
    '       RET
    '       ENDP SSEG
    'END
    
    SUB pbStackSeg()
        ASM mov  ax,    ss
        ASM ret
    END SUB


    ------------------

  • #2
    Stephane,

    I am not going to write your code for you, but I will give you
    a couple of pointers.

    (1) NEVER use ret, retf, or retn to end a PB inline assembler
    function/sub! PB handles that stuff internally. If you have to
    end a PB inline assembler function or sub ahead of time, do a
    jmp to a label at the end of the function or sub.

    (2) You should ALWAYS use ! push at the beginning of your PB inline
    assembler function or sub to save the registers that your function or sub
    uses. Then, at the end of the ASM code, put in the ! pop lines to
    restore those registers to their original states. Make sure you put in
    the ! pop lines in the REVERSE order that you put in the ! push lines.


    ------------------

    Comment


    • #3
      Stephane, the Source Code forum is for working source code, not
      for help requests. Please take this up in the PB/DOS Forum.

      [Moved from Source Code forum by admin]

      ------------------
      Tom Hanlin
      PowerBASIC Staff

      Comment

      Working...
      X