Estex-DSS/DSS/API/SetVMod.asm
2025-10-30 23:25:12 +10:00

255 lines
5.4 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;///////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #50. ‚ë¡®à ०¨¬  íªà ­ .
;
; ¢å®¤: A - ०¨¬ íªà ­ 
; #02 - ⥪áâ®¢ë© 40x32x16 梥⮢
; #03 - ⥪áâ®¢ë© 80x32x16 梥⮢
; #81 - £à ä¨ç¥áª¨© 320x256x256 梥⮢
; #82 - £à ä¨ç¥áª¨© 640x256x16 梥⮢
; B - áâà ­¨æ  íªà ­  0/1
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
;///////////////////////////////////////////////////////////////////////
SETVMOD: CP %1000'0000
LD C,A
JR NC,.GRAPH
.TEXT_M: LD IX,BACKTXT
PUSH IX
EX AF,AF'
LD A,(VMODE)
LD (BACKTXT.VMODE),A
EX AF,AF'
OR A
JR Z,.NOMODE
DEC A
JR Z,.NOMODE
DEC A
LD HL,TAB_40x32
JR Z,.SET_TXT_MODE
DEC A
LD HL,TAB_80x32
JR Z,.SET_TXT_MODE
.NOMODE: POP IX
LD A,DSS_Error.sys.INVALID_VIDEO_MODE
SCF
RET
; “áâ ­®¢ª  £à ä. ०¨¬®¢
.GRAPH: CALL SAVETXT
AND #7F
JR Z,.G320_16c ; !TODO § ¬¥­¨âì ­  áãé¥áâ¢ãî騩 ०¨¬
DEC A
JR Z,.G320_256c
DEC A
JR Z,.G640_16c
;DEC A
;JP Z,.G640_256c ; !TODO § ¬¥­¨âì ­  áãé¥áâ¢ãî騩 ०¨¬
.G320_16c: LD A,DSS_Error.sys.INVALID_VIDEO_MODE
SCF
RET
;
.SET_TXT_MODE: PUSH BC
LD A,B
RLCA
RLCA
RLCA
RLCA
OR B
AND #11
XOR #10
LD E,A
.SETMODE_END: CALL SETMODE
POP BC
LD A,C
LD (VMODE),A
LD A,B
AND #01
OUT (SCREEN_SWITCH),A
LD A,(VMODE)
LD C,Dss.Mouse.SetVideoMode
RST ToDSS.Mouse
SAFE_PORTY
XOR A
RET
;
.G320_256c: PUSH BC
LD HL,TAB_320x256_0
LD E,#11
CALL SETMODE
LD HL,TAB_320x256_1
LD E,#00
JP .SETMODE_END
;
.G640_16c: PUSH BC
LD HL,TAB_640x256_0
LD E,#11
CALL SETMODE
LD HL,TAB_640x256_1
LD E,#00
JP .SETMODE_END
;
VMODE: DB #03
;-----------------------------------------------------------------------
; Žâªàëâì ®ª­®
; ¢å®¤: hl=®¯¨á â¥«ì ®ª­ 
; e=ä« £¨ ®ª­ 
;
;02h - TEXT 40 x 32 (16 colors)
;03h - TEXT 80 x 32 (16 colors)
;80h - GRAF 320 x 256 (16 colors) ;!TODO § ­ïâì ¤à㣨¬
;81h - GRAF 320 x 256 (256 colors)
;82h - GRAF 640 x 256 (16 colors)
;83h - GRAF 640 x 256 (256 colors) ;!TODO § ­ïâì ¤à㣨¬
;-----------------------------------------------------------------------
SETMODE: PUSH DE
LD DE,SYS_PAGE.SHARED_BUFFER_32b ; £àï§­ë© å ª. ª¨¤ ¥â ¤ ­­ë¥ ¢ ¡ãä¥à á«ã¦¥¡­®© áâà ­¨æë ¡¨®á .
LD BC,ScreenDescriptorTable.Size ; <20>ˆŽ ¯à¨ ¨á¯®«ì§®¢ ­¨¨ IX ¯à¥¤¯®« £ ¥â, çâ® ®­ 㪠§ë¢ ¥â
IN A,(SLOT3) ; ­   ¤à¥á ­¨¦¥ #C000 ¨ ¢áâ ¢«ï¥â ¢ âà¥âìî ¡ ­ªã áâà ­¨æã #FE
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LDIR
EX AF,AF'
OUT (SLOT3),A
.skip_EI: POP DE
LD IX,SYS_PAGE.SHARED_BUFFER_32b ; £àï§­ë© å ª.
LD C,BIOS.WIN_OPEN
RST ToBIOS
SAFE_PORTY
XOR A
RET
;IX+0 ;HORIZONTAL
;IX+1 ;VERTICAL
;IX+2 ;X - COORD
;IX+3 ;Y - COORD
;IX+4 ;MODE
;IX+5 ;EXT MODE
;IX+6 ;VIDEO RAM X OFFSET (SIGNPLACES)
;IX+7 ;VIDEO RAM Y OFFSET (SIGNPLACES)
;
;.......................................................................
;+0 X à §¬¥à ®ª­  ¢ §­ ª®¬¥áâ å
;+1 Y à §¬¥à ®ª­  ¢ §­ ª®¬¥áâ å
;+2 X ¯®«®¦. ®ª­  ­  íªà ­¥
;+3 Y ¯®«®¦. ®ª­  ­  íªà ­¥
;+4 ०¨¬ §­ ª®¬¥áâ 
;+5 ¤®¯. ०¨¬ §­ ª®¬¥áâ  (bit0=1 ᯥª.  ¤à¥á æ¨ï íªà ­ )
;+6 X ¯®«®¦. ¢ ¯®«¥ £à ä¨ª¨ (¢ §­ ª®¬¥áâ å)
;+7 Y ¯®«®¦. ¢ ¯®«¥ £à ä¨ª¨ (¢ §­ ª®¬¥áâ å)
ScreenDescriptorTable EQU $
; 80x32. ⥪á⮢®¥, §­ ª®¬¥áâ® 16x8, #0B - ­®¬¥à §­ ª®£¥­.
TAB_80x32 DB 40,32,0,0,%0001'1011,0,0,0 ;1
; 40x32. ⥪á⮢®¥, §­ ª®¬¥áâ® 8x8, #0B - ­®¬¥à §­ ª®£¥­.
TAB_40x32 DB 40,32,0,0,%0011'1011,0,0,0 ;2
; 640x256. £à ä¨ç¥áª®¥, 0-© íªà ­
TAB_640x256_0 DB 40,32,0,0,%0000'0000,0,0,0 ;3
; 320x256. £à ä¨ç¥áª®¥, 0-© íªà ­
TAB_320x256_0 DB 40,32,0,0,%0010'0000,0,0,0 ;4
; 640x256. £à ä¨ç¥áª®¥, 1-© íªà ­
TAB_640x256_1 DB 40,32,0,0,%0100'0000,0,40,0 ;5
; 320x256. £à ä¨ç¥áª®¥, 1-© íªà ­
TAB_320x256_1 DB 40,32,0,0,%0110'0000,0,40,0 ;6
ScreenDescriptorTable.Size EQU ($ - ScreenDescriptorTable)/6
;.......................................................................
;
/*
PIC_320X256_1:
DB 40,32,0,0,32,0,8,0
DB 0, 0,0,0, 0,0,0,0
*/
;-----------------------------------------------------------------------
; ‘®åà ­¨âì íªà ­ ⥪áâ. ०¨¬ .
; „«ï ¡ãä¥à  íªà ­  ¨á¯. 2-ï ¡ ­ª  à áè¨à¥­¨ï „Ž‘.
SAVETXT: PUSH AF
LD A,(VMODE)
CP %1000'0000
JR NC,.NOSAVET
SUB #02
JR C,.NOSAVET
;
PUSH BC
PUSH DE
PUSH HL
PUSH IX
;
PUSH AF
LD C,BIOS.LP_GET_PLACE
RST ToBIOS
LD (BACKTXT.CURS),DE
POP AF
LD IX,#C000
LD HL,#2050
OR A
JR NZ,.SVTEXT1
LD L,#28
.SVTEXT1: LD (BACKTXT.WinMax),HL
LD DE,#0000
LD A,((#FF00 & BANKTBL) + TXTPAGE)
LD B,A
LD C,BIOS.WIN_COPY
;[x] 29/9/23
LD A,R
PUSH AF
;
XOR A
DI
RST ToBIOS
;[x] 29/9/23
POP AF
JP PO,.skip_EI
EI
.skip_EI: ;
POP IX
POP HL
POP DE
POP BC
.NOSAVET: POP AF
RET
;-----------------------------------------------------------------------
BACKTXT: PUSH AF
.VMODE+1: LD A,#00
;BIT 7,A
CP %1000'0000
JR C,.NOBACKT
;
PUSH BC
PUSH DE
PUSH HL
PUSH IX
LD IX,#C000
.WinMax+1: LD HL,#2050
LD DE,#0000
LD A,((#FF00 & BANKTBL) + TXTPAGE)
LD B,A
LD C,BIOS.WIN_RESTORE
;[x] 29/9/23
LD A,R
PUSH AF
;
XOR A
DI
RST ToBIOS
;[x] 29/9/23
POP AF
JP PO,.no_ei
EI
.no_ei: ;
.CURS+1: LD DE,#0000
CALL LOCATE
POP IX
POP HL
POP DE
POP BC
.NOBACKT: POP AF
RET
;///////////////////////////////////////////////////////////////////////