mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
246 lines
5.3 KiB
NASM
246 lines
5.3 KiB
NASM
;///////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #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_16 ; !TODO ? - ¯®ª ®âà ¡ âë¢ ¥â ª ª ®è¨¡ª
|
||
DEC A
|
||
JR Z,.G320_56
|
||
DEC A
|
||
JR Z,.G640_16
|
||
;DEC A
|
||
;JP Z,.G640_56 ; !TODO ? - ¯®ª ®âà ¡ âë¢ ¥â ª ª ®è¨¡ª
|
||
.G320_16: 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_56: PUSH BC
|
||
LD HL,TAB_320x256_0
|
||
LD E,#11
|
||
CALL SETMODE
|
||
LD HL,TAB_320x256_1
|
||
LD E,#00
|
||
JP .SETMODE_END
|
||
;
|
||
.G640_16: 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)
|
||
;81h - GRAF 320 x 256 (256 colors)
|
||
;82h - GRAF 640 x 256 (16 colors)
|
||
;83h - GRAF 640 x 256 (256 colors) UNUSED
|
||
;-----------------------------------------------------------------------
|
||
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 #28,#20,#00,#00,#1B,#00,#00,#00 ;1
|
||
; 40x32. ⥪á⮢®¥, § ª®¬¥áâ® 8x8, #0B - ®¬¥à § ª®£¥.
|
||
TAB_40x32 DB #28,#20,#00,#00,#3B,#00,#00,#00 ;2
|
||
; 640x256. £à ä¨ç¥áª®¥, 0-© íªà
|
||
TAB_640x256_0 DB #28,#20,#00,#00,#00,#00,#00,#00 ;3
|
||
; 320x256. £à ä¨ç¥áª®¥, 0-© íªà
|
||
TAB_320x256_0 DB #28,#20,#00,#00,#20,#00,#00,#00 ;4
|
||
; 640x256. £à ä¨ç¥áª®¥, 1-© íªà
|
||
TAB_640x256_1 DB #28,#20,#00,#00,#40,#00,#28,#00 ;5
|
||
; 320x256. £à ä¨ç¥áª®¥, 1-© íªà
|
||
TAB_320x256_1 DB #28,#20,#00,#00,#60,#00,#28,#00 ;6
|
||
ScreenDescriptorTable.Size EQU ($ - ScreenDescriptorTable)/6
|
||
;.......................................................................
|
||
;
|
||
|
||
;-----------------------------------------------------------------------
|
||
; ‘®åà ¨âì íªà ⥪áâ. ०¨¬ .
|
||
; „«ï ¡ãä¥à íªà ¨á¯. 2-ï ¡ ª à áè¨à¥¨ï „Ž‘.
|
||
SAVETXT: PUSH AF
|
||
LD A,(VMODE)
|
||
;BIT 7,A
|
||
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,(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,(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
|
||
;/////////////////////////////////////////////////////////////////////// |