ZX-SP-ROMs/ZX_EXP/EXP_LP2.ASM
Anatoliy Belyanskiy 51b40b7af5 Setup
2023-06-17 04:36:58 +10:00

2013 lines
25 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.

;;.PRINTX "Low-print-2."
;==============================================================
;
; <09>ணࠬ¬  LOW PRINT for Sprinter-97.
;
;==============================================================
;=============================================================
; ”㭪樨 Bios Sprinter-97.
; <09> ¡®ç ï ¢¥àá¨ï 29.05.97
;=============================================================
; LP_OPEN_WIN Žâªàë⨥ ®ª­ 
; point 3D13h C=80h ‚室: B - ª®¤ ®ª­ .
; B=0 - Spectrum 32x24 B=1 - Spectrum 64x24
; B=2 - Spectrum 40x24 B=3 - Spectrum 80x24
; ‚ë室: DE - à §¬¥à ®ª­ 
;=============================================================
; LP_PRINT_ALL ‚뢮¤ ᨬ¢®«®¢ ­  íªà ­ á ⥪ã饣® §­ ª®¬¥áâ 
; point 3D13h C=81h ‚室: A - ᨬ¢®«,
; B - ç¨á«® ¢ë¢®¤¨¬ëå ᨬ¢®«®¢,
; … -  âਡãâ ᨬ¢®« 
;=============================================================
; LP_PRINT_SYM ‚뢮¤ ᨬ¢®«®¢ ­  íªà ­ á ⥪ã饣® §­ ª®¬¥áâ 
; ¡¥§  âਡãâ 
; point 3D13h C=82h ‚室: A - ᨬ¢®«,
; B - ç¨á«® ¢ë¢®¤¨¬ëå ᨬ¢®«®¢,
;=============================================================
; LP_PRINT_ATR ‚뢮¤  âਡã⮢ ­  íªà ­ á ⥪ã饣® §­ ª®¬¥áâ 
; point 3D13h C=83h ‚室: B - ç¨á«® ¢ë¢®¤¨¬ëå ᨬ¢®«®¢,
; … -  âਡãâ ᨬ¢®« 
;=============================================================
; LP_SET_PLACE “áâ ­®¢ª  ⥪ã饣® §­ ª®¬¥áâ 
; point 3D13h C=84h ‚室: E - §­ ª®¬¥áâ® ¯® £®à¨§®­â «¨
; D - §­ ª®¬¥áâ® ¯® ¢¥à⨪ «¨
;=============================================================
; LP_PRINT_LN ‚뢮¤ áâப¨ ᨬ¢®«®¢ ­  íªà ­ á ⥪ã饣®
; §­ ª®¬¥áâ 
; point 3D13h C=85h ‚室: HL -  ¤à¥á áâப¨
; B - ç¨á«® ¢ë¢®¤¨¬ëå ᨬ¢®«®¢,
; … -  âਡãâ ᨬ¢®«®¢
;=============================================================
; LP_PRINT_LN2 ‚뢮¤ áâப¨ ᨬ¢®«®¢ ­  íªà ­ á ⥪ã饣®
; §­ ª®¬¥áâ  ¡¥§  âਡã⮢
; point 3D13h C=86h ‚室: HL -  ¤à¥á áâப¨
; B - ç¨á«® ¢ë¢®¤¨¬ëå ᨬ¢®«®¢,
;=============================================================
; LP_PRINT_LN3 ‚뢮¤ áâப¨ ᨬ¢®«®¢ ­  íªà ­ á ⥪ã饣®
; §­ ª®¬¥áâ 
; point 3D13h C=87h ‚室: HL -  ¤à¥á áâப¨
; B - ç¨á«® ¢ë¢®¤¨¬ëå ᨬ¢®«®¢,
; D - à §¤¥«¨â¥«ì
; … -  âਡãâ ᨬ¢®«®¢
;=============================================================
; LP_PRINT_LN4 ‚뢮¤ áâப¨ ᨬ¢®«®¢ ­  íªà ­ á ⥪ã饣®
; §­ ª®¬¥áâ  ¡¥§  âਡã⮢
; point 3D13h C=88h ‚室: HL -  ¤à¥á áâப¨
; B - ç¨á«® ¢ë¢®¤¨¬ëå ᨬ¢®«®¢,
; D - à §¤¥«¨â¥«ì
;=============================================================
; LP_CLS_WIN Žç¨á⪠ ®ª­  íªà ­ 
; point 3D13h C=89h ‚室: DE - ¯®«®¦¥­¨¥ ®ª­ 
; B -  âਡãâ ®ç¨á⪨
; H - ¢ëá®â , L - è¨à¨­ 
;=============================================================
TEST_40 MACRO
; LOCAL LLL
; EX AF,AF'
; JR C,LLL
; INC D ; ०¨¬ 40
;LLL:
; EX AF,AF'
ENDM
DJ_NEXT_HL MACRO
DJNZ .LLL
CALL LP_NEXT_HL
.LLL:
ENDM
LP_OPEN_PG MACRO
IN A,(PAGE3)
LD C,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,C
LD (COPY_PAGE3),A
IN A,(RGADR)
LD (COPY_RGADR),A
ENDM
LP_CLOSE_PG MACRO
LD A,(COPY_RGADR)
OUT (RGADR),A
LD A,(COPY_PAGE3)
OUT (PAGE3),A
ENDM
LP_BEG_PM MACRO
EX AF,AF'
EXX
IN A,(PAGE3)
LD C,A
IN A,(RGADR)
LD B,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD (SYS_SP),SP
LD SP,SYS_SP
PUSH BC
LD HL,(WIN_MAP_IX+WIN_HL)
LD DE,(WIN_MAP_IX+WIN_DE)
LD BC,(WIN_MAP_IX+WIN_BC)
LD A,E
AND A
RRA
OUT (RGADR),A
EXX
EX AF,AF'
ENDM
LP_END_PM MACRO
EX AF,AF'
EXX
RLA
LD E,A
LD (WIN_MAP_IX+WIN_HL),HL ; ¬¥áâ® ¯¥ç â¨
LD (WIN_MAP_IX+WIN_DE),DE
LD (WIN_MAP_IX+WIN_BC),BC
POP BC
LD A,B
OUT (RGADR),A
LD A,C
OUT (PAGE3),A
LD SP,SYS_SP
EXX
EX AF,AF'
RET
ENDM
LP_PRINT_ALL:
CALL LP_BEG_P
EXX
LD C,A
LD A,50H
OUT (PAGE3),A
EXX
LP_PRINT_AL1:
EXX
LD A,D
OUT (RGADR),A
INC D
LD (HL),C
EXX
LD A,E
EXX
INC L
LD (HL),A
DEC L
; TEST_40
DJ_NEXT_HL
; DEC B
; CALL Z,LP_NEXT_HL
EXX
DJNZ LP_PRINT_AL1
LD A,SYS_PAGE
OUT (PAGE3),A
CALL LP_END_P
RET
LP_PRINT_SYM:
CALL LP_BEG_P
EXX
LD C,A
LD A,50H
OUT (PAGE3),A
EXX
LP_PRINT_SY1:
EXX
LD A,D
OUT (RGADR),A
LD (HL),C
INC D
TEST_40
DJ_NEXT_HL
; DEC B
; CALL Z,LP_NEXT_HL
EXX
DJNZ LP_PRINT_SY1
LD A,SYS_PAGE
OUT (PAGE3),A
CALL LP_END_P
RET
LP_PRINT_ATR:
CALL LP_BEG_P
LD A,E
EXX
LD C,A
LD A,50H
OUT (PAGE3),A
EXX
LP_PRINT_AT1:
EXX
LD A,D
OUT (RGADR),A
INC D
INC L
LD (HL),C
DEC L
TEST_40
DJ_NEXT_HL
; DEC B
; CALL Z,LP_NEXT_HL
EXX
DJNZ LP_PRINT_AT1
LD A,SYS_PAGE
OUT (PAGE3),A
CALL LP_END_P
RET
LP_PRINT_LINE:
CALL LP_BEG_P
EXX
; LD C,A
LD A,50H
OUT (PAGE3),A
LD C,RGADR
EXX
LP_PRINT_LN1:
EXX
OUT (C),D
INC D
EXX
LD A,(HL)
INC HL
EXX
LD (HL),A
EXX
LD A,E
EXX
INC L
LD (HL),A
DEC L
TEST_40
DJ_NEXT_HL
; DEC B
; CALL Z,LP_NEXT_HL
EXX
DJNZ LP_PRINT_LN1
LD A,SYS_PAGE
OUT (PAGE3),A
CALL LP_END_P
RET
LP_PRINT_LINE2:
CALL LP_BEG_P
LD A,50H
OUT (PAGE3),A
EXX
LD C,RGADR
EXX
LP_PRINT_LN2:
LD A,(HL)
INC HL
EXX
OUT (C),D
INC D
LD (HL),A
TEST_40
DJ_NEXT_HL
; DEC B
; CALL Z,LP_NEXT_HL
EXX
DJNZ LP_PRINT_LN2
LD A,SYS_PAGE
OUT (PAGE3),A
CALL LP_END_P
RET
LP_PRINT_LINE3:
CALL LP_BEG_P
EXX
; LD C,A
LD A,50H
OUT (PAGE3),A
EXX
LP_PRINT_LN3:
EXX
LD A,D
OUT (RGADR),A
INC D
EXX
LD A,(HL)
INC HL
CP D
JR NZ,LP_PR_L31
DEC HL
LD A,' '
LP_PR_L31:
EXX
LD (HL),A
EXX
LD A,E
EXX
INC L
LD (HL),A
DEC L
TEST_40
DJ_NEXT_HL
; DEC B
; CALL Z,LP_NEXT_HL
EXX
DJNZ LP_PRINT_LN3
LD A,SYS_PAGE
OUT (PAGE3),A
CALL LP_END_P
RET
LP_PRINT_LINE4:
CALL LP_BEG_P
EXX
; LD C,A
LD A,50H
OUT (PAGE3),A
EXX
LP_PRINT_LN4:
EXX
LD A,D
OUT (RGADR),A
EXX
LD A,(HL)
INC HL
CP D
JR NZ,LP_PR_L41
DEC HL
LD A,' '
LP_PR_L41:
EXX
LD (HL),A
INC D
TEST_40
DJ_NEXT_HL
; DEC B
; CALL Z,LP_NEXT_HL
EXX
DJNZ LP_PRINT_LN4
LD A,SYS_PAGE
OUT (PAGE3),A
CALL LP_END_P
RET
LP_PRINT_LINE5:
CALL LP_BEG_P
EXX
; LD C,A
LD A,50H
OUT (PAGE3),A
EXX
LP_PRINT_LN5:
EXX
LD A,D
OUT (RGADR),A
EXX
LD A,(HL)
INC HL
CP D
JR Z,LP_PR_L51
EXX
LD (HL),A
EXX
LD A,E
EXX
INC L
LD (HL),A
DEC L
INC D
TEST_40
DJ_NEXT_HL
; DEC B
; CALL Z,LP_NEXT_HL
EXX
DJNZ LP_PRINT_LN5
LP_PR_L51:
LD A,SYS_PAGE
OUT (PAGE3),A
CALL LP_END_P
RET
LP_PRINT_LINE6:
CALL LP_BEG_P
EXX
; LD C,A
LD A,50H
OUT (PAGE3),A
EXX
LP_PRINT_LN6:
EXX
LD A,D
OUT (RGADR),A
EXX
LD A,(HL)
INC HL
CP D
JR Z,LP_PR_L61
EXX
LD (HL),A
INC D
TEST_40
DJ_NEXT_HL
; DEC B
; CALL Z,LP_NEXT_HL
EXX
DJNZ LP_PRINT_LN6
LP_PR_L61:
LD A,SYS_PAGE
OUT (PAGE3),A
CALL LP_END_P
RET
;*************************************
LP_PRINT_LINE_DIR:
CALL LP_BEG_P
EXX
; LD C,A
LD A,50H
OUT (PAGE3),A
EXX
LP_PRINT_LN_D:
EXX
LD A,D
OUT (RGADR),A
EXX
LD A,(HL)
INC HL
CP B
JR Z,LP_LN_DD1
EXX
CP 14
JR NC,LP_PRINT_LN_DD
CP 7
JR C,LP_PRINT_LN_DD
SUB 7
JR Z,LP_BEEP
DEC A
JR Z,LP_BACK
DEC A
JR Z,LP_TAB
DEC A
JR Z,LP_LF
DEC A
JR Z,LP_XX
LP_PRINT_LN_D2:
DEC A
JR Z,LP_CLS
DEC A
JR Z,LP_CR
LP_XX: ; ¢ë¢®¤¨âì!
LP_PRINT_LN_DD:
LD (HL),A
INC D
LP_PRINT_LN_D1:
DJ_NEXT_HL
EXX
JR LP_PRINT_LN_D
LP_LN_DD1:
LD A,SYS_PAGE
OUT (PAGE3),A
CALL LP_END_P
RET
LP_PRINT_LN_D11:
LD A,50H
OUT (PAGE3),A
JR LP_PRINT_LN_D1
LP_BEEP:
JR LP_PRINT_LN_D2
LP_BACK:
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(WIN_MAP_IX+WIN_H_BEG)
CP D
JR Z,LP_PRINT_LN_D11
INC B
DEC D
JR LP_PRINT_LN_D11
LP_TAB:
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(WIN_MAP_IX+WIN_H_BEG)
SUB D
NEG
AND 07H
NEG
ADD A,8
LD C,A
LD A,50H
OUT (PAGE3),A
LP_TAB_L:
LD (HL),20H
INC D
DEC B
JR Z,LP_TAB_L1
DEC C
JR NZ,LP_TAB_L
JR LP_PRINT_LN_D1
LP_TAB_L1:
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(WIN_MAP_IX+WIN_H_BEG)
LD D,A
LD A,(WIN_MAP_IX+WIN_SIZE_REL)
LD B,A
LP_LF:
LD A,SYS_PAGE
OUT (PAGE3),A
INC L
INC L
INC L
INC L
LD A,(WIN_MAP_IX+WIN_V_END)
CP L
LP_CLS:
JR NC,LP_PRINT_LN_D11
LD A,(WIN_MAP_IX+WIN_V_BEG)
LD L,A ; ¢¥à­ãâìáï ­ ¢¥àå ¡¥§ áªà®«« !!!
; scrolling ????
JR LP_PRINT_LN_D11
; LP_CLS:
JR LP_PRINT_LN_D1
LP_CR:
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(WIN_MAP_IX+WIN_H_BEG)
LD D,A
LD A,(WIN_MAP_IX+WIN_SIZE_REL)
LD B,A
JR LP_PRINT_LN_D11
;*****************************************
LP_SET_PLACE:
CALL LP_BEG_P
CALL LP_AT_D
CALL LP_TAB_E
CALL LP_END_P
RET
LP_GET_PLACE:
CALL LP_BEG_P
LD A,(WIN_MAP_IX+WIN_H_BEG)
NEG
EXX
ADD A,D
EXX
LD E,A
LD A,(WIN_MAP_IX+WIN_V_BEG)
NEG
EXX
ADD A,L
DEC A
EXX
RRCA
RRCA
AND 3FH
LD D,A
CALL LP_END_P
RET
;*********************************************
;*********************************************
LP_CLS_WIN:
LD C,20h
JR LP_CLS_WIN_3
LP_CLS_WIN_2:
LD C,A
LP_CLS_WIN_3:
CALL LP_BEG_P
LD (SYS_WORK1),BC ; á®åà ­¨âì æ¢¥â
push de
LP_CLS_L2:
CALL LP_AT_D
CALL LP_TAB_E
PUSH DE
EXX
LD BC,(SYS_WORK1)
EXX
LD B,L
LD A,50H
OUT (PAGE3),A
LP_CLS_L1:
EXX
LD A,D
OUT (RGADR),A
LD (HL),C
INC L
LD (HL),B
DEC L
INC D
EXX
DJNZ LP_CLS_L1
LD A,SYS_PAGE
OUT (PAGE3),A
POP DE
INC D
DEC H
JR NZ,LP_CLS_L2
pop de
CALL LP_AT_D
CALL LP_TAB_E
CALL LP_END_P
RET
;*******************************************************
;
; WIN_MAP_SC - ª àâ  íªà ­  :-)
; 0 - hor size
; 1 - ver size
; 2 - hor place
; 3 - ver place
LP_SIZE: ; ®¯à¥¤¥«¥­¨¥ size
LP_OPEN_PG
LD DE,(WIN_MAP_IX+WIN_SIZE_H)
LP_CLOSE_PG
RET
; LD (WIN_MODE_SC),DE ; ¬¥áâ® ¯® £®à¨§®­â «¨ ¨ áâà ­¨æ  ¬®¤ë
; LD (WIN_MODE_SH),HL ; ¬¥áâ® ¯® ¢¥à⨪ «¨ á  ¤à¥á®¬
LP_AT_D:
LD A,(WIN_MAP_IX+WIN_SIZE_V)
EXX
LD L,A
EXX
LD A,D
EXX
LP_AT_DX:
SUB L
JR NC,LP_AT_DX
; JR Z,LP_AT_DX
ADD A,L
ADD A,A
ADD A,A
LD L,A
LD A,(WIN_MAP_IX+WIN_V_BEG)
ADD A,L
LD L,A
INC L
LD H,0C3H
EXX
RET
LP_TAB_E:
LD A,(WIN_MAP_IX+WIN_SIZE_REL)
EXX
LD D,A
EXX
LD A,E
EXX
LP_TAB_EX:
SUB D
JR NC,LP_TAB_EX
JR Z,LP_TAB_EX
NEG
LD B,A ; á®åà ­¨âì ᪮«ìª® ®áâ «®áì ᨬ¢®«®¢ ¢ áâப¥
NEG
ADD A,D
LD D,A
LD A,(WIN_MAP_IX+WIN_MODE)
BIT 5,A
JR Z,LP_NO_ADD_A
LD A,D
ADD A,A
LD D,A
LP_NO_ADD_A:
LD A,(WIN_MAP_IX+WIN_H_BEG)
ADD A,D
LD D,A
EXX
RET
;*************************************************************
;*******************************************
LP_NEXT_HL: ; ¢ëç¨á«¥­¨¥ ­®¢®£® ¬¥áâ 
LD A,SYS_PAGE
OUT (PAGE3),A
INC L
INC L
INC L
INC L
LD A,(WIN_MAP_IX+WIN_V_END)
CP L
JR NC,LP_NEXT_HL1
LD A,(WIN_MAP_IX+WIN_V_BEG)
LD L,A
INC L
LD H,0C3H
LP_NEXT_HL1:
LD A,(WIN_MAP_IX+WIN_H_BEG)
LD D,A
LD A,(WIN_MAP_IX+WIN_SIZE_REL)
LD B,A
LD A,50H
OUT (PAGE3),A
RET
; program set registers
; for low printer
LP_BEG_P:
EX AF,AF'
EXX
LP_OPEN_PG
LD HL,(WIN_MAP_IX+WIN_HL)
LD DE,(WIN_MAP_IX+WIN_DE)
LD BC,(WIN_MAP_IX+WIN_BC)
LD A,E
AND A
RRA
OUT (RGADR),A
EXX
EX AF,AF'
RET
; program init registers
; for low printer & save
WIN_GET_ZG: ; DE -  ¤à¥á ªã¤  ¯¥à¥á« âì ä®­â
LD HL,ZG_ADRESS
LD BC,800H
LDIR
AND A
RET
WIN_SET_ZG:
LP_SET_ZG:
EX AF,AF'
EXX
LP_OPEN_PG
CALL LP_SET_ZG1
LP_CLOSE_PG
EXX
EX AF,AF'
AND A
RET
LP_SET_ZG1:
IN A,(PAGE1)
LD (COPY_PAGE1),A
LD A,0FFH
OUT (PAGE1),A
EXX
EX AF,AF'
LD B,A
AND 0FH
ADD A,A
OUT (RGADR),A
LD A,B
RRCA
RRCA
RRCA
AND 18H
OR 040H
LD H,A
LD L,0
LD BC,0800H
EX DE,HL
LDIR
EX DE,HL
LD A,H
RRCA
RRCA
RRCA
DEC A
AND 3
ADD A,058H
LD H,A
; LD HL,05800H
LP_INI_L1:
LD (HL),L
INC L
JR NZ,LP_INI_L1
EXX
EX AF,AF'
LD A,(COPY_PAGE1)
OUT (PAGE1),A
RET
LP_INI_P:
EX AF,AF'
EXX
LP_OPEN_PG
LD A,(WIN_MAP_IX+WIN_MODE)
CP 0C0H
JR NC,LP_INI_NO_ZG ; ®âªàë⨥ ¡®à¤¥à ...
LD A,(WIN_MAP_IX+WIN_MODE_S)
BIT 0,A
JR NZ,LP_INI_NO_ZG ; ®âªàë⨥ Spectrum-Screen
LD A,(WIN_MAP_IX+WIN_MODE)
BIT 4,A
JR Z,LP_INI_NO_ZG ; ®âªàë⨥ £à ä¨ç¥áª®£® íªà ­ 
LD DE,(WIN_ZG) ; §­ ª®£¥­¥à â®à
EXX
EX AF,AF'
CALL LP_SET_ZG1
EXX
EX AF,AF'
LP_INI_NO_ZG:
LD A,(WIN_MAP_IX+WIN_H_BEG)
LD D,A
LD A,(WIN_MAP_IX+WIN_V_BEG)
LD L,A
INC L
LD H,0C3H
AND A
LD A,(WIN_MAP_IX+WIN_MODE)
BIT 5,A
LD A,(WIN_MAP_IX+WIN_SIZE_H)
JR NZ,LP_INI_40
ADD A,A
SCF
LP_INI_40:
LD B,A
LD (WIN_MAP_IX+WIN_SIZE_REL),A
; LD DE,(WIN_MODE_SC) ; ¬¥áâ® ¯® £®à¨§®­â «¨ ¨ áâà ­¨æ  ¬®¤ë
; LD HL,(WIN_MODE_SH) ; ¬¥áâ® ¯® ¢¥à⨪ «¨ á  ¤à¥á®¬
; INC HL
; LD B,0
; CALL LP_TAB_H2
EX AF,AF'
EXX
; JR LP_END_P
; program save registers
; for low printer
LP_END_P:
EX AF,AF'
EXX
RLA
LD E,A
LD (WIN_MAP_IX+WIN_HL),HL ; ¬¥áâ® ¯¥ç â¨
LD (WIN_MAP_IX+WIN_DE),DE
LD (WIN_MAP_IX+WIN_BC),BC
LP_CLOSE_PG
EXX
EX AF,AF'
AND A
RET
LP_END_P2:
EX AF,AF'
EXX
LP_CLOSE_PG
EXX
EX AF,AF'
RET
;********************************************************
LP_OPEN_S:
LD A,B
ADD A,A
CP LP_SC_TAB_SIZE
CCF
RET C
PUSH HL
LD HL,LP_SC_TAB
ADD A,L
LD L,A
LD A,H
ADC A,0
LD H,A
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
EX (SP),HL
RET
LP_SC_TAB:
DW LP_SET_32
DW LP_SET_64
DW LP_SET_40
DW LP_SET_80
DW LP_SET_32X
DW LP_SET_64X
DW LP_SET_40X
DW LP_SET_80X
DW PIC_SET_S1
DW PIC_SET_S2
; DW LP_SET_MNU
LP_SC_TAB_SIZE EQU $-LP_SC_TAB
;LP_SET_MNU:
; SCF
; RET
; LD IX,LP_SCR_MNU
; JR LP_SET_MODE
LP_SET_32:
LD HL,4104H
LP_SET_32X:
LD IX,LP_SCR_32
JR LP_SET_MODE
LP_SET_64:
LD HL,4104H
LP_SET_64X:
LD IX,LP_SCR_64
JR LP_SET_MODE
LP_SET_40:
LD HL,4000H
LP_SET_40X:
LD IX,LP_SCR_40
JR LP_SET_MODE
LP_SET_80:
LD HL,4000H
LP_SET_80X:
LD IX,LP_SCR_80
JR LP_SET_MODE
PIC_SET_S1:
LD IX,PIC_320X256_1
JR LP_SET_MODE
PIC_SET_S2:
LD IX,PIC_320X256_2
JR LP_SET_MODE
;**********************************************************
WIN_OPEN_WIN: ; HL - ¬¥áâ® ­  íªà ­¥ ¯® §­ ª®¬¥áâ ¬
; IX - ®¯¨á â¥«ì ®ª­ 
LP_OPEN_PG
LD (WIN_MAP_SC),IX ; ª àâ  ®ª­ 
PUSH HL
PUSH DE
LD HL,(WIN_MAP_SC)
LD DE,WIN_MAP_IX
LD BC,32
LDIR
LD IX,WIN_MAP_IX
POP DE
POP HL
LD L,(IX+WIN_PLACE_H)
LD H,(IX+WIN_PLACE_V)
LD (IX+WIN_MODE_E),E
JR WIN_OPEN_W1
PIC_FN0:
LP_SET_MODE: ; HL - PLACE
; IX - SIZE_HOR; IX+1 - SIZE_VER; IX+2,3; IX+4 - MODE;
; E - áâà ­¨æ  ¬®¤ë.
LD A,H
AND 10H ; ¯¥à¥¬¥áâ¨âì ¡¨â 4 ¢ ॣ¨áâà E
XOR E
LD E,A
LD A,L
AND 3FH
ADD HL,HL
ADD HL,HL
LD L,A
RES 7,H
RES 6,H
; LD A,H
; AND 3FH
; LD H,A
;LP_SET_MODE_M:
LP_OPEN_PG
LD (WIN_MAP_SC),IX ; ª àâ  ®ª­ 
PUSH HL
PUSH DE
LD HL,(WIN_MAP_SC)
LD DE,WIN_MAP_IX
LD BC,32
LDIR
LD IX,WIN_MAP_IX
POP DE
POP HL
LD (IX+WIN_PLACE_H),L
LD (IX+WIN_PLACE_V),H
LD (IX+WIN_MODE_E),E
WIN_OPEN_W1:
LD A,L
ADD A,A
INC A ; ¢ëç¨á«¥­¨¥ PORT_Y
BIT 4,E
JR NZ,LP_SET_NO_OR
OR 80H ; ¥á«¨ ¢ë¢®¤ ­  ¢â®à®© íªà ­
LP_SET_NO_OR:
LD (IX+WIN_H_BEG),A
LD D,A
LD A,(IX+WIN_SIZE_H)
ADD A,A
ADD A,D
LD (IX+WIN_H_END),A
LD (WIN_MODE_SC),DE ; ¬¥áâ® ¯® £®à¨§®­â «¨ ¨ áâà ­¨æ  ¬®¤ë
LD A,H
AND 3FH
ADD A,A
ADD A,A
LD L,A
LD H,0C3H
LD (WIN_MODE_SH),HL ; ¬¥áâ® ¯® ¢¥à⨪ «¨ á  ¤à¥á®¬
LD (IX+WIN_V_BEG),A
LD A,(IX+WIN_SIZE_V)
ADD A,A
ADD A,A
ADD A,L
LD (IX+WIN_V_END),A
LD L,(IX+WIN_V_BEG)
LD H,0C3H
LD B,(IX+WIN_SIZE_V) ; à §¬¥à ¯® ¢¥à⨪ «¨
LD (IX+WIN_WORK_1),0
LD A,(IX+WIN_MODE) ; §­ ª®£¥­¥à â®à ¯«îá ०¨¬
LD (IX+WIN_WORK_2),A
BIT 4,A
JR NZ,LP_SET_LOOP ; ¯¥à¥å®¤, ¥á«¨ ⥪áâ®¢ë© à¥¦¨¬
AND 0F0H
LD C,A
LD A,(IX+WIN_GR_X)
RRCA
RRCA
RRCA
LD D,A
AND 0FH
OR C
LD (IX+WIN_WORK_2),A
LD A,D
AND 0E0H
LD C,A
LD A,(IX+WIN_GR_Y)
AND 1FH
OR C
RLCA
RLCA
RLCA
LD (IX+WIN_WORK_1),A
LP_SET_LOOP:
LD D,(IX+WIN_H_BEG) ; D - ­ ç «® áâப¨ (PORT_Y)
LD C,(IX+WIN_SIZE_H) ; à §¬¥à ¯® £®à¨§®­â «¨
LD A,(IX+WIN_MODE) ; §­ ª®£¥­¥à â®à ¯«îá ०¨¬
PUSH BC
CALL LP_MODE_LINE
POP BC
INC L
INC L
INC L
INC L
DJNZ LP_SET_LOOP
LD A,(IX+WIN_MODE_E)
AND 1
OUT (RGMOD),A
; LD A,(IX+WIN_MODE)
; BIT 4,A
LP_CLOSE_PG
; RET Z
CALL LP_INI_P
; LD A,(WIN_MODE_SC)
; OUT (RGMOD),A
CALL LP_SIZE
; AND A
XOR A
RET
WIN_CLOSE_WIN:
SCF
RET
LP_MODE_LINE: ; “áâ ­®¢ª  ०¨¬  ­  «¨­¨¨
BIT 0,(IX+WIN_MODE_S)
JP NZ,LP_MODE_LINE2 ; ¨¤â¨ ­  ᯥªâàã¬
BIT 4,A
JP Z,LP_MODE_LINE3 ; ¨¤â¨ ­  £à ä¨ªã!
DEC D
; ⥪áâ®¢ë© à¥¦¨¬.
EX AF,AF'
LD A,50H
OUT (PAGE3),A
LD A,L ; ¢¥à⨪ «ì­®¥ ¯®«®¦¥­¨¥
CP 80H
JR NC,LP_EXIT_MODE
LP_MODE_RECURSE:
LD A,D ; £®à¨§®­â «ì­®¥ ¯®«®¦¥­¨¥
AND 7FH
SUB 80
JR C,LP_MODE_LL
SUB 48
NEG
LD E,A ; § ¯®¬­¨âì
ADD A,D
LD D,A ; ­®¢®¥ ¯®«®¦¥­¨¥
LD A,E ; ¢®ááâ ­®¢¨âì
RRA
AND 3FH
SUB C
JR NC,LP_EXIT_MODE
NEG
LD C,A ; ­®¢®¥ §­ ç¥­¨¥ C
JR LP_MODE_RECURSE
LP_MODE_LL:
NEG
RRA
AND 3FH
CP C
JR NC,LP_MODE_LR
LD C,A
LP_MODE_LR:
EX AF,AF'
INC D
LP_MD_LL1:
EX AF,AF'
LD A,D
OUT (RGADR),A
EX AF,AF'
LD (HL),A ; ०¨¬
INC D
EX AF,AF'
LD A,D
OUT (RGADR),A
EX AF,AF'
LD (HL),A ; ०¨¬
INC D
DEC C
JR NZ,LP_MD_LL1
EX AF,AF'
LP_EXIT_MODE:
LD A,SYS_PAGE
OUT (PAGE3),A
EX AF,AF'
RET
LP_MODE_LINE2: ; “áâ ­®¢ª  ०¨¬  ­  «¨­¨¨
; Spectrum mode
LD A,(IX+WIN_WORK_2)
LD B,(IX+WIN_WORK_1)
DEC D
EX AF,AF'
LD A,50H
OUT (PAGE3),A
LD A,L ; ¢¥à⨪ «ì­®¥ ¯®«®¦¥­¨¥
CP 80H
JR NC,LP_EXIT_MODE2
LP_MODE_RECURSE2:
LD A,D ; £®à¨§®­â «ì­®¥ ¯®«®¦¥­¨¥
AND 7FH
SUB 80
JR C,LP_MODE_LL2
SUB 48
NEG
LD E,A ; § ¯®¬­¨âì
ADD A,D
LD D,A ; ­®¢®¥ ¯®«®¦¥­¨¥
LD A,E ; ¢®ááâ ­®¢¨âì
RRA
AND 3FH
SUB C
JR NC,LP_EXIT_MODE2
NEG
LD C,A ; ­®¢®¥ §­ ç¥­¨¥ C
JR LP_MODE_RECURSE2
LP_MODE_LL2:
NEG
RRA
AND 3FH
CP C
JR NC,LP_MODE_LR2
LD C,A
LP_MODE_LR2:
EX AF,AF'
INC D
LP_MD_LL2:
EX AF,AF'
LD A,D
OUT (RGADR),A
EX AF,AF'
LD (HL),A ; ०¨¬
INC L
LD (HL),B
INC L
LD (HL),B
DEC L
DEC L
INC D
BIT 4,A
JR NZ,lp_md_ll3x
INC B
lp_md_ll3x:
EX AF,AF'
LD A,D
OUT (RGADR),A
EX AF,AF'
LD (HL),A ; ०¨¬
INC L
LD (HL),B
INC L
LD (HL),B
DEC L
DEC L
INC D
INC B
JR NZ,LP_NO_ADD_40
ADD A,40H
LP_NO_ADD_40:
DEC C
JR NZ,LP_MD_LL2
EX AF,AF'
LP_EXIT_MODE2:
LD A,SYS_PAGE
OUT (PAGE3),A
EX AF,AF'
LD (IX+WIN_WORK_1),B
LD (IX+WIN_WORK_2),A
RET
LP_MODE_LINE3: ; “áâ ­®¢ª  ०¨¬  ­  «¨­¨¨
; Grafic Mode
LD A,(IX+WIN_WORK_1)
LD B,(IX+WIN_WORK_2)
DEC D
EX AF,AF'
LD A,50H
OUT (PAGE3),A
LD A,L ; ¢¥à⨪ «ì­®¥ ¯®«®¦¥­¨¥
CP 80H
JR NC,LP_EXIT_MODE3
LP_MODE_RECURSE3:
LD A,D ; £®à¨§®­â «ì­®¥ ¯®«®¦¥­¨¥
AND 7FH
SUB 80
JR C,LP_MODE_LL3
SUB 48
NEG
LD E,A ; § ¯®¬­¨âì
ADD A,D
LD D,A ; ­®¢®¥ ¯®«®¦¥­¨¥
LD A,E ; ¢®ááâ ­®¢¨âì
RRA
AND 3FH
SUB C
JR NC,LP_EXIT_MODE3
NEG
LD C,A ; ­®¢®¥ §­ ç¥­¨¥ C
JR LP_MODE_RECURSE3
LP_MODE_LL3:
NEG
RRA
AND 3FH
CP C
JR NC,LP_MODE_LR3
LD C,A
LP_MODE_LR3:
EX AF,AF'
INC D
BIT 5,B
JR Z,LP_GR_640
LP_MD_LL3:
EX AF,AF'
LD A,D
OUT (RGADR),A
EX AF,AF'
LD (HL),B
INC L
LD (HL),a
INC L
LD (HL),0
DEC L
DEC L
INC D
INC D
INC A
LD E,A
AND 7
JR NZ,LP_NO_INC_B
LD A,E
SUB 8
LD E,A
INC B
LP_NO_INC_B:
LD A,E
DEC C
JR NZ,LP_MD_LL3
LP_640_RET:
EX AF,AF'
LP_EXIT_MODE3:
LD A,SYS_PAGE
OUT (PAGE3),A
EX AF,AF'
LD A,(IX+WIN_WORK_1)
ADD A,8
LD (IX+WIN_WORK_1),A
RET
LP_GR_640:
EX AF,AF'
LD A,D
OUT (RGADR),A
EX AF,AF'
LD (HL),B ; ०¨¬
INC L
LD (HL),A ; ०¨¬ 2
INC L
LD (HL),0
INC D
EX AF,AF'
LD A,D
OUT (RGADR),A
EX AF,AF'
LD (HL),0
DEC L
LD (HL),A
DEC L
LD (HL),B ; ०¨¬
INC D
INC A
LD E,A
AND 7
JR NZ,LP_NO_INC_B6
LD A,E
SUB 8
LD E,A
INC B
LP_NO_INC_B6:
LD A,E
DEC C
JR NZ,LP_GR_640
JP LP_640_RET
;*****************************************************************
LP_SCROLL_UD:
DEC B
JR Z,LP_SCROLL_UP
DEC B
JR Z,LP_SCROLL_DN
; DEC B
; JR Z,LP_SCROLL_UP2
; DEC B
; JR Z,LP_SCROLL_DN2
SCF
RET
LP_SCROLL_UP: ; ‚室 : D - ¢¥àå­ïï áâப  ( ®â 0 )
; ; E - ç¨á«® áªà®««¨à㥬ëå áâப
DEC E
RET Z
LP_OPEN_PG
LD B,E
LD E,0
PUSH BC
CALL LP_AT_D
CALL LP_TAB_E ; ¢ëç¨á«¨âì ¯¥à¥¬¥­­ë¥ ¤«ï áâப¨
POP BC
LP_SCROLL_L2:
EXX
PUSH HL
EXX
POP HL
LD E,L
LD D,H
INC L
INC L
INC L
INC L
LD A,(WIN_MAP_IX+WIN_V_END)
CP L
JR C,LP_SCROLL_U_EXIT ; ¥á«¨ ª®­¥æ, â® ¢ë室
PUSH BC
LD A,L
EXX
LD L,A
EXX
LD A,(WIN_MAP_IX+WIN_SIZE_H)
ADD A,A ; ç¨á«® ¡ ©â ¢ áâப¥ ¤«ï ¯¥à¥­®á 
ADD A,A
LD C,A
LD B,0
LD A,50H
OUT (PAGE3),A ; ®âªàëâì áâà ­¨æã ¤«ï ¯¥à¥­®á 
EXX
LD A,D ; ¯®«ãç¨âì ¯®àâ ­ ç «  áâப¨
EXX
LP_SCROLL_L1:
OUT (RGADR),A
INC A ; á«¥¤ãî饥 §­ ç¥­¨¥ ¯®àâ 
LDI
LDD
OUT (RGADR),A
INC A ; á«¥¤ãî饥 §­ ç¥­¨¥ ¯®àâ 
LDI
LDD
JP PE,LP_SCROLL_L1
LD A,SYS_PAGE
OUT (PAGE3),A
POP BC
DJNZ LP_SCROLL_L2
LP_SCROLL_U_EXIT:
LP_CLOSE_PG
RET
LP_SCROLL_DN: ; ‚室 : D - ¢¥àå­ïï áâப  ( ®â 0 )
; ; E - ç¨á«® áªà®««¨à㥬ëå áâப
DEC E
RET Z
LP_OPEN_PG
LD B,E
LD E,0
LD A,D
ADD A,B
; DEC A
LD D,A
PUSH BC
CALL LP_AT_D
CALL LP_TAB_E
POP BC
LP_SCROLL_D2:
EXX
PUSH HL
EXX
POP HL
LD E,L
LD D,H
DEC L
DEC L
DEC L
DEC L
LD A,(WIN_MAP_IX+WIN_V_BEG)
CP L
JR Z,LP_SCROLL_U_CONT
JR NC,LP_SCROLL_U_EXIT ; ¥á«¨ ª®­¥æ, â® ¢ë室
LP_SCROLL_U_CONT:
PUSH BC
LD A,L
EXX
LD L,A
EXX
LD A,(WIN_MAP_IX+WIN_SIZE_H)
ADD A,A
ADD A,A
LD C,A
LD B,0
LD A,50H
OUT (PAGE3),A
EXX
LD A,D
EXX
LP_SCROLL_D1:
OUT (RGADR),A
INC A
LDI
LDD
OUT (RGADR),A
INC A
LDI
LDD
JP PE,LP_SCROLL_D1
LD A,SYS_PAGE
OUT (PAGE3),A
POP BC
DJNZ LP_SCROLL_D2
LP_SCROLL_D_EXIT:
LP_CLOSE_PG
RET
WIN_GET_SYM: ; DE - ¬¥á⮠ᨬ¢®«  ¢ ®ª­¥
; € - ­®¬¥à ®ª­ 
; ¢ë室: HL - ᨬ¢®«/ âਡãâ B - §­ ª®£¥­¥à â®à
AND A
SCF
RET NZ
CALL LP_BEG_P
CALL LP_AT_D
CALL LP_TAB_E
LD A,50H
OUT (PAGE3),A
EXX
LD A,D
OUT (RGADR),A
LD A,(HL)
EXX
LD L,A
EXX
INC L
LD A,(HL)
EXX
LD H,A
EXX
DEC L
DEC L
LD A,(HL)
EXX
LD B,A
EXX
INC L
EXX
LD A,SYS_PAGE
OUT (PAGE3),A
CALL LP_END_P
RET
WIN_PUT_SYM: ; DE - ¬¥á⮠ᨬ¢®«  ¢ ®ª­¥
; € - ­®¬¥à ®ª­ 
; HL - ᨬ¢®«/ âਡãâ B - §­ ª®£¥­¥à â®à
AND A
SCF
RET NZ
CALL LP_BEG_P
CALL LP_AT_D
CALL LP_TAB_E
LD A,50H
OUT (PAGE3),A
EXX
LD A,D
OUT (RGADR),A
EXX
LD A,L
EXX
LD (HL),A
INC L
EXX
LD A,H
EXX
LD (HL),A
DEC L
DEC L
EXX
LD A,B
EXX
LD (HL),A
INC L
EXX
LD A,SYS_PAGE
OUT (PAGE3),A
CALL LP_END_P
RET
WIN_MOVE_WIN: ; HL - à §¬¥à ®ª­ 
; DE - ¯®«®¦¥­¨¥ ®ª­ 
AND A ; A - ­®¬¥à ®ª­ 
SCF ; IX - ­®¢®¥ ¯®«®¦¥­¨¥ ®ª­ 
RET NZ
PUSH IX
PUSH HL
LD B,0FFH
LD IX,0C000H
CALL WIN_COPY_WIN1
POP HL
POP DE
LD B,0FFH
LD IX,0C000H
CALL WIN_REST_WIN1
AND A
RET
WIN_COPY_WIN: ; HL - à §¬¥à á®å࠭塞®£® ®ª­ 
; DE - ¬¥áâ® á®å࠭塞®£® ®ª­ 
; IX -  ¤à¥á á®å࠭塞®£® ®ª­ , ¢ áâà ­¨æ¥ 4000h
; € - ­®¬¥à ®ª­ , B - áâà ­¨æ 
AND A
SCF
RET NZ
WIN_COPY_WIN1:
CALL LP_BEG_P
IN A,(PAGE1)
PUSH AF
CALL LP_AT_D
CALL LP_TAB_E
LD (SYS_WORK1),SP
LD A,B
OUT (PAGE3),A
LD A,50H
OUT (PAGE1),A
EXX
RES 7,H
LD C,D
EXX
LP_COPY_L2:
LD A,L
EXX
LD B,A
ADD A,A
DB 0DDH
ADD A,L
DB 0DDH
LD L,A
JR NC,LP_NO_INC_IX1
DB 0DDH
INC H
LP_NO_INC_IX1:
LD SP,IX
LD A,C
ADD A,B
LP_COPY_L1:
DEC A
OUT (RGADR),A
LD E,(HL)
INC L
LD D,(HL)
DEC L
PUSH DE
DJNZ LP_COPY_L1
INC HL
INC HL
INC HL
INC HL
EXX
DEC H
JR NZ,LP_COPY_L2
LD A,SYS_PAGE
OUT (PAGE3),A
LD SP,(SYS_WORK1)
POP AF
OUT (PAGE1),A
CALL LP_END_P2
AND A
RET
WIN_REST_WIN: ; HL - à §¬¥à á®å࠭塞®£® ®ª­ 
; DE - ¬¥áâ® á®å࠭塞®£® ®ª­ 
; IX -  ¤à¥á ¤ ­­ëå ¢®ááâ ­ ¢«¨¢ ¥¬®£® ®ª­ 
AND A
SCF
RET NZ
WIN_REST_WIN1:
CALL LP_BEG_P
IN A,(PAGE1)
PUSH AF
CALL LP_AT_D
CALL LP_TAB_E
LD (SYS_WORK1),SP
LD SP,IX
LD A,B
OUT (PAGE3),A
LD A,50H
OUT (PAGE1),A
EXX
RES 7,H
LD C,D
EXX
LP_REST_L2:
LD A,L
EXX
LD B,A
LD A,C
LP_REST_L1:
OUT (RGADR),A
INC A
POP DE
LD (HL),E
INC L
LD (HL),D
DEC L
DJNZ LP_REST_L1
INC HL
INC HL
INC HL
INC HL
EXX
DEC H
JR NZ,LP_REST_L2
LD A,SYS_PAGE
OUT (PAGE3),A
LD SP,(SYS_WORK1)
POP AF
OUT (PAGE1),A
CALL LP_END_P2
AND A
RET