ZX-SP-ROMs/ZX_EXP/TEST.ASM
Anatoliy Belyanskiy f0ab2100a7 refactoring
2023-06-21 02:26:06 +10:00

339 lines
7.7 KiB
NASM
Raw Permalink 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.

; "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
;