diff options
Diffstat (limited to 'v4.0/src/CMD/MODE/SCRNTAB.ASM')
| -rw-r--r-- | v4.0/src/CMD/MODE/SCRNTAB.ASM | 121 |
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 | |||
| 9 | SET 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 | |||
| 16 | ENDM | ||
| 17 | |||
| 18 | ;º º | ||
| 19 | ;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ M A C R O S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ | ||
| 20 | |||
| 21 | |||
| 22 | ;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ E Q U A T E S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» | ||
| 23 | ;º º | ||
| 24 | |||
| 25 | ROM_BIOS_SEG EQU 0F000H ;USED TO ADDRESS INIT TABLE IN ROM | ||
| 26 | VIDEO_VECTOR EQU 74H ;OFFSET INTO VECTOR TABLE (SEG=0) | ||
| 27 | ;TO DOUBLE WORD POINTER TO VIDEO PARMS | ||
| 28 | VIDEO_PARMS_WORD_LEN EQU 32 ;NO. WORDS IN VIDEO PARM AREA | ||
| 29 | |||
| 30 | ;º º | ||
| 31 | ;ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ E Q U A T E S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ | ||
| 32 | |||
| 33 | |||
| 34 | PRINTF_CODE SEGMENT PUBLIC | ||
| 35 | ASSUME DS:NOTHING, CS:PRINTF_CODE | ||
| 36 | |||
| 37 | |||
| 38 | ;ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ E X T R N S ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» | ||
| 39 | ;º º | ||
| 40 | |||
| 41 | EXTRN MODELOAD:NEAR | ||
| 42 | EXTRN RESSEG:DWORD ;ADD OF POINTER TO RESIDENT CODE | ||
| 43 | EXTRN NEW_SCRNTABL:ABS ;OFFSET OF INIT TABLE WITHIN THE RESIDENT CODE | ||
| 44 | EXTRN NEW_VIDEO_PARMS_OFFSET:WORD | ||
| 45 | EXTRN 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 | |||
| 58 | ROM_BIOS SEGMENT AT 0F000H | ||
| 59 | |||
| 60 | ORG 0FFFEH | ||
| 61 | |||
| 62 | MACHINE_TYPE LABEL BYTE ;MACHINE TYPE BURNED IN ROM | ||
| 63 | |||
| 64 | ROM_BIOS ENDS | ||
| 65 | |||
| 66 | PAGE | ||
| 67 | ;********************************************************************************************* | ||
| 68 | |||
| 69 | SCRNTAB PROC NEAR | ||
| 70 | PUBLIC 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 | |||
| 116 | SCRNTAB ENDP | ||
| 117 | |||
| 118 | |||
| 119 | PRINTF_CODE ENDS | ||
| 120 | END | ||
| 121 | \ No newline at end of file | ||