|
|
1.1 ! root 1: ; ! 2: ; _DBG286.EQU 5.20A June 8, 1995 ! 3: ; ! 4: ; The Greenleaf Comm Library ! 5: ; ! 6: ; Copyright (C) 1991-94 Greenleaf Software Inc. All Rights Reserved. ! 7: ; ! 8: ; NOTES ! 9: ; ! 10: ; This file contains the macros used to provide debug output services ! 11: ; for the protected mode ISR. Debug output services are fully ! 12: ; defined in DEBUG286.ASM. ! 13: ; ! 14: ; MODIFICATIONS ! 15: ; ! 16: ; December 1, 1994 5.10A : Initial release. ! 17: ; ! 18: ! 19: ; ! 20: ; Any routine that wants to use debug services can include this header ! 21: ; file. Unfortunately, if it gets included by DEBUG286.ASM, we are ! 22: ; going to see a conflict between these EXTRN definitions and the ! 23: ; PUBLIC definitions in the source module. We avoid this conflict by ! 24: ; simply defining _DEBUG286 in DEBUG286.ASM so that these guys won't get ! 25: ; pulled in by ! 26: ; ! 27: ; Any routine that wants to use debug services can include this header ! 28: ; file. Unfortunately, if it gets included by DEBUG88.ASM, we are ! 29: ; going to see a conflict between these EXTRN definitions and the ! 30: ; PUBLIC definitions in the source module. We avoid this conflict by ! 31: ; simply defining _DEBUG88 in DEBUG88.ASM so that these guys won't get ! 32: ; pulled in by that module. ! 33: ; ! 34: ; Note also that these externs don't get defined if ISR_DEBUG is not turned ! 35: ; on. This prevents this code from being linked in in a production release. ! 36: ; ! 37: IFNDEF _DEBUG286 ! 38: ! 39: IFDEF ISR_DEBUG ! 40: ! 41: DEBUG_ISR_CODE SEGMENT 'CODE' ! 42: EXTRN C _VidGoto:FAR ! 43: EXTRN C _VidPutc:FAR ! 44: EXTRN C _VidPutDat:FAR ! 45: EXTRN C _VidPuts:FAR ! 46: ! 47: DEBUG_ISR_CODE ENDS ! 48: ! 49: ENDIF ! 50: ! 51: ENDIF ! 52: ! 53: ; ! 54: ; Macro: VIDPUTWORD data ! 55: ; ! 56: ; ! 57: ; ARGUMENTS ! 58: ; ! 59: ; data : Any 16 bit value that can be moved into ax with ! 60: ; a mov ax, data instruction. ! 61: ; ! 62: ; DESCRIPTION ! 63: ; ! 64: ; This macro is used in the protected ISR to display a single binary ! 65: ; word in hex. The real work is done by _VidPutDat, the macro just ! 66: ; takes care of setting things up to facilitate the call. ! 67: ; ! 68: ; Note that the real mode ISR and the protected mode ISR are distinguished ! 69: ; by the presence or absence of the _REAL equate. If we are in the real ! 70: ; mode ISR, we call a slightly different version of _VidPutDat. Same ! 71: ; functionality, slightly different code. ! 72: ; ! 73: ; SIDE EFFECTS ! 74: ; ! 75: ; None. ! 76: ; ! 77: ; RETURNS ! 78: ; ! 79: ; Nothing. ! 80: ; ! 81: ; AUTHOR ! 82: ; ! 83: ; SM October 17, 1994 ! 84: ; ! 85: ; MODIFICATIONS ! 86: ; ! 87: ; ! 88: ! 89: VIDPUTWORD MACRO dat ; Tag: Debug private ! 90: push ax ! 91: push cx ! 92: mov cl,8 ! 93: mov ax,dat ; Get the data to display ! 94: ror ax,cl ; Shift upper byte to lower byte ! 95: push ax ; Pass it to _VidPutDat ! 96: IFDEF _REAL ! 97: call _VidPutDatReal ! 98: ELSE ! 99: call _VidPutDat ! 100: ENDIF ! 101: add sp,2 ! 102: mov ax,dat ! 103: push ax ! 104: IFDEF _REAL ! 105: call _VidPutDatReal ! 106: ELSE ! 107: call _VidPutDat ! 108: ENDIF ! 109: add sp,2 ! 110: pop cx ! 111: pop ax ! 112: ENDM ! 113: ! 114: ; ! 115: ; Macro: VIDGOTO row,col ! 116: ; ! 117: ; ! 118: ; ARGUMENTS ! 119: ; ! 120: ; row : The row to go to on the screen. This can be any sort ! 121: ; of identifier that can be accessed with a mov ax,row ! 122: ; instruction, loading 16 bits. ! 123: ; ! 124: ; col : The column to go to on the screen. This can be any sort ! 125: ; of identifier that can be accessed witha mov ax,col ! 126: ; instruction, loading 16 bits. ! 127: ; ! 128: ; DESCRIPTION ! 129: ; ! 130: ; This macro is used in the protected ISR to move the cursor, or current ! 131: ; output location, to a specific location on the screen. ! 132: ; ! 133: ; Note that the real mode ISR and the protected mode ISR are distinguished ! 134: ; by the presence or absence of the _REAL equate. If we are in the real ! 135: ; mode ISR, we call a slightly different version of _VidGoto. Same ! 136: ; functionality, slightly different code. ! 137: ; ! 138: ; SIDE EFFECTS ! 139: ; ! 140: ; None. ! 141: ; ! 142: ; RETURNS ! 143: ; ! 144: ; Nothing. ! 145: ; ! 146: ; AUTHOR ! 147: ; ! 148: ; SM October 17, 1994 ! 149: ; ! 150: ; MODIFICATIONS ! 151: ; ! 152: ; ! 153: ! 154: VIDGOTO MACRO row,col ; Tag: Debug private ! 155: push ax ! 156: mov ax,col ! 157: push ax ! 158: mov ax,row ! 159: push ax ! 160: IFDEF _REAL ! 161: call _VidGotoReal ! 162: ELSE ! 163: call _VidGoto ! 164: ENDIF ! 165: add sp,4 ! 166: pop ax ! 167: ENDM ! 168: ! 169: ; ! 170: ; Macro: VIDPUTC char ! 171: ; ! 172: ; ! 173: ; ARGUMENTS ! 174: ; ! 175: ; char : A single character that needs to be displayed on the screen. ! 176: ; ! 177: ; DESCRIPTION ! 178: ; ! 179: ; This macro is used in the protected ISR to display a single character ! 180: ; at the current cursor position on the screen. It does this with ! 181: ; a single call to _VidPutc. Note that the argument can be anything ! 182: ; that can load a 16 bit value with mov ax,value. ! 183: ; ! 184: ; Note that the real mode ISR and the protected mode ISR are distinguished ! 185: ; by the presence or absence of the _REAL equate. If we are in the real ! 186: ; mode ISR, we call a slightly different version of _VidPutc. Same ! 187: ; functionality, slightly different code. ! 188: ; ! 189: ; SIDE EFFECTS ! 190: ; ! 191: ; None. ! 192: ; ! 193: ; RETURNS ! 194: ; ! 195: ; Nothing. ! 196: ; ! 197: ; AUTHOR ! 198: ; ! 199: ; SM October 17, 1994 ! 200: ; ! 201: ; MODIFICATIONS ! 202: ; ! 203: ; ! 204: ! 205: VIDPUTC MACRO Char ; Tag: Debug private ! 206: push ax ! 207: mov ax,Char ! 208: push ax ! 209: IFDEF _REAL ! 210: call _VidPutcReal ! 211: ELSE ! 212: call _VidPutc ! 213: ENDIF ! 214: add sp,2 ! 215: pop ax ! 216: ENDM ! 217: ! 218: ; ! 219: ; Macro: VIDPUTS str ! 220: ; ! 221: ; ! 222: ; ARGUMENTS ! 223: ; ! 224: ; str : A string that needs to be displayed on the screen. Note ! 225: ; that this doesn't have to be a null terminated string, we ! 226: ; make a copy of it here and then null terminate the copy. ! 227: ; ! 228: ; DESCRIPTION ! 229: ; ! 230: ; This macro is used in the protected ISR to display an entire string ! 231: ; on the screen. We make a local copy of the string in our code ! 232: ; segment, and null terminate it. Then we push a pointer to the copy ! 233: ; on the stack and call _VidPuts. ! 234: ; ! 235: ; Note that the real mode ISR and the protected mode ISR are distinguished ! 236: ; by the presence or absence of the _REAL equate. If we are in the real ! 237: ; mode ISR, we call a slightly different version of _VidPuts. Same ! 238: ; functionality, slightly different code. ! 239: ; ! 240: ; SIDE EFFECTS ! 241: ; ! 242: ; None. ! 243: ; ! 244: ; RETURNS ! 245: ; ! 246: ; Nothing. ! 247: ; ! 248: ; AUTHOR ! 249: ; ! 250: ; SM October 17, 1994 ! 251: ; ! 252: ; MODIFICATIONS ! 253: ; ! 254: ; ! 255: ! 256: VIDPUTS MACRO s ; Tag: Debug private ! 257: LOCAL skip, string ! 258: jmp short skip ! 259: string db s, 0 ! 260: skip: push ax ! 261: mov ax, offset string ! 262: push ax ! 263: IFDEF _REAL ! 264: call _VidPutsReal ! 265: ELSE ! 266: call _VidPuts ! 267: ENDIF ! 268: add sp,2 ! 269: pop ax ! 270: ENDM ! 271: ! 272:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.