@@ -83,21 +83,26 @@ True_Video: LD HL, c_TRUEVID
83
83
84
84
; Put VDU in 80 column mode, of not already there.
85
85
Setup_Screen: PUSH IX
86
+ LD HL , c_FIXSETTINGS
87
+ CALL Print_CString ; Cancel text window control keys, page mode
86
88
MOSCALL mos_sysvars
87
89
RES 4 , (IX + sysvar_vpd_pflags) ; Clear mode flag
88
90
LD HL , c_GETMODE
89
91
CALL Print_CString ; Get screen mode parameters.
90
92
@@: BIT 4 , (IX + sysvar_vpd_pflags)
91
93
JR Z , @B ; Wait until received.
92
- LD A , (IX + sysvar_scrRows )
93
- LD (Saved_Rows ) , A
94
+ LD A , (IX + sysvar_scrMode )
95
+ LD (Saved_Mode ) , A
94
96
LD A , (IX + sysvar_scrCols)
95
97
CP 80
96
- JR NC , Setup_End ; Apparently mode 3 or 0, do not switch
98
+ JR NC , Setup_End ; We have a mode with at least 80 columns, keep that.
97
99
LD A , 22
98
100
RST.LIL 10h
99
101
LD A , 3
100
- RST.LIL 10h ; Enter Mode 3
102
+ RST.LIL 10h ; Enter Mode 3 (80x30)
103
+ LD A , (IX + 0 )
104
+ @@: CP (IX + 0 )
105
+ JR Z , @B ; Wait for VBLANK
101
106
Setup_End: RES 4 , (IX + sysvar_vpd_pflags) ; Clear mode flag
102
107
LD HL , c_GETMODE
103
108
CALL Print_CString ; Get screen mode parameters.
@@ -106,24 +111,22 @@ Setup_End: RES 4, (IX+sysvar_vpd_pflags) ; Clear mode flag
106
111
LD A , (IX + sysvar_scrRows)
107
112
LD (Current_Rows) , A
108
113
LD A , (IX + sysvar_scrCols)
109
- LD (Current_Cols) , A
114
+ LD (Current_Cols) , A
115
+ LD A , (IX + sysvar_scrMode)
116
+ LD (Current_Mode) , A
110
117
POP IX
111
118
RET
112
119
113
120
; Restore original video mode.
114
- Restore_Screen: LD A , (Saved_Rows)
115
- CP 60
116
- RET Z ; Do nothing if we were already in mode 0
117
- CP 25
118
- JR NZ , @F
119
- LD L , 2
120
- JR Restore1
121
- @@: CP 48
122
- JR NZ , @F
123
- LD L , 1
124
- JR Restore1
125
- @@: RET ; We do not know about other modes, so please return.
126
- Restore1: LD A , 22
121
+ Restore_Screen: LD HL , c_ENABLECTRL ; Re-enable control keys
122
+ CALL Print_CString
123
+
124
+ LD A , (Saved_Mode)
125
+ LD L , A
126
+ LD A , (Current_Mode)
127
+ CP L
128
+ RET Z ; Do nothing if we had not changed modes.
129
+ LD A , 22
127
130
RST.LIL 10h
128
131
LD A , L
129
132
RST.LIL 10h
@@ -170,6 +173,8 @@ c_INVVID: DB 4
170
173
c_TRUEVID: DB 4
171
174
DB 17 , 15 ; Foreground white
172
175
DB 17 , 128 ; Background black
173
- c_GETMODE: DB 5 , 15 , 26 , 23 , 0 , vdp_mode ; Get screen mode parameters. Switch off paged mode, cancels text window.
176
+ c_FIXSETTINGS: DB 6 , 23 , 0 , $ 98 , 0 , 15 , 26 ; Switch off control keys, cancel page mode, text window.
177
+ c_ENABLECTRL: DB 4 , 23 , 0 , $ 98 , 1 ; Switch on control keys
178
+ c_GETMODE: DB 3 , 23 , 0 , vdp_mode ; Get screen mode parameters. Switch off paged mode, cancels text window.
174
179
; RAM
175
180
;
0 commit comments