mirror of
https://github.com/Tolik-Trek/ZX-SP-ROMs.git
synced 2026-06-15 01:11:46 +03:00
339 lines
7.7 KiB
NASM
339 lines
7.7 KiB
NASM
; "MENU PROGRAMS."
|
||
;*********************************
|
||
; FOR INCLUDE !!!
|
||
;*********************************
|
||
; Ž¡á«ã¦¨¢ ¨¥ Œ…<C592>ž
|
||
; HL - ¤à¥á â ¡«¨æë ¯à®£à ¬¬
|
||
; A - ®¬¥à ¢ â ¡«¨æ¥
|
||
; ¥á«¨ A=-1, â® ¢®§¢à â,
|
||
; ¨ ç¥ ¢ë¯®«¥¨¥
|
||
;*****************************
|
||
EXEC_PNT:
|
||
INC A
|
||
RET Z
|
||
EXEC_PNT_LOOP:
|
||
DEC A
|
||
JR Z,EXEC_HL
|
||
INC HL
|
||
INC HL
|
||
JR EXEC_PNT_LOOP
|
||
EXEC_HL:
|
||
LD E,(HL)
|
||
INC HL
|
||
LD D,(HL)
|
||
INC HL
|
||
EX DE,HL
|
||
JP (HL)
|
||
RET_FROM_M:
|
||
POP HL
|
||
RET
|
||
|
||
;****************************************
|
||
; <20>€<EFBFBD>Ž’€ ‘ MENU_128
|
||
;****************************************
|
||
; ‚•Ž„: - DE - ¤à¥á ¬¥î
|
||
; BC - ¤«¨ ¬¥î
|
||
; ‚›•Ž„: A - ¢ë¡à ë© ¯ãªâ
|
||
;****************************************
|
||
|
||
RUN_MENU:
|
||
PUSH IX
|
||
PUSH DE ; DE - MENU
|
||
PUSH BC ; BC - len_menu
|
||
|
||
LD A,(DE)
|
||
DEC A ; ç¨á«® CMD
|
||
CP 9
|
||
JR C,RUN_M_1
|
||
RUN_MN_ERR:
|
||
POP BC
|
||
POP DE
|
||
LD A,0FFh ; ¢¥àãâìáï á ®¬¥à®¬ 255 - ®è¨¡ª
|
||
POP IX
|
||
RET
|
||
RUN_M_1:
|
||
LD A,(5B00H)
|
||
CP #F5 ; ‘<>€‚<E282AC>ˆ’œ € ‘ ŠŽ„ŽŒ PUSH AF
|
||
JR NZ,RUN_MN_ERR
|
||
|
||
|
||
LD HL,LEN_P_M
|
||
ADD HL,BC ; HL - ã¦ ï ¤«¨ ¯ ¬ïâ¨
|
||
LD B,H ; HL -> BC
|
||
LD C,L
|
||
LD HL,(5C61h) ; HL - ç «® à ¡ ®¡«
|
||
|
||
PUSH BC
|
||
PUSH HL
|
||
|
||
CALL C_1655 ; ¯®«ãç¨âì à ¡®çãî ¯ ¬ïâì
|
||
|
||
POP DE
|
||
PUSH DE ; ç «® à ¡ ®¡«
|
||
|
||
LD BC,LEN_P_M ; ¤«¨ ¯à®£à ¬¬ë ¬¥î
|
||
LD HL,MENU_128 ; á ¬ ¯à®£à ¬¬
|
||
LDIR ; ¯à®£à ¬¬ ¯¥à¥¬¥é¥ . DE - ¬¥áâ® ¤«ï MENU
|
||
POP BC
|
||
PUSH BC ; ç «® ¯à®£à ¬¬ë
|
||
|
||
PUSH DE ; á®åà ¨âì ¬¥áâ® ¤«ï MENU
|
||
LD DE,MN_128_S ; ¤ ë¥ ¤«ï shifter
|
||
CALL SHIFTER ; ¨§¬¥¨âì ¤ ë¥ ¢ ᮮ⢥âá⢨¨ á ¯®«®¦¥¨¥¬ ¢ MEM
|
||
POP DE ; ¢¥àãâì ¬¥áâ® ¤«ï MENU
|
||
|
||
POP HL ; ç «® ¯à®£à ¬¬ë
|
||
POP IX ; ¤«¨ ¤ ëå
|
||
POP BC ; ¤«¨ ¬¥î
|
||
EX (SP),HL ; HL - ¬¥î
|
||
LDIR ; ¯¥à¥¬¥áâ¨âì ¤ ë¥ MENU
|
||
|
||
POP HL ; ¤à¥á ¯à®£à ¬¬ë MENU
|
||
PUSH HL
|
||
PUSH IX ; ¤«¨ à ¡. ®¡«
|
||
CALL JP_HL ; ¢ë§®¢ ¯à®£à ¬¬ë MENU
|
||
POP BC ; ¢¥àãâì ¤«¨ã à ¡ ®¡«
|
||
POP HL ; ¨ ç « ¯à®£à ¬¬ë
|
||
|
||
PUSH AF ; á®åà ¨âì ®¬¥à ¢ë¡®à
|
||
CALL C_19E8 ; ®á¢®¡®¤¨âì ¯ ¬ïâì !!
|
||
POP AF ; ¢¥àãâì ®¬¥à ¢ë¡®à
|
||
POP IX
|
||
RET ; ¢®§¢à â ¨§ ¯à®£à ¬¬ë RUN_MENU
|
||
|
||
;**************************************
|
||
; 128k MENU
|
||
;**************************************
|
||
MENU_PROG EQU 25B9h
|
||
SWAP_ROM EQU 5B00h
|
||
NEW_SP EQU 1F45h
|
||
RET_SP EQU 1F20h
|
||
|
||
;**************************************
|
||
; <20>à®£à ¬¬ ¢ë§®¢ MENU_128 ¨§ އ“.
|
||
;**************************************
|
||
MN_128_S:
|
||
DB SH_1-MENU_128+1
|
||
DB SH_2-MENU_128+1
|
||
DB SH_3-MENU_128+1
|
||
DB SH_4-MENU_128+1
|
||
DB SH_5-MENU_128
|
||
DB SH_6-MENU_128
|
||
DB SH_7-MENU_128
|
||
DB SH_8-MENU_128
|
||
DB SH_9-MENU_128
|
||
DB SH_A-MENU_128
|
||
DB SH_B-MENU_128
|
||
DB SH_C-MENU_128
|
||
DB 0
|
||
;**************************************
|
||
; <20>â ¯à®£à ¬¬ ¯¥à¥¬¥é ¥âáï ¢ ®§ã
|
||
;**************************************
|
||
MENU_128:
|
||
LD A,0
|
||
OUT (SYS_PORT_OFF),A
|
||
CALL SWAP_ROM
|
||
CALL NEW_SP
|
||
|
||
SH_1: LD DE,MENU_DAT-MENU_128
|
||
LD HL,0F6EAh
|
||
LD BC,4
|
||
LDIR
|
||
|
||
SH_2: LD HL,MENU_128_E-MENU_128
|
||
LD (0F6EAh),HL
|
||
SH_3: LD HL,MENU_128_E2-MENU_128
|
||
LD (0F6ECh),HL
|
||
JP MENU_PROG
|
||
|
||
RET_M EQU $-MENU_128
|
||
SH_4: LD HL,MENU_DAT-MENU_128
|
||
LD DE,0F6EAh
|
||
LD BC,4
|
||
LDIR
|
||
|
||
CALL RET_SP
|
||
CALL SWAP_ROM
|
||
EX AF,AF'
|
||
LD A,0
|
||
OUT (CNF_PORT),A
|
||
EX AF,AF'
|
||
RET
|
||
MENU_DAT:
|
||
DW 0,0
|
||
MENU_128_E:
|
||
DB 8
|
||
DB 0
|
||
SH_5: DW RET_M
|
||
DB 1
|
||
SH_6: DW RET_M
|
||
DB 2
|
||
SH_7: DW RET_M
|
||
DB 3
|
||
SH_8: DW RET_M
|
||
DB 4
|
||
SH_9: DW RET_M
|
||
DB 5
|
||
SH_A: DW RET_M
|
||
DB 6
|
||
SH_B: DW RET_M
|
||
DB 7
|
||
SH_C: DW RET_M
|
||
MENU_128_E2:
|
||
|
||
LEN_P_M EQU $-MENU_128
|
||
|
||
;**************************************
|
||
; RST 30 - ¯®«ã票¥ BC SPACES á ¤à¥á HL
|
||
; 19E8h - ®á¢®¡®¦¤¥¨¥ BC spaces á ¤à¥á HL
|
||
|
||
; HL - à ¡. ï祩ª
|
||
; BC - ¤à¥á ¯à®£à ¬¬ë
|
||
; DE - ¤à¥á ¤ ëå ¤«ï ¯¥à¥¬¥é¥¨ï
|
||
|
||
SHIFTER:
|
||
LD A,(DE) ; (DE) - SHIFT IN PROG
|
||
AND A
|
||
RET Z
|
||
INC DE
|
||
LD L,A
|
||
LD H,0
|
||
|
||
ADD HL,BC ; HL - ADRESS FOR SHIFT
|
||
LD A,(HL) ; (HL)=(HL)+BC
|
||
ADD A,C
|
||
LD (HL),A
|
||
INC HL
|
||
LD A,(HL)
|
||
ADC A,B
|
||
LD (HL),A
|
||
JR SHIFTER
|
||
|
||
;*******************************************
|
||
; Œ…<C592>ž : ¡ ©â 1 - ¤«ï १ã«ìâ â
|
||
; ¡ ©â 2 - ç¨á«® ¯ãªâ®¢ +1
|
||
; §¢ ¨¥ ¬¥î, ª®¤ 0FFh ( COPY )
|
||
; ¯ãªâë ¬¥î ®ª®ç ¨¥ ¡ ©â®¬ á
|
||
; ãáâ, 7-¬ ¡¨â®¬ + ¯ãáâ ï áâப !!
|
||
;*******************************************
|
||
BASIC_MENU:
|
||
; LD A,(HL)
|
||
; CP 'S'
|
||
; JP Z,SET_SYSTEM
|
||
|
||
LD DE,(CH_ADR)
|
||
PUSH DE
|
||
LD (CH_ADR),HL
|
||
CALL_48X 1C8Ch ; SYMBOL VAR
|
||
CALL_48X 2BF1h ; input txt !!!
|
||
; DE - adr
|
||
; BC - len
|
||
PUSH DE
|
||
PUSH BC
|
||
INC DE
|
||
CALL TST_M
|
||
JR C,NO_EXE_M
|
||
CALL RUN_MENU
|
||
LD (IY+0),255
|
||
NO_EXE_M:
|
||
POP BC
|
||
POP DE
|
||
LD (DE),A
|
||
POP HL
|
||
LD (CH_ADR),HL
|
||
JP SW_ROM
|
||
TST_M:
|
||
PUSH DE
|
||
PUSH BC
|
||
EX DE,HL
|
||
LD D,(HL)
|
||
INC D
|
||
LD A,255
|
||
CPIR
|
||
JR NZ,ERR_TST_M
|
||
LOOP_TST_M:
|
||
LD A,B
|
||
OR C
|
||
JR Z,ERR_TST_M
|
||
|
||
BIT 7,(HL)
|
||
INC HL
|
||
DEC BC
|
||
JR Z,LOOP_TST_M
|
||
DEC D
|
||
JR NZ,LOOP_TST_M
|
||
POP BC
|
||
POP DE
|
||
AND A
|
||
RET
|
||
|
||
ERR_TST_M:
|
||
POP BC
|
||
POP DE
|
||
LD A,255
|
||
SCF
|
||
RET
|
||
|
||
;**************************************
|
||
|
||
CALL_DOS_MOVE:
|
||
LD DE,DOS_PROG.Exec
|
||
LD HL,DOS_PROG
|
||
LD BC,DOS_PROG.Size
|
||
LDIR
|
||
RET
|
||
;
|
||
; HL - ¤à¥á ª®¬ ¤ë, BC - ¤«¨ ª®¬ ¤ë
|
||
CALL_DOS1:
|
||
LD C,(HL)
|
||
INC HL
|
||
LD B,0
|
||
LD DE,(5C59H)
|
||
LD (5C5DH),DE
|
||
LDIR
|
||
LD (5C61H),DE
|
||
LD (5C63H),DE
|
||
LD (5C65H),DE
|
||
CALL CALL_DOS_MOVE
|
||
JP DOS_PROG.Exec
|
||
CALL_DOS:
|
||
PUSH HL
|
||
PUSH DE
|
||
PUSH BC
|
||
PUSH AF
|
||
CALL CALL_DOS_MOVE
|
||
LD A,#13 ; #13 ¨§ AUTO_1303
|
||
LD (DOS_PROG.Patch),A
|
||
POP AF
|
||
POP BC
|
||
POP DE
|
||
POP HL
|
||
JP DOS_PROG.Exec
|
||
|
||
DOS_PROG:
|
||
DISP #5C00 - DOS_PROG.Size ;!HARDCODE
|
||
.Exec: PUSH AF
|
||
XOR A
|
||
OUT (SYS_PORT_OFF),A
|
||
POP AF
|
||
.Patch+2: CALL #3D03
|
||
PUSH AF
|
||
LD A,0
|
||
OUT (CNF_PORT),A
|
||
POP AF
|
||
RET
|
||
.Size EQU $ - .Exec
|
||
ENT
|
||
|
||
|
||
CONT_PROG:
|
||
LD HL,1AFDH
|
||
PUSH HL
|
||
LD HL,5B00H
|
||
PUSH HL
|
||
LD DE,5C71H
|
||
LD BC,1
|
||
LD A,0E8H
|
||
LD (DE),A
|
||
JP SW_ROM
|
||
; |