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?