summaryrefslogtreecommitdiff
path: root/v4.0/src/CMD/MODE/SCRNTAB.ASM
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/CMD/MODE/SCRNTAB.ASM')
-rw-r--r--v4.0/src/CMD/MODE/SCRNTAB.ASM121
1 files changed, 121 insertions, 0 deletions
diff --git a/v4.0/src/CMD/MODE/SCRNTAB.ASM b/v4.0/src/CMD/MODE/SCRNTAB.ASM
new file mode 100644
index 0000000..50de85b
--- /dev/null
+++ b/v4.0/src/CMD/MODE/SCRNTAB.ASM
@@ -0,0 +1,121 @@
1.SALL
2 PAGE ,132 ;
3 TITLE SCRNTABL.ASM - SCREEN SHIFT TABLE CONTROL FOR MODE COMMAND
4
5
6;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ M A C R O S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
7;º º
8
9SET MACRO REG,VALUE ;SET REG TO VALUE. DON'T SPECIFY AX FOR REG
10
11 PUSH AX
12 MOV AX,VALUE
13 MOV REG,AX
14 POP AX
15
16ENDM
17
18;º º
19;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ M A C R O S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
20
21
22;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ E Q U A T E S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
23;º º
24
25ROM_BIOS_SEG EQU 0F000H ;USED TO ADDRESS INIT TABLE IN ROM
26VIDEO_VECTOR EQU 74H ;OFFSET INTO VECTOR TABLE (SEG=0)
27 ;TO DOUBLE WORD POINTER TO VIDEO PARMS
28VIDEO_PARMS_WORD_LEN EQU 32 ;NO. WORDS IN VIDEO PARM AREA
29
30;º º
31;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ E Q U A T E S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
32
33
34PRINTF_CODE SEGMENT PUBLIC
35 ASSUME DS:NOTHING, CS:PRINTF_CODE
36
37
38;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ E X T R N S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
39;º º
40
41EXTRN MODELOAD:NEAR
42EXTRN RESSEG:DWORD ;ADD OF POINTER TO RESIDENT CODE
43EXTRN NEW_SCRNTABL:ABS ;OFFSET OF INIT TABLE WITHIN THE RESIDENT CODE
44EXTRN NEW_VIDEO_PARMS_OFFSET:WORD
45EXTRN NEW_VIDEO_PARMS_SEGMENT:WORD
46
47;º º
48;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ E X T R N S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
49
50
51;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ P U B L I C S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
52;º º
53;º º
54;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ P U B L I C S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
55
56
57
58ROM_BIOS SEGMENT AT 0F000H
59
60 ORG 0FFFEH
61
62 MACHINE_TYPE LABEL BYTE ;MACHINE TYPE BURNED IN ROM
63
64ROM_BIOS ENDS
65
66PAGE
67;*********************************************************************************************
68
69SCRNTAB PROC NEAR
70PUBLIC SCRNTAB
71; GO TO THE 64 BYTES POINTED TO BY THE VECTOR AT 0:74H AND MOVE A COPY
72; OF THESE BYTES TO THE MODE COMMAND RESIDENT AREA LEAVING DS POINTING TO
73; THE SEGMENT OF THE TABLE, AND BX CONTAINING THE OFFSET OF THE TABLE.
74; BIGTOP BIOS OVERWRITES AREA AT 40:90, AS DO OTHER APPS SO MUST LOAD THE
75; TABLE INTO MODE'S RESIDENT CODE.
76
77 PUSH ES ;SAVE ADDR OF PROGRAM HEADER PREFIX AREA
78 MOV AX,0 ;ADDR OF VECTOR TABLE
79 MOV DS,AX ;SET DATA SEGMENT TO 0 MEMORY
80 MOV BX,DS:VIDEO_VECTOR+2 ;SEGMENT OF VIDEO PARMS
81 CMP BX,ROM_BIOS_SEG
82;$IF E ;IF haven't moved the table THEN
83 JNE $$IF1
84 ;load the resident code
85 PUSH DS
86 SET DS,CS ;MODELOAD DEPENDS ON DS BEING SEG OF TO BE RES CODE
87 CALL MODELOAD ;LOAD RESIDENT CODE OVERLAYING PSP
88 POP DS ;RESTORE TO SEGMENT 0
89 ;Save address of resident code
90 SET CS:NEW_VIDEO_PARMS_SEGMENT,< WORD PTR DS:RESSEG+2 >
91 MOV AX,WORD PTR DS:RESSEG ;AX=offset of MODETO within resident code
92 ADD AX,NEW_SCRNTABL ;AX=OFFSET OF VIDEO PARMS FROM RES CODE SEG
93 MOV WORD PTR CS:NEW_VIDEO_PARMS_OFFSET,AX ;SEE "RESCODE"
94
95 MOV DI,AX ;DI=NEW_VIDEO_PARMS_OFFSET, SET UP ES:DI FOR MOVSW INSTRUCTION
96 MOV AX,CS:NEW_VIDEO_PARMS_SEGMENT
97 MOV ES,AX ;ES=RESIDENT CODE SEGMENT
98 MOV SI,DS:VIDEO_VECTOR ;GET SEGMENT OF VIDEO PARMS
99 MOV DS:VIDEO_VECTOR,DI ;CHANGE VIDEO OFFSET
100 MOV DS:VIDEO_VECTOR+2,ES ;CHANGE VIDEO SEGMENT
101 MOV DS,BX ;CHANGE DS TO ROM SEGMENT
102 MOV CX,VIDEO_PARMS_WORD_LEN ;COUNT TO MOVE 32 WORDS
103 CLD ;INCREMENT SI AND DI WHILE MOVING THE TABLE
104 REP MOVSW ;MOVE 64 BYTES VIDEO PARMS TO RES AREA
105
106;$ENDIF ;I HAVE MOVED IT YET
107$$IF1:
108
109 SET DS,0
110 LDS BX,DS:RESSEG ;DS:BX POINTS TO RESIDENT CODE
111 ADD BX,NEW_SCRNTABL ;DS:BX POINTS TO NEW VIDEO TABLE
112
113 POP ES ;RESTORE ADDR OF PROGRAM HEADER PREFIX
114 RET ;RETURN TO MODESCRN PROC
115
116SCRNTAB ENDP
117
118
119PRINTF_CODE ENDS
120 END
121 \ No newline at end of file