so I have this working procedure that is basically like func. 09h of int 21h except it terminates at 00h, and it uses 01h-04h as control characters that determine the style of the text.
I wrote it in the main procedure of a test program to get it working, and then I put it in its own procedure in a larger program. When I run it from the larger program, I get this error:
"title: 16 bit MS-DOS Subsystem
Command Prompt - cmp
NTVDM has encountered a System Error
Access is denied.
Choose 'Close' to terminate the application
Close | Ignore"
I can't really ignore it. Anyways, I narrowed the cause of this error down to a procedure without a "RET" statement. But it has a return statement at the end. If I just put RET in the procedure, it runs, if I put all of the code back into the test program, it runs. So I'm thinking maybe there's a maximum size for a procedure? It is quite long, I haven't tried to slim it down at all, I'm not sure if I really can. Anyway, here's the procedure:
outp proc
push cx
push bx
xor cx,cx
xor bx,bx
nexch: mov si,dx
push dx
add si,cx
push cx
mov al,[si]
cmp al,00h
jnz nndpr
jmp endpr
nndpr: cmp al,0dh ;LINE FEED
jnz not0d
mov ah,03h
int 10h
cmp dh,24d
jz scwin
inc dh
mov ah,02h
int 10h
jmp gnext
scwin: mov ax,0601h
xor cx,cx
mov dh,24d
mov dl,79d
mov bl,attrWHT
int 10h
jmp gnext
not0d: cmp al,0ah ;CARRIAGE RETURN
jnz not0a
mov ah,03h
int 10h
mov dl,00h
mov ah,02h
int 10h
jmp gnext
not0a: cmp al,01h ;WHITE
jnz not01
mov bl,attrWHT
mov attrCUR,bl
jmp gnext
not01: cmp al,02h ;GREEN
jnz not02
mov bl,attrGRN
mov attrCUR,bl
jmp gnext
not02: cmp al,03h ;YELLOW
jnz not03
mov bl,attrHLT
mov attrCUR,bl
jmp gnext
not03: cmp al,04h ;EDIT/HEADER
jnz not04
mov bl,attrEDT
mov attrCUR,bl
jmp gnext
not04: mov ah,09h
mov bl,attrCUR
mov cx,01h
int 10h
mov ah,03h
int 10h
inc dl
mov ah,02h
int 10h
gnext: pop cx
pop dx
inc cx
jmp nexch
endpr: pop bx
pop cx
ret
outp endp
I'm using TASM, and the model of the program is small... I tried making it "Large" and "Huge" to see how that would affect it but it said there was a problem with my call statement in the main procedure if I did (Forward reference needs override). Has anyone run into something similar to this? How can I fix it and make it work?