mirror of
https://github.com/Tolik-Trek/ZX-SP-ROMs.git
synced 2026-06-15 09:21:45 +03:00
1744 lines
27 KiB
NASM
1744 lines
27 KiB
NASM
;
|
||
; EXPANSION VER 3.00 (C) 1997 ELSY Co.
|
||
;
|
||
;********************************************************************
|
||
;
|
||
;R0003 22-09-2001 ¨á¯à ¢«¥¨¥ §¢ ¨© ¢ ¬¥î "Hardware"
|
||
;R0002 22-09-2001 ¢áâ ¢«¥ ®¬¥à <20>‡“ ¨ äãªæ¨ï ¡¨®á ¤«ï ¥£® 0EDh
|
||
;R0001 22-09-2001 ¤®¡ ¢«¥ äãªæ¨ï GOTO Spectrum 0FBh
|
||
;
|
||
;********************************************************************
|
||
ORG 0
|
||
|
||
SPRIN2 EQU 2 ; 1 - ¢ª«î票¥ Sprinter-1 ¯¥à¢®© ¯à®è¨¢ª®©
|
||
; 2 - ¢ª«î票¥ Sprinter-2 ¯¥à¢®© ¯à®è¨¢ª®©
|
||
|
||
INCLUDE 'INC/SPRINT00.INC' ; ª®áâ âë, ¬ ªà®áë..
|
||
INCLUDE 'shared_includes/constants/zx_char_codes.inc'
|
||
PORT_JOI EQU 0FFh
|
||
|
||
;******************************
|
||
; ***** BEGIN EXPANSION *****
|
||
;******************************
|
||
|
||
A_0000:
|
||
JP GLOBAL_RESET
|
||
JR SET_BIOS_TO_RAM
|
||
;R0002
|
||
ROM_NUMBER: DW 0001h
|
||
|
||
;***************************************
|
||
DEFS 8-$
|
||
EXP_FNS_2_RET:
|
||
PUSH AF
|
||
LD A,D_ROM16OFF
|
||
OUT (SYS_PORT_OFF),A
|
||
POP AF
|
||
JR RST_18_1
|
||
|
||
;***************************************
|
||
DEFS 16-$
|
||
JR RST10
|
||
;***************************************
|
||
DEFS 24-$
|
||
JP EXP_FNS_RST18
|
||
RST_18_1:
|
||
CALL EXP_FNS_RST18
|
||
JR EXP_FNS_2_RET
|
||
|
||
|
||
; DEFS 2Bh-$
|
||
;***************************************
|
||
|
||
DEFS 20h-$
|
||
|
||
DEFS 28h-$
|
||
|
||
DEFS 30h-$
|
||
|
||
DEFS 38h-$
|
||
RST38: EI
|
||
RETI
|
||
|
||
; PUSH AF
|
||
; PUSH HL
|
||
; CALL INT_PROG1
|
||
; POP HL
|
||
; POP AF
|
||
; RET
|
||
RST10:
|
||
CALL_48 10h
|
||
RET
|
||
|
||
;**********************************
|
||
|
||
DEFS 66h-$ ; NMI
|
||
; RET ; १¥à¢ 3 ¡ ©â ¤«ï ª®¬ ¤ë JP
|
||
; NOP
|
||
; NOP
|
||
RETN
|
||
NOP
|
||
|
||
;**********************************
|
||
SET_BIOS_TO_RAM: ; ¯à®£à ¬¬ à ¡®â ¥â ¤à¥á¥ 0C000h
|
||
|
||
LD SP,0C0C0H
|
||
LD A,0E0H
|
||
LD C,PAGE3
|
||
IN B,(C)
|
||
CALL SET_ROM_PAGES+0C000H
|
||
JP NO_SUMX_EQ
|
||
|
||
;**********************************
|
||
|
||
;INKEYS:
|
||
; BIT 5,(IY+1)
|
||
; RET Z
|
||
; RES 5,(IY+1)
|
||
; LD A,(05C08h)
|
||
; RET
|
||
;
|
||
;WAIT_KEY:
|
||
; CALL INKEYS
|
||
; CALL NZ,BEEP
|
||
; RET NZ
|
||
; EI
|
||
; HALT
|
||
; JR WAIT_KEY
|
||
|
||
BEEP:
|
||
PUSH HL
|
||
PUSH DE
|
||
PUSH BC
|
||
PUSH AF
|
||
PUSH IX
|
||
|
||
LD HL,BEEP_RET
|
||
PUSH HL
|
||
LD HL,SW_ROM
|
||
PUSH HL
|
||
LD HL,03B5h
|
||
PUSH HL
|
||
LD HL,200
|
||
LD D,H
|
||
LD E,5
|
||
JP SW_ROM
|
||
BEEP_RET:
|
||
|
||
POP IX
|
||
POP AF
|
||
POP BC
|
||
POP DE
|
||
POP HL
|
||
RET
|
||
|
||
DEFS 0A0H-$
|
||
|
||
TABLE_X: ; â ¡«¨æ ¤«ï Sprinter POST-Tester-a
|
||
DB 00101000b ; "0"
|
||
DB 10111101b ; "1"
|
||
DB 00110010b ; "2"
|
||
DB 00110100b ; "3"
|
||
DB 10100101b ; "4"
|
||
DB 01100100b ; "5"
|
||
DB 01100000b ; "6"
|
||
DB 00111101b ; "7"
|
||
DB 00100000b ; "8"
|
||
DB 00100100b ; "9"
|
||
DB 00100001b ; "A"
|
||
DB 11100000b ; "B"
|
||
DB 01101010b ; "C"
|
||
DB 10110000b ; "D"
|
||
DB 01100010b ; "E"
|
||
DB 01100011b ; "F"
|
||
|
||
; ==========================
|
||
|
||
DEFS 0C0H-$
|
||
;****** ‚•Ž„ <20>Ž RANDOMIZE USR 15600 ***************
|
||
|
||
BEGIN: ; ‚室 ç¥à¥§ USR 15600
|
||
CALL CH_2
|
||
CALL COMAND_LINE ; ‚›<E2809A>Ž‹<C5BD>…<EFBFBD>ˆ… ŠŽŒ€<C592>„›, …‘‹ˆ …‘’œ
|
||
|
||
;****** ‚室 ¡¥§ ª®¬ ¤ë. *************************
|
||
|
||
JP SW_ROM_1 ; ‚އ‚<E280A1>€’ ‚ << MAIN MENU >>
|
||
;
|
||
CLS:
|
||
C_0D6B: ; CLS
|
||
CALL_48 0D6Bh
|
||
RET
|
||
;___________________________
|
||
|
||
RESTARTS EQU 0FFE0H
|
||
GLOBAL_RESET:
|
||
|
||
DI
|
||
IM 1
|
||
LD HL,RESTARTS
|
||
LD DE,RESTART_TXT
|
||
LD B,RESTART_TXT_L-4
|
||
RESTART_TEST:
|
||
LD A,(DE)
|
||
CP (HL)
|
||
JR NZ,NO_RESTART
|
||
INC HL
|
||
INC DE
|
||
DJNZ RESTART_TEST
|
||
JP RESTARTS
|
||
|
||
;**********************************
|
||
RESTART_TXT:
|
||
LD HL,RESTARTS ; 3
|
||
LD B,16 ; 2
|
||
REST_LOOP:
|
||
LD (HL),0 ; 2
|
||
INC HL ; 1
|
||
DJNZ REST_LOOP ; 2
|
||
NOP ; 1
|
||
NOP ; 1
|
||
LD A,1 ; 2
|
||
OUT (PAGE3),A ; 2
|
||
|
||
RESTART_TXT_L EQU $-RESTART_TXT
|
||
|
||
;**********************************
|
||
SETUP_TXT:
|
||
|
||
LD A,CNF_0+D_ROM16ON
|
||
OUT (CNF_PORT),A
|
||
|
||
LD HL,1000H
|
||
LD DE,8000H
|
||
LD BC,3000H
|
||
LDIR
|
||
|
||
LD A,CNF_0+D_ROM16OFF
|
||
OUT (CNF_PORT),A
|
||
|
||
LD HL,08005H
|
||
|
||
LD A,0FEh
|
||
LD BC,204Eh
|
||
OUT (C),A
|
||
|
||
LD A,7FH
|
||
IN A,(0FEH)
|
||
CPL
|
||
AND 1
|
||
EX AF,AF'
|
||
|
||
LD A,0FFh
|
||
OUT (C),A
|
||
|
||
EX AF,AF'
|
||
|
||
JP (HL)
|
||
|
||
SETUP_TXT_LEN EQU $-SETUP_TXT
|
||
|
||
SYSTEM_ID_TXT:
|
||
DB "NEW_BIOS"
|
||
|
||
NO_RESTART:
|
||
|
||
LD SP,0BFFFH
|
||
; CALL DCP_INIT
|
||
|
||
LD A,5 ; COM port for Printer OUT
|
||
OUT (COM_A),A
|
||
LD A,062H
|
||
OUT (COM_A),A
|
||
|
||
LD A,0CFH ; BITS I/O
|
||
OUT (LPT1_C),A
|
||
XOR A
|
||
OUT (LPT1_C),A
|
||
OUT (LPT1_D),A ; PRINTER - PORT - all zeros
|
||
|
||
;******* INIT SYSTEM PORTS ********************
|
||
|
||
LD BC,0FFEEh
|
||
XOR A
|
||
OUT (C),A ; 0 register - waits
|
||
INC C
|
||
OUT (C),A ; set 0 Waits
|
||
|
||
DEC C
|
||
DEC A ; A->3
|
||
; LD A,3 ; 3-nd register - boundaries
|
||
OUT (C),A
|
||
INC C
|
||
XOR A
|
||
OUT (C),A ; disable CS0,CS1
|
||
|
||
; no boundary set!
|
||
|
||
; ==== POST PROCs ==================================
|
||
|
||
POST_TEST:
|
||
; ************************************************
|
||
; ===== Point 0 =======
|
||
; ************************************************
|
||
|
||
LD A,(00A0h)
|
||
OUT (LPT1_D),A ; "0" - start
|
||
|
||
; ==== TEST RAM BUS ========
|
||
|
||
TEST_RAM_BUS:
|
||
LD BC,0
|
||
LD HL,0C000h
|
||
LD DE,00055h
|
||
|
||
LOOP_TEST_RB:
|
||
LD (HL),E
|
||
INC L
|
||
LD (HL),D
|
||
DEC L
|
||
LD A,(HL)
|
||
XOR E
|
||
OR C
|
||
LD C,A
|
||
INC L
|
||
LD A,(HL)
|
||
XOR D
|
||
OR B
|
||
LD B,A
|
||
DEC L
|
||
|
||
DEC E
|
||
INC D
|
||
JR NZ,LOOP_TEST_RB
|
||
LD A,E
|
||
CPL
|
||
LD E,A
|
||
INC L
|
||
INC L
|
||
BIT 4,L
|
||
JR Z,LOOP_TEST_RB
|
||
|
||
LD A,B
|
||
OR C
|
||
JR Z,POST_RET_1
|
||
; ************************************************
|
||
; JP POST_RET_1 ; for test POST procedure
|
||
; ************************************************
|
||
|
||
ERROR_RAM_BUS:
|
||
LD HL,0A0h
|
||
ERB_2:
|
||
BIT 0,C
|
||
JR Z,ERB_1
|
||
LD A,(HL)
|
||
AND 11011111b
|
||
OUT (LPT1_D),A
|
||
|
||
LD DE,0
|
||
LOOP_WTT:
|
||
DEC DE
|
||
LD A,D
|
||
OR E
|
||
JR NZ,LOOP_WTT
|
||
ERB_1:
|
||
LD A,C
|
||
RRA
|
||
RR B
|
||
RR C
|
||
|
||
INC L
|
||
LD A,L
|
||
AND 0AFh
|
||
LD L,A
|
||
JR ERB_2
|
||
|
||
; ************************************************
|
||
; ===== Point 1 ==============
|
||
; ************************************************
|
||
|
||
POST_RET_1:
|
||
|
||
LD A,(0A1h)
|
||
OUT (LPT1_D),A
|
||
|
||
; ===== TEST ADRESS BUS ======
|
||
|
||
TEST_ADRESS_BUS:
|
||
|
||
; LD B,0
|
||
; LD HL,0C001h
|
||
|
||
; LD (HL),B
|
||
; ADD HL,HL
|
||
; LD A,H
|
||
; OR 0C0h
|
||
; LD H,A
|
||
; INC B
|
||
|
||
LD HL,0C000h
|
||
LD DE,00000h
|
||
TSAB_1:
|
||
LD (HL),E
|
||
INC L
|
||
LD (HL),D
|
||
INC HL
|
||
INC DE
|
||
INC DE
|
||
BIT 7,H
|
||
JR NZ,TSAB_1
|
||
|
||
DEC HL
|
||
DEC DE
|
||
DEC DE
|
||
TSAB_2:
|
||
LD A,(HL)
|
||
CP D
|
||
JR NZ,ER_TSA
|
||
DEC HL
|
||
LD A,(HL)
|
||
CP E
|
||
JR NZ,ER_TSA
|
||
DEC HL
|
||
DEC DE
|
||
DEC DE
|
||
LD A,H
|
||
CP 0BFh
|
||
JR NZ,TSAB_2
|
||
JR POST_RET_2
|
||
ER_TSA:
|
||
; ************************************************
|
||
; JP POST_RET_2 ; for test POST procedure
|
||
; ************************************************
|
||
|
||
TSAB_4:
|
||
LD C,D
|
||
LD B,11011111b
|
||
LD IX,TSAB_3
|
||
JR OUT_C_BYTE
|
||
TSAB_3:
|
||
LD C,E
|
||
LD B,0FFh
|
||
LD IX,TSAB_4
|
||
JR OUT_C_BYTE
|
||
|
||
; ===== OUT BYTE PROGRAM =======
|
||
|
||
OUT_C_BYTE:
|
||
LD A,C
|
||
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
|
||
AND 0Fh
|
||
OR 0A0h
|
||
LD L,A
|
||
LD H,0
|
||
LD A,(HL)
|
||
AND B
|
||
OUT (LPT1_D),A
|
||
|
||
EXX
|
||
LD DE,0
|
||
LOOP_WTT2:
|
||
DEC DE
|
||
LD A,D
|
||
OR E
|
||
JR NZ,LOOP_WTT2
|
||
LD A,0FFh
|
||
OUT (LPT1_D),A
|
||
LOOP_WTT21:
|
||
DEC DE
|
||
LD A,D
|
||
OR E
|
||
JR NZ,LOOP_WTT21
|
||
EXX
|
||
|
||
LD A,C
|
||
AND 0Fh
|
||
OR 0A0h
|
||
LD L,A
|
||
LD A,(HL)
|
||
OUT (LPT1_D),A
|
||
|
||
EXX
|
||
LD DE,0
|
||
LOOP_WTT3:
|
||
DEC DE
|
||
LD A,D
|
||
OR E
|
||
JR NZ,LOOP_WTT3
|
||
LD A,0FFh
|
||
OUT (LPT1_D),A
|
||
LOOP_WTT31:
|
||
DEC DE
|
||
LD A,D
|
||
OR E
|
||
JR NZ,LOOP_WTT31
|
||
EXX
|
||
|
||
JP (IX)
|
||
|
||
; ************************************************
|
||
; ===== Point 2 =========
|
||
; ************************************************
|
||
|
||
POST_RET_2:
|
||
|
||
LD A,(0A2h)
|
||
OUT (LPT1_D),A
|
||
|
||
; ===== INIT DCP ========
|
||
|
||
LD HL,POST_RET_3 ; INIT PORTS
|
||
JP DCP_INIT
|
||
|
||
; ************************************************
|
||
; ===== Point 3 =========
|
||
; ************************************************
|
||
|
||
POST_RET_3:
|
||
LD A,(0A3h)
|
||
OUT (LPT1_D),A
|
||
|
||
IN A,(PAGE3) ; First IN command - OPEN DCP
|
||
|
||
; ===== TEST RAM PAGES ==
|
||
|
||
IN A,(PAGE3)
|
||
EX AF,AF'
|
||
|
||
POST_TEST_PAGES:
|
||
|
||
LD B,0
|
||
TSPG_1:
|
||
LD A,0FFh
|
||
LD I,A
|
||
LD A,B
|
||
OUT (PAGE3),A
|
||
LD A,0
|
||
LD I,A
|
||
IN A,(PAGE3)
|
||
CP B
|
||
JR NZ,ERTP
|
||
DJNZ TSPG_1
|
||
|
||
EX AF,AF'
|
||
OUT (PAGE3),A
|
||
JR POST_RET_4
|
||
|
||
ERTP:
|
||
LD C,B
|
||
LD IX,ERTP_1
|
||
ERTP_1: LD B,11011111b
|
||
JP OUT_C_BYTE
|
||
|
||
; ************************************************
|
||
; ===== Point 4 =========
|
||
; ************************************************
|
||
|
||
POST_RET_4:
|
||
LD A,(0A4h)
|
||
OUT (LPT1_D),A
|
||
|
||
LD B,0
|
||
loop4test:
|
||
IN A,(0)
|
||
CP 0FFh
|
||
; JR NZ,error_bus
|
||
DJNZ loop4test
|
||
JR POST_RET_5
|
||
error_bus:
|
||
|
||
LD C,A
|
||
erb1:
|
||
LD IX,erbr1
|
||
LD B,11011111b
|
||
JP OUT_C_BYTE
|
||
erbr1:
|
||
LD A,11011111b
|
||
OUT (LPT1_D),A
|
||
|
||
LD DE,0
|
||
LOOP_WTT4:
|
||
DEC DE
|
||
LD A,D
|
||
OR E
|
||
JR NZ,LOOP_WTT4
|
||
JR erb1
|
||
|
||
; ************************************************
|
||
; ===== Point 5 =========
|
||
; ************************************************
|
||
|
||
POST_RET_5:
|
||
LD A,(0A5h)
|
||
OUT (LPT1_D),A
|
||
|
||
;=== post end ===============
|
||
|
||
;-( )===========================
|
||
; LD SP,0BFFFh
|
||
; CALL EMM_FN7 ; ¨¨æ¨ «¨§ æ¨ï ¯ ¬ïâ¨
|
||
; JP Spectrum_0 ; for TEST!
|
||
;-( )===========================
|
||
|
||
|
||
IN A,(PAGE3)
|
||
EX AF,AF' ; SAVE
|
||
LD A,SYS_PAGE
|
||
OUT (PAGE3),A
|
||
|
||
|
||
; LD HL,SYSTEM_ID
|
||
; LD DE,SYSTEM_ID_TXT
|
||
; LD B,8
|
||
;NEW_BIOS_L:
|
||
; LD A,(DE)
|
||
; CP (HL)
|
||
; JR NZ,NO_NEW_BIOS
|
||
; INC HL
|
||
; INC DE
|
||
; DJNZ NEW_BIOS_L
|
||
|
||
; LD A,(HL)
|
||
; DEC HL
|
||
; LD (HL),0 ; § ¡¨âì "NEW_BIOS" ¤«ï ¢ë室 ¯® RESET
|
||
; OUT (PAGE3),A
|
||
|
||
; JP 0C003H ; INIT_NEW_BIOS
|
||
|
||
NO_SUMX_EQ:
|
||
|
||
LD A,SYS_PAGE
|
||
OUT (PAGE3),A
|
||
|
||
NO_NEW_BIOS:
|
||
|
||
DB 0FDH
|
||
LD A,L
|
||
LD L,A
|
||
DB 0FDH
|
||
LD A,H
|
||
LD H,A
|
||
|
||
; LD SP,SYS_SP
|
||
; PUSH IY
|
||
; POP HL
|
||
|
||
LD BC,0107H
|
||
AND A
|
||
SBC HL,BC
|
||
JR NZ,NO_CONFIG_
|
||
|
||
LD (CONFIG_BYTE),IX
|
||
|
||
NO_CONFIG_:
|
||
LD HL,(CONFIG_BYTE)
|
||
|
||
EX AF,AF'
|
||
OUT (PAGE3),A
|
||
|
||
;*********************************
|
||
|
||
LD A,0
|
||
OUT (PAGE3),A
|
||
OUT (PAGE0),A
|
||
LD A,5
|
||
OUT (PAGE1),A
|
||
LD A,2
|
||
OUT (PAGE2),A
|
||
|
||
LD SP,0BFFFH
|
||
PUSH HL
|
||
|
||
CALL PORTS_INIT
|
||
CALL EMM_FN7 ; ¨¨æ¨ «¨§ æ¨ï ¯ ¬ïâ¨
|
||
|
||
POP HL ; ª®ä¨£ãà æ¨ï
|
||
LD A,H
|
||
CP 0FFH
|
||
JR NZ,NO_SETUP_1
|
||
LD A,L
|
||
|
||
IF SPRIN2 EQ 2
|
||
CP 0FDH
|
||
; LD BC,0FFFDH ; Ю䍣ãà æ¨ï Sprinter-2
|
||
PG_SP1 equ 0ECH
|
||
PG_SP2 equ 0EEH
|
||
PG_AY equ 0EAH
|
||
ELSE
|
||
; LD BC,0FFFEH ; Ю䍣ãà æ¨ï Sprinter-1
|
||
CP 0FEH
|
||
PG_AY equ 0EAH
|
||
ENDIF
|
||
JR NZ,NO_SETUP_2
|
||
; AND A
|
||
; SBC HL,BC
|
||
; JR NZ,NO_SETUP_
|
||
|
||
;**************************************
|
||
; COPY BIOS ’Ž RAM ????
|
||
;**************************************
|
||
;
|
||
;
|
||
;
|
||
;**************************************
|
||
|
||
; LD A,07FH
|
||
; IN A,(0FEH)
|
||
; RRCA
|
||
; JR NC,NO_SETUP_
|
||
|
||
; LD A,0
|
||
; OUT (PAGE3),A
|
||
; OUT (PAGE0),A
|
||
; LD A,5
|
||
; OUT (PAGE1),A
|
||
; LD A,2
|
||
; OUT (PAGE2),A
|
||
|
||
LD A,0FFh
|
||
LD BC,204Eh ; system_port
|
||
OUT (C),A
|
||
|
||
LD SP,0BFFFH
|
||
LD HL,L_PENTAGON
|
||
CALL SINC_DEF
|
||
|
||
LD SP,0BFFFH
|
||
LD HL,L_PENTAGON
|
||
CALL SINC_DEF
|
||
|
||
LD HL,SETUP_TXT
|
||
LD DE,0C000H
|
||
LD BC,SETUP_TXT_LEN
|
||
LDIR
|
||
CALL 0C000H
|
||
JP NO_SETUP_1
|
||
|
||
GOTO_SPEC:
|
||
IN A,(PAGE3)
|
||
EX AF,AF'
|
||
LD A,SYS_PAGE
|
||
OUT (PAGE3),A
|
||
LD A,B
|
||
LD (CONFIG_DE+1),A
|
||
EX AF,AF'
|
||
OUT (PAGE3),A
|
||
|
||
NO_SETUP_2:
|
||
; CP 0FCH
|
||
; JR Z,SPECTRUM_0 ; Ю䍣ãà æ¨ï AY
|
||
|
||
NO_SETUP_1:
|
||
|
||
LD A,(0A8h)
|
||
OUT (LPT1_D),A
|
||
|
||
LD A,0FEh ; ACC-off
|
||
LD BC,204Eh
|
||
OUT (C),A
|
||
|
||
SND_TEST_RET:
|
||
LD SP,0BFFFH
|
||
|
||
LD HL,L_PENTAGON
|
||
CALL SINC_DEF
|
||
CALL SET_PAL_ZX
|
||
|
||
LD HL,4104H
|
||
LD E,0
|
||
LD B,4
|
||
CALL LP_OPEN_S
|
||
|
||
LD HL,5104H
|
||
LD E,0
|
||
LD B,4
|
||
CALL LP_OPEN_S
|
||
|
||
;*************************************
|
||
|
||
LD D,35H
|
||
CALL CMOS_RD
|
||
BIT 0,A
|
||
|
||
; PUSH AF
|
||
; CALL Z,SPRINTER_1
|
||
; POP AF
|
||
; PUSH AF
|
||
; CALL NZ,AY8910
|
||
; POP AF
|
||
|
||
;*************************************
|
||
|
||
SPECTRUM_0:
|
||
XOR A ; § ¤ ç 0, ०¨¬ 256 ª¨«®¡ ©â
|
||
SPECTRUM_TASK:
|
||
LD IX,BASIC_128
|
||
JP INIT_PAGES ; ¨¨æ¨ «¨§ æ¨ï ®¬¥à®¢ áâà ¨æ ०¨¬ ᯥªâàã¬
|
||
|
||
BASIC_128:
|
||
start_basic:
|
||
LD SP,0BFFFH
|
||
LD DE,5B00H ; § ¯ã᪠¯à®£à ¬¬ë BASIC-¥.
|
||
LD HL,RES128_PROG
|
||
LD BC,LEN_RES128
|
||
LDIR
|
||
DI
|
||
JP 5B00H
|
||
|
||
;***********************************
|
||
; ˆ¨æ¨ «¨§ æ¨ï ¯®à⮢
|
||
|
||
PORTS_INIT:
|
||
|
||
LD BC,ISA_PORT
|
||
LD A,0FFH
|
||
OUT (C),A
|
||
RESETTTT:
|
||
DEC A
|
||
JR NZ,RESETTTT
|
||
OUT (C),A
|
||
|
||
LD A,D_TBON+CNF_0
|
||
OUT (CNF_PORT),A
|
||
LD A,D_ROM16OFF ; AROM16 = 0
|
||
OUT (CNF_PORT),A ; ¢ª«îç¨âì á¨á⥬ãî áâà ¨æã
|
||
|
||
CALL DOS_OFF
|
||
|
||
XOR A
|
||
LD BC,01FFDH
|
||
OUT (C),A ; Scorp port !!!
|
||
LD B,7FH
|
||
OUT (C),A ; 128 port !!!
|
||
|
||
LD BC,0FFEFh ; á¡à®á WAIT-®¢ !!!
|
||
LD A,0
|
||
OUT (C),A
|
||
;
|
||
; ˆ¨æ¨ «¨§ æ¨ï ¯®á«¥¤®¢ ⥫쮣® ¯®àâ ª« ¢¨ âãàë
|
||
|
||
LD A,0
|
||
OUT (COM_A),A
|
||
|
||
LD A,1
|
||
OUT (COM_A),A
|
||
LD A,0 ; 18H ¢ª«î票¥ ¯à¥àë¢ ¨©
|
||
OUT (COM_A),A
|
||
|
||
LD A,3
|
||
OUT (COM_A),A
|
||
LD A,0C1h
|
||
OUT (COM_A),A
|
||
|
||
LD A,4
|
||
OUT (COM_A),A
|
||
LD A,5h ; 5/7 ¯ à¨â¥â?
|
||
OUT (COM_A),A
|
||
|
||
LD A,5
|
||
OUT (COM_A),A
|
||
LD A,062H
|
||
OUT (COM_A),A
|
||
|
||
; ˆ¨æ¨ «¨§ æ¨ï ¬ëè¨
|
||
|
||
LD A,0 ; for MOUSE
|
||
OUT (COM_B),A
|
||
|
||
LD A,1
|
||
OUT (COM_B),A
|
||
LD A,0
|
||
OUT (COM_B),A
|
||
|
||
LD A,3
|
||
OUT (COM_B),A
|
||
LD A,041H
|
||
OUT (COM_B),A
|
||
|
||
LD A,4
|
||
OUT (COM_B),A
|
||
LD A,44H
|
||
OUT (COM_B),A
|
||
|
||
LD A,5
|
||
OUT (COM_B),A
|
||
LD A,0E0H
|
||
OUT (COM_B),A
|
||
|
||
; ˆ¨æ¨ «¨§ æ¨ï â ©¬¥à ¬ëè¨
|
||
|
||
LD A,85 ; for MOUSE
|
||
OUT (STC0_C),A
|
||
LD A,45
|
||
OUT (STC0_C),A
|
||
|
||
; ˆ¨æ¨ «¨§ æ¨ï ¯ à ««¥«ì®£® ¯®àâ 1 (¯à¨â¥à)
|
||
|
||
; LD A,0CFH ; BITS I/O
|
||
; OUT (LPT1_C),A
|
||
; XOR A
|
||
; OUT (LPT1_C),A
|
||
; OUT (LPT1_D),A ; PRINTER - PORT - all zeros
|
||
|
||
LD A,00FH ; OUT
|
||
OUT (LPT1_C),A
|
||
OUT (LPT1_C),A
|
||
|
||
; ˆ¨æ¨ «¨§ æ¨ï ¯ à ««¥«ì®£® ¯®àâ 2 (INT/DMA ISA)
|
||
|
||
LD BC,LPT2_C
|
||
|
||
LD A,0CFH ; BITS I/O
|
||
OUT (C),A
|
||
LD A,03FH
|
||
OUT (C),A
|
||
LD A,0C0h
|
||
OUT (LPT2_D),A
|
||
|
||
; ‡ ã«¥¨¥ ª®¢®ªá
|
||
|
||
LD A,0
|
||
OUT (0FBH),A
|
||
|
||
; ‘¡à®á ª®â஫«¥à ¤¨áª®¢®¤
|
||
|
||
LD BC,7FFDH
|
||
LD A,10H
|
||
OUT (C),A ; BASIC_48
|
||
|
||
CALL DOS_ON ; DOS_on
|
||
|
||
XOR A
|
||
OUT (CBL_DIR),A
|
||
|
||
OUT (P_DOS_FF),A
|
||
push hl
|
||
pop hl
|
||
LD A,3CH
|
||
OUT (P_DOS_FF),A
|
||
LD A,0
|
||
OUT (WG_COM),A
|
||
|
||
LD A,21h
|
||
OUT (0BCh),A ; set HDD1/not-HDD2
|
||
|
||
CALL DOS_OFF
|
||
|
||
LD BC,7FFDH
|
||
XOR A
|
||
OUT (C),A ; BASIC_128
|
||
|
||
RET
|
||
|
||
RES128_PROG:
|
||
LD A,D_ROM16OFF
|
||
OUT (SYS_PORT_OFF),A ; ‚®§¢à â ¢ 128k ROM
|
||
LD C,PAGE3
|
||
IN B,(C)
|
||
LD A,SYS_PAGE
|
||
OUT (PAGE3),A
|
||
LD DE,(CONFIG_DE)
|
||
XOR A
|
||
LD (CONFIG_DE+1),A
|
||
OUT (C),B
|
||
|
||
LD BC,1FFDH
|
||
OUT (C),A ; Scorp ¯®àâ
|
||
LD B,7FH
|
||
OUT (C),A ; 128 ¯®àâ
|
||
|
||
LD A,E ; ãáâ ®¢ª ª®ä¨£ãà æ¨¨ ¨ ०¨¬ TURBO
|
||
OUT (SYS_PORT_OFF),A ; CONFIG_SET
|
||
|
||
INC D
|
||
DEC D
|
||
JP Z,0 ; 0 ‚•Ž„ ‚ BASIC-128
|
||
LD A,10H
|
||
OUT (C),A
|
||
DEC D
|
||
JP Z,0 ; 1 ‚•Ž„ ‚ BASIC-48
|
||
|
||
LD HL,0
|
||
PUSH HL
|
||
DEC D
|
||
JP Z,3D29H ; 2 ‚•Ž„ ‚ TR-DOS
|
||
|
||
XOR A
|
||
OUT (C),A
|
||
LD A,02H
|
||
LD B,1FH
|
||
OUT (C),A
|
||
DEC D
|
||
JP Z,0 ; 3 ‚•Ž„ ‚ EXPANSION ???
|
||
|
||
LD A,0
|
||
OUT (C),A
|
||
LD A,30H
|
||
LD B,7FH
|
||
OUT (C),A
|
||
DEC D
|
||
JP Z,3D29H ; 4 ‚•Ž„ ‚ TR-DOS á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨
|
||
JP 0 ; 5 ‚•Ž„ ‚ BASIC-48 á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨
|
||
|
||
LEN_RES128 EQU $-RES128_PROG
|
||
|
||
CH_2: LD A,2
|
||
C_1601: ; OPEN CHANEL
|
||
CALL_48 #1601
|
||
RET
|
||
|
||
TURBO_OFF:
|
||
LD A,D_TBOFF
|
||
OUT (CNF_PORT),A
|
||
RET
|
||
|
||
TURBO_ON:
|
||
LD A,D_TBON
|
||
OUT (CNF_PORT),A
|
||
RET
|
||
|
||
PRINT_LINE:
|
||
LD A,(HL)
|
||
INC HL
|
||
CP 0FFh
|
||
RET Z
|
||
RST 10H
|
||
JR PRINT_LINE
|
||
|
||
JP_HL: JP (HL)
|
||
|
||
; JP RESET_128
|
||
|
||
;********************************
|
||
; *** UTILITES ***
|
||
;********************************
|
||
; ¯®«ãç¨âì à ¡ ®¡«
|
||
C_0030: CALL_48X 0030h
|
||
RET
|
||
|
||
; ®ç¨áâ¨âì à ¡ ®¡«
|
||
C_19E8: CALL_48X 19E8h
|
||
RET
|
||
|
||
; ¯®«ãç¨âì ¯à®áâà á⢮
|
||
C_1655: CALL_48X 1655h
|
||
RET
|
||
|
||
;****************************************
|
||
; ******* SERVICE *******
|
||
;****************************************
|
||
|
||
;*******************************************************
|
||
; „…˜ˆ”<CB86>€–ˆŸ ŠŽŒ€<C592>„<EFBFBD>މ ‘’<E28098>ŽŠˆ,<2C>…<EFBFBD>…„€<E2809E><E282AC>މ „‹Ÿ "EXPANSION"
|
||
;*******************************************************
|
||
|
||
COMAND_LINE:
|
||
LD HL,(CH_ADR)
|
||
COMAND_LOOP:
|
||
LD A,(HL)
|
||
INC HL
|
||
CP ":"
|
||
JR Z,COMAND_L1
|
||
CP 0Dh
|
||
JR NZ,COMAND_LOOP
|
||
RET
|
||
|
||
COMAND_L1:
|
||
LD A,(HL)
|
||
CP 0EAh ; REM !!!
|
||
RET NZ
|
||
INC HL
|
||
COMAND_OK: ; Ž<><C5BD>€<EFBFBD>“†…<E280A0>€ ŠŽŒ€<C592>„€ „‹Ÿ 'expansion'
|
||
LD A,(HL)
|
||
INC HL
|
||
CP ':'
|
||
JP Z,MENU_S1
|
||
CP 0Dh
|
||
JP Z,MENU_S1
|
||
CP 'I'
|
||
JR Z,COMAND_ISD
|
||
CP 'i'
|
||
JR Z,COMAND_ISD
|
||
CP 'T'
|
||
JR Z,TASK_SWITCH
|
||
CP 't'
|
||
JR Z,TASK_SWITCH
|
||
DEC HL
|
||
POP BC
|
||
JP BASIC_MENU
|
||
MENU_S1:
|
||
POP BC
|
||
CALL SERVICE
|
||
JP SW_ROM_1
|
||
|
||
COMAND_ISD:
|
||
LD A,(HL)
|
||
INC HL
|
||
CP 'S'
|
||
JP Z,COMAND_ISD2
|
||
CP 's'
|
||
JP Z,COMAND_ISD2
|
||
RET
|
||
|
||
COMAND_ISD2:
|
||
POP BC
|
||
CALL ISDOS
|
||
JP SW_ROM_1
|
||
|
||
|
||
TASK_SWITCH:
|
||
|
||
; *** ‘®åà ¨âì § ¤ çã ***
|
||
PUSH IY
|
||
PUSH IX
|
||
PUSH AF
|
||
PUSH BC
|
||
PUSH DE
|
||
PUSH HL
|
||
|
||
EXX
|
||
EX AF,AF'
|
||
|
||
PUSH AF
|
||
PUSH BC
|
||
PUSH DE
|
||
PUSH HL
|
||
|
||
LD A,R
|
||
PUSH AF
|
||
LD A,I
|
||
PUSH AF
|
||
|
||
LD A,(HL)
|
||
RLCA
|
||
RLCA
|
||
RLCA
|
||
RLCA
|
||
AND 30H ; ®¢ ï § ¤ ç 0..3
|
||
LD C,A
|
||
|
||
IN A,(PAGE3)
|
||
LD B,A ; 3-ï áâà ¨æ ⥪ã饩 § ¤ ç¨
|
||
LD A,SYS_PAGE
|
||
OUT (PAGE3),A
|
||
|
||
LD IX,TASK_DATA ; ¤ ë¥ § ¤ ç
|
||
LD E,(IX) ; áâ à ï § ¤ ç
|
||
LD D,0
|
||
ADD IX,DE ; ¤ ë¥ â¥ªã饩 § ¤ ç¨
|
||
LD E,16
|
||
ADD IX,DE ; ᬥ饨¥ ¤ ëå ¢ â ¡«¨æ¥ § ¤ ç
|
||
|
||
LD (IX+1),B ; á®åà ¨âì áâà ¨æã 3
|
||
LD HL,0
|
||
ADD HL,SP
|
||
LD (IX+2),L ; á®åà ¨âì á⥪ § ¤ ç¨
|
||
LD (IX+3),H
|
||
SET 0,(IX) ; ãáâ ®¢¨âì ä« £ á®åà ¥®á⨠⥪ã饩 § ¤ ç¨
|
||
RES 1,(IX) ; ãáâ ®¢¨âì ä« £, çâ® § ¤ ç ¯®ª¨ãâ
|
||
|
||
LD IX,TASK_DATA
|
||
LD E,C
|
||
LD D,0
|
||
ADD IX,DE ; ®¢ ï § ¤ ç
|
||
LD E,16
|
||
ADD IX,DE ; ᬥ饨¥ ¤ ëå ¢ â ¡«¨æ¥ § ¤ ç
|
||
|
||
BIT 1,(IX)
|
||
; JR NZ,TASK_IN_WORK ; § ¤ ç ¢ à ¡®â¥ ??? ¥¢¥à®¥ § ¢¥à襨¥
|
||
; á¡à áë¢ âì ¨«¨ ¯à®áâ® ¢®§¢à é âìáï
|
||
|
||
BIT 0,(IX) ; ¡ë« á®åà ¥ /¥â
|
||
JR NZ,TASK_SET ; § ¤ ç áãé¥áâ¢ã¥â
|
||
|
||
; § ¤ ç¨ ¥ ¡ë«®!
|
||
LD IX,TASK_DATA
|
||
LD A,C ; § ¤ ç
|
||
LD (IX),A ; ãáâ ®¢¨âì ®¢ãî § ¤ çã ⥪ã饩
|
||
|
||
JP SPECTRUM_TASK ; § ¯ãáâ¨âì ®¢ãî § ¤ çã!
|
||
; ¨ ¯®ª ¯®ä¨£ à á¯à¥¤¥«¥¨¥ ¯ ¬ïâ¨!
|
||
|
||
TASK_SET:
|
||
|
||
LD IX,TASK_RESTORE
|
||
LD A,C
|
||
EXX
|
||
JP INIT_PAGES ; ¯¥à¥ª«îç¨âì ¢á¥ áâà ¨æë!
|
||
|
||
TASK_RESTORE:
|
||
EXX
|
||
LD A,SYS_PAGE
|
||
OUT (PAGE3),A
|
||
LD A,C
|
||
LD IX,TASK_DATA
|
||
LD (IX),A ; ãáâ ®¢¨âì ®¢ãî § ¤ çã ⥪ã饩
|
||
|
||
LD E,A
|
||
LD D,0
|
||
ADD IX,DE ; ®¢ ï § ¤ ç
|
||
LD E,16
|
||
ADD IX,DE
|
||
|
||
LD L,(IX+2) ; ¢á¯®¬¨âì á⥪
|
||
LD H,(IX+3)
|
||
LD SP,HL
|
||
LD A,(IX+1) ; ¢á¯®¬¨âì âà¥âìî áâà ¨æã
|
||
OUT (PAGE3),A
|
||
|
||
|
||
POP AF ; ¢®ááâ ®¢¨âì
|
||
LD I,A
|
||
POP AF
|
||
LD R,A
|
||
POP HL
|
||
POP DE
|
||
POP BC
|
||
POP AF
|
||
EX AF,AF'
|
||
EXX
|
||
POP HL
|
||
POP DE
|
||
POP BC
|
||
POP AF
|
||
POP IX
|
||
POP IY
|
||
; ¢¥àãâìáï ¢ § ¤ çã
|
||
|
||
NO_TASK:
|
||
POP BC
|
||
JP SW_ROM_1
|
||
|
||
; 259F - ADRESS BASIC128 - MAIN_MENU
|
||
|
||
INCLUDE 'ZX_EXP/SERVICE.ASM'
|
||
|
||
; DSS 7FDh,255
|
||
; DB 'END'
|
||
|
||
;**************************************
|
||
|
||
INCLUDE 'ZX_EXP/TEST.ASM'
|
||
|
||
; INCLUDE MAGIC.ASM
|
||
|
||
;****************************************
|
||
|
||
;**********************************************
|
||
INCLUDE 'ZX_EXP/EXP_DCP2.ASM'
|
||
|
||
INCLUDE 'ZX_EXP/FLEX.ASM'
|
||
INCLUDE 'ZX_EXP/EXP_SCR.ASM'
|
||
|
||
; INCLUDE EXP_PIC.ASM
|
||
INCLUDE 'ZX_EXP/EXP_PIC2.ASM'
|
||
INCLUDE 'ZX_EXP/EXP_FN2.ASM'
|
||
|
||
;**********************************************
|
||
|
||
;BLOCK 1400H - $,255
|
||
|
||
; #-5kb-##############################
|
||
; #::::::::::::::::::::::::::::::::::#\
|
||
; #:::: Œ¥áâ® ¤ ëå ¤«ï FLEX :::::::#\
|
||
; #::::::::::::::::::::::::::::::::::#\
|
||
; ####################################\
|
||
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||
|
||
;**********************************************
|
||
|
||
BLOCK 2800H - $,255
|
||
|
||
; #-2kb-##############################
|
||
; #::::::::::::::::::::::::::::::::::#\
|
||
; #:::: ‡¤¥áì ¬¥áâ® ¤«ï IBM-ZG ::::::#\
|
||
; #::::::::::::::::::::::::::::::::::#\
|
||
; ####################################\
|
||
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||
; INCLUDE ZGLION.ASM
|
||
INCLUDE 'ZX_EXP/FONT.ASM'
|
||
|
||
;**********************************************
|
||
BLOCK 3000H - $,255
|
||
INCLUDE 'ZX_EXP/EXP_FN.ASM'
|
||
|
||
INCLUDE 'ZX_EXP/EXP_LP2.ASM'
|
||
; INCLUDE EXP_LP3.ASM
|
||
|
||
;**********************************************
|
||
FN_SENT_BYTE:
|
||
LD E,A ; á®åà ¨âì ¡ ©â
|
||
CALL SENT_POLU_BYTE ; ¯¥à¥¤ âì ¯®«ã¡ ©â ¨§ …
|
||
RET C ; ¢®§¢à â ¯® ®è¨¡ª¥
|
||
LD A,E ; ᤢ¨ãâì ¡ ©â 4 ¡¨â
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
LD E,A
|
||
|
||
SENT_POLU_BYTE: ; ¯¥à¥¤ âì ¯®«®¢¨ã ¡ ©â _E_!!
|
||
LD A,E
|
||
OR 0F0h ; ãáâ ®¢¨âì áâ à訥 ¡¨âë LPT ¤ â
|
||
OUT (LPT1_D),A
|
||
LD BC,0 ; áç¥â稪 â ©¬- ãâ
|
||
|
||
WAIT_SENT_1:
|
||
IN A,(PORT_JOI) ; ¯à®¢¥à¨âì ¡¨â 4 1 ¯à¨ £®â®¢®á⨠PC
|
||
BIT 4,A
|
||
JR NZ,CONTINUE_SENT
|
||
DEC BC
|
||
LD A,B
|
||
OR C
|
||
JR NZ,WAIT_SENT_1
|
||
XOR A
|
||
SCF ; â ©¬- ãâ
|
||
RET
|
||
|
||
CONTINUE_SENT: ; PC - £®â®¢
|
||
LD A,E
|
||
AND 0Fh ; á¡à®á¨âì áâ à訥 ¡¨âë LPT -
|
||
OUT (LPT1_D),A
|
||
|
||
LD BC,0 ; áç¥â稪 â ©¬- ãâ
|
||
|
||
WAIT_SENT_2:
|
||
IN A,(PORT_JOI) ; ¯à®¢¥à¨âì ¡¨â 4 0 - á®®¡é¥¨¥ ®â PC
|
||
BIT 4,A
|
||
JR Z,CONTINUE_SENT2
|
||
DEC BC
|
||
LD A,B
|
||
OR C
|
||
JR NZ,WAIT_SENT_2
|
||
LD A,E
|
||
OR 0F0h ; ãáâ ®¢¨âì áâ à訥 ¡¨âë LPT ¤ â
|
||
OUT (LPT1_D),A
|
||
XOR A
|
||
SCF ; â ©¬- ãâ
|
||
RET
|
||
|
||
CONTINUE_SENT2: ; ¯®«ã¡ ©â ¯¥à¥¤
|
||
LD A,E
|
||
OR 0F0h ; ãáâ ®¢¨âì áâ à訥 ¡¨âë LPT ¤ â
|
||
OUT (LPT1_D),A
|
||
XOR A
|
||
RET
|
||
|
||
|
||
FN_RESEIVE_B: ; ¯à¨ïâì ¡ ©â ¢ A
|
||
|
||
CALL RESEIVE_POLU_BYTE ; ¯à¨ïâì ¯®«ã¡ ©â
|
||
RET C ; ¢®§¢à â ¯® ®è¨¡ª¥
|
||
RLCA
|
||
RLCA
|
||
RLCA
|
||
RLCA
|
||
AND 0F0h
|
||
LD E,A
|
||
CALL RESEIVE_POLU_BYTE ; ¢â®à®©
|
||
RET C
|
||
AND 0Fh
|
||
OR E
|
||
RET ; ¡ ©â ¯à¨ïâ
|
||
|
||
RESEIVE_POLU_BYTE: ; ¯à¨ïâì ¯®«®¢¨ã ¡ ©â ¢ …
|
||
|
||
LD A,0F0h ; ãáâ ®¢¨âì áâ à訥 ¡¨âë LPT ¤ â
|
||
OUT (LPT1_D),A
|
||
LD BC,0 ; áç¥â稪 â ©¬- ãâ
|
||
|
||
WAIT_RES_1:
|
||
IN A,(PORT_JOI) ; ¯à®¢¥à¨âì ¡¨â 4 1 ¯à¨ £®â®¢®á⨠PC
|
||
BIT 4,A
|
||
JR NZ,CONTINUE_RES
|
||
DEC BC
|
||
LD A,B
|
||
OR C
|
||
JR NZ,WAIT_RES_1
|
||
XOR A
|
||
SCF ; â ©¬- ãâ
|
||
RET
|
||
|
||
CONTINUE_RES: ; PC - £®â®¢, ¦¤ âì 0
|
||
XOR A ; á¡à®á¨âì áâ à訥 ¡¨âë LPT - ¦¤¥¬ ¯®«ã¡ ©â
|
||
OUT (LPT1_D),A
|
||
|
||
LD BC,0 ; áç¥â稪 â ©¬- ãâ
|
||
|
||
WAIT_RES_2:
|
||
IN A,(PORT_JOI) ; ¯à®¢¥à¨âì ¡¨â 4 0 - á®®¡é¥¨¥ ®â PC
|
||
BIT 4,A
|
||
JR Z,CONTINUE_RES2
|
||
DEC BC
|
||
LD A,B
|
||
OR C
|
||
JR NZ,WAIT_RES_2
|
||
LD A,0F0h ; ãáâ ®¢¨âì áâ à訥 ¡¨âë LPT ¤ â
|
||
OUT (LPT1_D),A
|
||
SCF
|
||
RET ; ®è¨¡ª
|
||
|
||
CONTINUE_RES2: ; ¯®«ã¡ ©â ¢ëáâ ¢«¥
|
||
LOOP_EQ: ; ¯à®ç¨â âì ¥é¥ à §, çâ® ¡ë ᮢ¯ «®
|
||
AND 0Fh
|
||
LD B,A
|
||
IN A,(PORT_JOI)
|
||
AND 0Fh
|
||
CP B
|
||
JR NZ,LOOP_EQ
|
||
|
||
OR 0F0h ; ãáâ ®¢¨âì áâ à訥 ¡¨âë LPT ¤ â ¢ 1 - ¯à¨ïâ®
|
||
OUT (LPT1_D),A
|
||
RET
|
||
|
||
;**********************************************
|
||
; DSS 3C10h,255
|
||
;KBD_RET:
|
||
; LD A,D_ROM16OFF
|
||
; OUT (SYS_PORT_OFF),A
|
||
; JR KBD_EXP
|
||
; NOP
|
||
; NOP
|
||
;KBD_RET2:
|
||
; LD A,D_ROM16OFF
|
||
; OUT (SYS_PORT_OFF),A
|
||
; JR KBD_OFF1
|
||
; NOP
|
||
; NOP
|
||
;KBD_EXP:
|
||
; CALL RET_INS
|
||
; PUSH HL
|
||
; CALL INT_PROG1
|
||
; POP HL
|
||
; CALL DOS_ON
|
||
; JR KBD_RET
|
||
;KBD_OFF1:
|
||
; CALL RET_INS
|
||
; CALL KBD_OFF
|
||
; CALL DOS_ON
|
||
; JR KBD_RET2
|
||
|
||
;******************************************************
|
||
|
||
BLOCK 3CC0h - $,255
|
||
MAGIC_1: ; ‡€ƒ‹“˜Š€ „‹Ÿ MAGIC
|
||
PUSH AF
|
||
LD A,D_ROM16OFF
|
||
OUT (SYS_PORT_OFF),A
|
||
POP AF
|
||
JP MAGIC_1
|
||
MAGIC_3:
|
||
PUSH AF
|
||
LD A,D_ROM16OFF
|
||
OUT (SYS_PORT_OFF),A
|
||
POP AF
|
||
RETN
|
||
MAGIC_2:
|
||
; CALL MG_BEGIN
|
||
JR MAGIC_3
|
||
|
||
|
||
;*************************
|
||
BLOCK #3CE0-$,0
|
||
SW_ROM_1:
|
||
LD HL,#259F
|
||
PUSH HL
|
||
LD HL,5B00h
|
||
LD A,(HL)
|
||
CP #F5 ; #F5 - ®¯ª®¤ 'PUSH AF'. <20>஢¥àï¥âáï â® «¨ ¢ #5B00
|
||
JR Z,JP_HL_48 ; ‚އ‚<E280A1>€’ Š Œ…<C592>ž BASIC128
|
||
POP HL
|
||
JR SW_ROM ; <20><>Ž‘’މ ‚އ‚<E280A1>€’
|
||
|
||
; DEFS 3CF0h-$
|
||
;JMP_48:
|
||
; LD HL,00h
|
||
; JR JP_HL_48
|
||
;
|
||
; NOP
|
||
; NOP
|
||
; NOP
|
||
|
||
DEFS 3CF8H-$
|
||
JP_HL_48:
|
||
PUSH HL
|
||
SW_ROM:
|
||
PUSH AF
|
||
LD A,D_ROM16OFF
|
||
OUT (SYS_PORT_OFF),A
|
||
POP AF
|
||
RET
|
||
;******************************************
|
||
BLOCK 3D00H - $,255
|
||
DOS_ON:
|
||
NOP
|
||
RET
|
||
|
||
;******************************************
|
||
BLOCK 3D13H - $,255
|
||
NOP
|
||
JP 18H
|
||
|
||
;******************************************
|
||
BLOCK 3E00H - $,255
|
||
|
||
DOS_OFF:
|
||
PUSH AF
|
||
PUSH BC
|
||
LD BC,(5BFFH)
|
||
LD A,0C9H
|
||
LD (5BFFh),A
|
||
CALL 5BFFh
|
||
LD (5BFFh),BC
|
||
POP BC
|
||
POP AF
|
||
RET
|
||
|
||
|
||
START_HDD:
|
||
|
||
LD C,2
|
||
CALL EXP_HDD
|
||
RET C
|
||
|
||
LD A,0
|
||
OUT (0FEH),A
|
||
|
||
LD HL,4000H
|
||
LD DE,4001H
|
||
LD BC,1AFFH
|
||
LD (HL),0
|
||
LDIR
|
||
|
||
LD HL,0
|
||
LD IX,LP_SCR_80
|
||
CALL WIN_OPEN_WIN
|
||
|
||
LD HL,2050H
|
||
LD DE,0
|
||
LD B,07H
|
||
CALL LP_CLS_WIN
|
||
|
||
LD DE,0
|
||
CALL LP_SET_PLACE
|
||
|
||
LD HL,ID_SPRINTER
|
||
LD E,47H
|
||
LD B,L_ID
|
||
CALL LP_PRINT_LINE
|
||
|
||
; LD C,80H
|
||
; LD B,0
|
||
; LD E,0
|
||
; CALL LP_OPEN_S
|
||
|
||
|
||
; LD DE,0
|
||
; LD C,84H
|
||
; CALL LP_SET_PLACE
|
||
|
||
; LD HL,HDD_MSG
|
||
; LD B,HDD_MSG_LEN
|
||
; LD E,47H
|
||
; CALL LP_PRINT_LINE
|
||
|
||
LD C,0
|
||
CALL EXP_HDD
|
||
RET C
|
||
|
||
LD DE,1
|
||
LD IX,0
|
||
LD B,16
|
||
LD HL,8000H
|
||
LD C,5
|
||
CALL EXP_HDD
|
||
RET C
|
||
LD HL,8000H
|
||
LD DE,HDD_MSG
|
||
LD B,HDD_MSG_LEN
|
||
START_HDD_L:
|
||
LD A,(DE)
|
||
CP (HL)
|
||
JR NZ,NO_BOOT
|
||
INC HL
|
||
INC DE
|
||
DJNZ START_HDD_L
|
||
JP (HL)
|
||
NO_BOOT:
|
||
RET
|
||
|
||
|
||
HDD_MSG: DB "Starting...",0
|
||
|
||
HDD_MSG_LEN EQU $-HDD_MSG
|
||
|
||
;HDD_MSG_NO: DB "Boot record not found"
|
||
;HDD_NO_LEN EQU $-HDD_MSG_NO
|
||
|
||
SAVE_AUTOSTART:
|
||
LD HL,8000H
|
||
LD DE,HDD_MSG
|
||
LD B,HDD_MSG_LEN
|
||
SAVE_AUTO_L1:
|
||
LD A,(DE)
|
||
CP (HL)
|
||
RET NZ
|
||
INC HL
|
||
INC DE
|
||
DJNZ SAVE_AUTO_L1
|
||
|
||
LD C,0
|
||
CALL EXP_HDD
|
||
RET C
|
||
|
||
LD HL,8000H
|
||
LD A,0
|
||
LD DE,1
|
||
LD IX,0
|
||
LD B,16
|
||
LD C,6
|
||
CALL EXP_HDD
|
||
RET
|
||
|
||
;******************************************
|
||
BLOCK 3F00H - $,255
|
||
|
||
FN_LIB:
|
||
SCF
|
||
RET
|
||
|
||
IN A,(PAGE3)
|
||
LD B,A
|
||
LD A,SYS_PAGE
|
||
OUT (PAGE3),A
|
||
PUSH HL
|
||
LD L,C
|
||
LD H,0C1H
|
||
LD A,(HL)
|
||
POP HL
|
||
AND A
|
||
SCF
|
||
JR Z,FN_LIB_RET
|
||
OUT (PAGE3),A
|
||
LD (0C0FEH),SP
|
||
LD SP,0C0F0H
|
||
PUSH BC
|
||
CALL 0C100H
|
||
POP BC
|
||
LD SP,(0C0FEH)
|
||
LD A,B
|
||
OUT (PAGE3),A
|
||
RET
|
||
|
||
FN_LIB_RET:
|
||
LD A,B
|
||
OUT (PAGE3),A
|
||
SCF
|
||
RET
|
||
|
||
|
||
FN_KBD_OUT: ; ¢å®¤ A - byte
|
||
; B - speed_parameter
|
||
|
||
AND A
|
||
LD E,A
|
||
LD D,0FFh
|
||
JP PE,kbd_parity ; ãáâ ®¢ª ¯ à¨â¥â PE/PO ???
|
||
LD D,0FEh
|
||
kbd_parity:
|
||
AND A ; ¯¥à¢ë© ¡¨â - start-bit - 0
|
||
RL E
|
||
RL D ; ¢ DE - 11 ¡¨â ¤«ï ¯¥à¥¤ ç¨
|
||
LD C,11
|
||
|
||
kbd_loop:
|
||
LD A,5
|
||
OUT (COM_A),A
|
||
LD A,60h
|
||
BIT 0,E
|
||
JR NZ,no_inv
|
||
XOR 2 ; ¤ ë¥
|
||
no_inv:
|
||
LD L,A
|
||
OUT (COM_A),A ; ¢ëáâ ¢¨âì ¤ ë¥
|
||
|
||
LD A,5
|
||
OUT (COM_A),A
|
||
LD A,L
|
||
OR 80h ; á¨åந¬¯ã«ìá
|
||
OUT (COM_A),A ; ¨¬¯ã«ìá á¨åà®
|
||
LD A,B ; speed_par
|
||
kbd_loop1:
|
||
PUSH HL
|
||
POP HL
|
||
DEC A
|
||
JR NZ,kbd_loop1
|
||
LD A,5
|
||
OUT (COM_A),A
|
||
LD A,L
|
||
OUT (COM_A),A ; áïâì ¨¬¯ã«ìá á¨åà®
|
||
|
||
LD A,B ; speed_par
|
||
kbd_loop2:
|
||
PUSH HL
|
||
POP HL
|
||
DEC A
|
||
JR NZ,kbd_loop2
|
||
RR D
|
||
RR E
|
||
DEC C
|
||
JR NZ,kbd_loop
|
||
|
||
LD A,5
|
||
OUT (COM_A),A
|
||
LD A,60h
|
||
OUT (COM_A),A ; § ª®ç¨âì ¯¥à¥¤ çã
|
||
AND A
|
||
RET
|
||
|
||
|
||
BLOCK 3FD0H - $,0
|
||
FN1_RET:
|
||
PUSH AF
|
||
LD A,D_ROM16ON
|
||
OUT (CNF_PORT),A
|
||
POP AF
|
||
RST 18H
|
||
JR FN1_RET
|
||
|
||
;******************************************
|
||
BLOCK 3FE0H - $,255
|
||
|
||
SOUND_TEST:
|
||
LD A,D_ROM16ON ; AROM16 = 1
|
||
OUT (CNF_PORT),A
|
||
JP SND_TEST_RET
|
||
|
||
BLOCK 3FE8H - $,255
|
||
HDD_EXE:
|
||
EXP_HDD:
|
||
PUSH AF
|
||
LD A,D_ROM16ON ;!FIXIT ¯à¨¤ã¬ âì §¢ ¨ï ¬¥âª ¬
|
||
OUT (CNF_PORT),A
|
||
POP AF
|
||
RET
|
||
|
||
BLOCK 3FF0H-$,255
|
||
|
||
BLOCK 3FF8H-$,255
|
||
EXP_FNS_RET:
|
||
PUSH AF
|
||
LD A,D_ROM16OFF
|
||
OUT (SYS_PORT_OFF),A
|
||
JP EXP_FNS
|
||
|
||
;******************************************
|
||
BLOCK 4000h-$,255
|
||
;
|
||
|