Category : Pascal Source Code
Archive   : TPSTACK.ZIP
Filename : TPSTACK.ASM

 
Output of file : TPSTACK.ASM contained in archive : TPSTACK.ZIP
;******************************************************
; TPSTACK.ASM 1.00
; by TurboPower Software
;******************************************************

;****************************************************** Equates

Ofst EQU (WORD PTR 0)
Segm EQU (WORD PTR 2)

;****************************************************** Data

DATA SEGMENT WORD PUBLIC

EXTRN OurSS : WORD ;value of SS when program began
EXTRN LowestSP : WORD ;lowest value for SP
EXTRN HeapHigh : DWORD ;highest address pointed to by HeapPtr
EXTRN HeapPtr : DWORD
EXTRN CountsPerTick : WORD
EXTRN Counts : WORD

DATA ENDS

;****************************************************** Code

CODE SEGMENT BYTE PUBLIC

ASSUME CS:CODE,DS:DATA

PUBLIC ActualSaveInt8, Int8

ActualSaveInt8 DD 0 ;stores previous INT 8 handler

;****************************************************** Int8

;procedure Int8;
;Interrupt service routine used to monitor stack and heap usage

Flags EQU WORD PTR [BP+6] ;position of pushed flags

Int8 PROC NEAR

PUSH BP ;set up stack frame
MOV BP,SP
PUSH AX ;save registers used
PUSH DI
PUSH DS
MOV AX,SEG DATA ;set up DS
MOV DS,AX

MOV AX,SS ;make sure we're in the right SS
CMP AX,OurSS
JNE WrongSS

LEA DI,Flags ;flags are where SS:SP was when the
CMP DI,LowestSP ;interrupt occurred
JNB WrongSS
MOV LowestSP,DI

WrongSS:
;compare HeapPtr and HeapHigh; both are normalized
MOV AX,HeapPtr.Segm ;HeapPtr into AX:DI
MOV DI,HeapPtr.Ofst
CMP AX,HeapHigh.Segm ;if the segment is higher,
JA IsHigher ;HeapPtr points higher
JNE Done ;check offsets only if segments equal
CMP DI,HeapHigh.Ofst ;done if offset isn't higher
JNA Done

IsHigher:
MOV HeapHigh.Ofst,DI ;HeapHigh = HeapPtr
MOV HeapHigh.Segm,AX

Done: INC Counts ;increment counter
MOV AX,CountsPerTick ;see if we need to chain to old ISR
CMP Counts,AX
JAE Chain
MOV AL,20h ;send EOI to interrupt controller
OUT 20h,AL
POP DS ;restore registers used
POP DI
POP AX
POP BP
IRET

Chain: MOV Counts,0 ;reset counter
POP DS ;restore registers used
POP DI
POP AX
POP BP
JMP DWORD PTR ActualSaveInt8 ;chain to old INT $8 handler

Int8 ENDP

CODE ENDS

END


  3 Responses to “Category : Pascal Source Code
Archive   : TPSTACK.ZIP
Filename : TPSTACK.ASM

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/