mirror of
https://github.com/Tolik-Trek/Sprinter-BIOS.git
synced 2026-06-15 01:11:47 +03:00
2253 lines
46 KiB
ActionScript
2253 lines
46 KiB
ActionScript
|
||
;
|
||
;*************************************************************
|
||
;
|
||
; EXPANSION VER 3.00 (C) Peters Plus Ltd.
|
||
;
|
||
;*************************************************************
|
||
|
||
;***************************************
|
||
; DEVICE ZXSPECTRUM4096 ; ¬®¤¥«ì á 4 ¬¥âà ¬¨ ¯ ¬ïâ¨
|
||
; MMU 0 e, 0 ; ã«¥¢ ï áâà ¨æ ¢ ¡ ªã 0 ¨ ¯à®¢¥àª £à ¨æë
|
||
; OUTPUT './Build/EXP.BIN'
|
||
|
||
;***************************************
|
||
|
||
; ORG 0
|
||
; DISP 0
|
||
|
||
;SPRIN2 EQU 2 ; 1 - ¢ª«î票¥ Sprinter-1 ¯¥à¢®© ¯à®è¨¢ª®©
|
||
; 2 - ¢ª«î票¥ Sprinter-2 ¯¥à¢®© ¯à®è¨¢ª®©
|
||
|
||
; INCLUDE '../shared/SPRINT00.asm' ; ª®áâ âë, ¬ ªà®áë..
|
||
; INCLUDE 'EXP_VERSION.inc'
|
||
|
||
;KEMPSTON.JOY_DOS EQU 0FFh
|
||
|
||
;***************************************
|
||
;*********** BEGIN EXPANSION ***********
|
||
;***************************************
|
||
;A_0000: ; ‚室 ¯® RESET
|
||
EXP_START:
|
||
JP GLOBAL_RESET
|
||
; DB 0,0
|
||
|
||
;---------------------------------------
|
||
ROM_NUMBER:
|
||
.part1: DW MotherBoardID ; MotherBoardID
|
||
.part2: DB 0
|
||
;---------------------------------------
|
||
|
||
;---------------------------------------
|
||
; BoardID:
|
||
; .start: WORD BoardID_start ; BoardID_start
|
||
; .end: WORD BoardID_end ; BoardID_end
|
||
;---------------------------------------
|
||
|
||
;=======================================
|
||
BLOCK 8-$,0 ; first on/off EXPANSION
|
||
;¯à®£à ¬¬ ¤«ï ¢ë§®¢ BIOS ç¥à¥§ RST8 ¨§ RAM0
|
||
;
|
||
EXP_FNS_2_RET:
|
||
PUSH AF
|
||
LD A,ROM.EXT
|
||
OUT (SYS_PORT.OFF),A
|
||
POP AF
|
||
JR RST_18_1
|
||
;=======================================
|
||
|
||
;=======================================
|
||
BLOCK #10-$,0 ; DSS ???
|
||
RST_10:
|
||
; JR RST10
|
||
;=======================================
|
||
|
||
;=======================================
|
||
BLOCK #18-$,0
|
||
; RST18h - MAIN BIOS functions
|
||
;
|
||
JP EXP_FNS_RST18 ; !TEST new_api
|
||
RST_18_1:
|
||
CALL EXP_FNS_RST18 ; !TEST new_api
|
||
JR EXP_FNS_2_RET
|
||
|
||
;=======================================
|
||
|
||
;=======================================
|
||
BLOCK #20-$,0
|
||
RST_20:
|
||
;=======================================
|
||
|
||
;=======================================
|
||
BLOCK #28-$,0
|
||
RST_28:
|
||
;=======================================
|
||
|
||
;=======================================
|
||
BLOCK #30-$,0
|
||
RST_30:
|
||
;=======================================
|
||
|
||
;=======================================
|
||
BLOCK #38-$,0
|
||
; INTERUPT Point
|
||
;
|
||
RST38:
|
||
EI
|
||
RETI
|
||
|
||
;RST10:
|
||
; CALL_48 10h
|
||
; RET
|
||
;=======================================
|
||
|
||
;=======================================
|
||
_mInfoBLOCK #66-$,0
|
||
|
||
NMI_Point:
|
||
RETN ; १¥à¢ 3 ¡ ©â ¤«ï ª®¬ ¤ë JP
|
||
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
|
||
|
||
;**********************************
|
||
|
||
;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
|
||
|
||
;=======================================
|
||
_mInfoALIGN #10,0
|
||
;TABLE_X EQU #A0 ; any adress < #C0 with mask %xxxx0000
|
||
; BLOCK TABLE_X-$
|
||
TABLE_X: ; â ¡«¨æ ¤«ï Sprinter POST-Tester-a
|
||
.v0: DB 00101000b ; "0"
|
||
.v1: DB 10111101b ; "1"
|
||
.v2: DB 00110010b ; "2"
|
||
.v3: DB 00110100b ; "3"
|
||
.v4: DB 10100101b ; "4"
|
||
.v5: DB 01100100b ; "5"
|
||
.v6: DB 01100000b ; "6"
|
||
.v7: DB 00111101b ; "7"
|
||
.v8: DB 00100000b ; "8"
|
||
.v9: DB 00100100b ; "9"
|
||
.vA: DB 00100001b ; "A"
|
||
.vB: DB 11100000b ; "B"
|
||
.vC: DB 01101010b ; "C"
|
||
.vD: DB 10110000b ; "D"
|
||
.vE: DB 01100010b ; "E"
|
||
.vF: DB 01100011b ; "F"
|
||
;=======================================
|
||
|
||
;=======================================
|
||
; BLOCK MEM_MAP.ID_Version-$,0 ;#C0-$,0
|
||
ID_Version:
|
||
dw bitstream_ver_hex ; Version of bitstream hex
|
||
|
||
ID_SPRINTER_length:
|
||
DB ID_SPRINTER.LENGTH
|
||
|
||
ID_SPRINTER:
|
||
DB 'Hardware v'
|
||
.bitstream_ver:
|
||
DB bitstream_ver_string,0
|
||
DB 'Sprinter',0
|
||
DB 0
|
||
.LENGTH EQU $-ID_SPRINTER
|
||
|
||
; Check for max length of string
|
||
ASSERT ID_SPRINTER.LENGTH < #20, 'ERROR! ID String is to long!'
|
||
;=======================================
|
||
|
||
|
||
; BLOCK #FC-$,0
|
||
BoardID:
|
||
.start: WORD BoardID_start ; BoardID_start
|
||
.end: WORD BoardID_end ; BoardID_end
|
||
|
||
; ;=======================================
|
||
; BLOCK #100-$,0
|
||
|
||
RESTARTS EQU #FFE0 ; !FIXIT ¢ë¥á⨠¢ SP2000.inc
|
||
|
||
GLOBAL_RESET:
|
||
DI
|
||
IM 1
|
||
LD HL,RESTARTS
|
||
LD DE,RESTARTS_PROG
|
||
LD B,RESTARTS_PROG.length
|
||
.compare:
|
||
LD A,(DE)
|
||
CP (HL)
|
||
JR NZ,NO_RESTART
|
||
INC HL
|
||
INC DE
|
||
DJNZ .compare
|
||
JP RESTARTS
|
||
|
||
;**********************************
|
||
; ¯à®£à ¬¬ , ª®â®à ï ¡ã¤ãç¨ à §¬¥é¥®© ¢ #40 áâà ¨æ¥,
|
||
; á ¤à¥á RESTARTS, ¯¥à¥å¢ âë¢ ¥â RESET
|
||
; ; ‘¤¥« âì § £®â®¢ªã á DISP-ENT ¡ã¤ã饥 !!!!!
|
||
RESTARTS_PROG: ; !TODO LDConf ¯¥à¥å¢ â à¥á¥â «î¡®© ª®ä¥ ¯®á«¥ hardreset
|
||
LD HL,RESTARTS ; 3
|
||
LD B,16 ; 2
|
||
.loop:
|
||
LD (HL),0 ; 2
|
||
INC HL ; 1
|
||
DJNZ .loop ; 2
|
||
NOP ; 1
|
||
NOP ; 1
|
||
; LD A,1 ; 2
|
||
; OUT (SLOT3),A ; 2
|
||
; ; = 16 bytes
|
||
.length EQU $-RESTARTS_PROG
|
||
;**********************************
|
||
|
||
;------------[Setup Starter]------------
|
||
MODULE Setup_Starter
|
||
; ¯à®£à ¬¬ , à §¬¥é ¥¬ ï ¯® ¤à¥áã 0C000h
|
||
; ¤«ï § ¯ã᪠Setup
|
||
Start:
|
||
DISP COMPILE_ADDR.SETUP_STARTER
|
||
Exec:
|
||
LD A,CNF_0 + ROM.EXPANSION
|
||
OUT (SYS_PORT.ON),A
|
||
|
||
LD HL,ROM_MAP.SETUP
|
||
LD DE,MEM_MAP.SETUP
|
||
LD BC,BLOCK_Setup.Length
|
||
LDIR
|
||
|
||
LD A,CNF_0+ROM.EXT
|
||
OUT (SYS_PORT.ON),A
|
||
|
||
;-----------[Check SPACE]
|
||
LD A,#FE ; !HARDCODE
|
||
LD BC,Port_All_Mode ; keyboard int & acc off
|
||
OUT (C),A
|
||
LD A,high ZXKeys.Line_7
|
||
IN A,(ZXKeys)
|
||
CPL
|
||
AND 1
|
||
; ¢ ॣ¨áâॠA ¯¥à¥¤ ñâáï ¦ â «¨ ª« ¢¨è SPACE.
|
||
; ¯®â®¬ ¯à®¢¥àï¥âáï ¢ main.asm [space_check]
|
||
; ¨ ¥á«¨ ¦ â , â® ¯à®¨á室¨â ¨£®à ¯ à ¬¥âà
|
||
; "<22>ëáâàë© áâ àâ <20>‡“" ¢® ¢à¥¬ï ¯¥à¥§ £à㧪¨
|
||
EX AF,AF'
|
||
|
||
LD A,#FF ; !HARDCODE
|
||
OUT (C),A ; keyboard int & acc on, zx_screen & original waits off (for conf >= 3.05)
|
||
|
||
EX AF,AF'
|
||
;----------------------[]
|
||
DI
|
||
POP HL ; ¤à¥á ¢®§¢à â ¢ EXP ¨§ SETUP
|
||
LD SP,#8000 ;!HARDCODE
|
||
PUSH HL
|
||
PUSH AF
|
||
JP SETUP_MAIN
|
||
ENT
|
||
Length EQU $-Setup_Starter.Start
|
||
ENDMODULE
|
||
;---------------------------------------
|
||
|
||
|
||
;SYSTEM_ID_TXT:
|
||
; DB "NEW_BIOS"
|
||
|
||
|
||
;-----[¯¥à¥å¢ â RESET ¥ á®áâ®ï«áï]-----
|
||
;
|
||
NO_RESTART:
|
||
; á⥪ ¥éñ ¥ ¨á¯®«ì§ã¥¬!!!
|
||
LD SP,IX ; á®åà ¨âì § 票¥ ¯¥à¥¤ ®¥ § £àã§ç¨ª®¬ ª®äë (¥á«¨ áâ àâ ¯®á«¥ à¥á¥â )
|
||
|
||
;***************************************
|
||
; ¨¨æ¨ «¨§ æ¨ï ¢ãâ२å
|
||
; ¯®à⮢ Z84C15 ¤«ï POST-Tester-
|
||
;
|
||
LD A,5 ; COM port for Printer OUT
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
LD A,#62
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
|
||
LD A,#CF ; BITS I/O
|
||
OUT (Z84.PIO.Port_A.Command),A
|
||
XOR A
|
||
OUT (Z84.PIO.Port_A.Command),A
|
||
OUT (Z84.PIO.Port_A.Data),A ; PRINTER - PORT - all zeros
|
||
|
||
;***************************************
|
||
;-¨¨æ¨ «¨§ æ¨ï á¨á⥬ëå ¯®à⮢ Z84C15-
|
||
;
|
||
LD BC,#FF*256 + Z84.SYS.Control
|
||
XOR A
|
||
OUT (C),A ; 0 register - waits
|
||
INC C
|
||
OUT (C),A ; set 0 Waits
|
||
|
||
DEC C
|
||
|
||
LD A,3 ; 3-rd register - Misc.Control Register
|
||
OUT (C),A
|
||
INC C
|
||
XOR A ; !FIXIT ç¨â âì ¤®ªã Z84, ¢ë¡à âì § 票¥ ¤«ï A
|
||
LD A,1 ; !FIXIT ç¨â âì ¤®ªã Z84, ¢ë¡à âì § 票¥ ¤«ï A
|
||
OUT (C),A ; enable CS0, disable CS1
|
||
; no boundary set!
|
||
;**********************************
|
||
;
|
||
|
||
;
|
||
xor a
|
||
out (BorderColor),a
|
||
;
|
||
|
||
;
|
||
;**********************************
|
||
; ==== POST PROCs =================
|
||
MODULE POST_TEST
|
||
|
||
; *********************************
|
||
; ===== Point 0 =======
|
||
; *********************************
|
||
|
||
LD A,(TABLE_X.v0) ; ¢ëᢥâ¨âì "0" ;rdlow-ok
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
|
||
; ==== TEST RAM BUS ========
|
||
|
||
POST_1_RAM_BUS:
|
||
LD BC,0
|
||
LD HL,#C000
|
||
LD DE,#0055
|
||
|
||
.loop:
|
||
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
|
||
LD A,E
|
||
CPL
|
||
LD E,A
|
||
INC L
|
||
INC L
|
||
BIT 4,L
|
||
JR Z,.loop
|
||
|
||
LD A,B
|
||
OR C
|
||
JR Z,POST_1_OK ; no errors
|
||
|
||
; ERROR RAM BUS CODE 'X'X'X'X...
|
||
|
||
.error:
|
||
LD HL,TABLE_X
|
||
.ERB_2:
|
||
BIT 0,C
|
||
JR Z,.ERB_1
|
||
|
||
; ¢ëᢥâ¨âì ®¬¥à ®è¨¡®ç®£® ¡¨â
|
||
LD A,(HL)
|
||
AND %11011111 ; á § ¯ïâ묨
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
|
||
; ¯ ã§
|
||
LD DE,0
|
||
.pause:
|
||
DEC DE
|
||
LD A,D
|
||
OR E
|
||
JR NZ,.pause
|
||
|
||
; RRC BC
|
||
.ERB_1:
|
||
LD A,C
|
||
RRA
|
||
RR B
|
||
RR C
|
||
|
||
; ¡¥áª®¥çë© æ¨ª«
|
||
INC L
|
||
LD A,L
|
||
AND #AF
|
||
LD L,A
|
||
JR .ERB_2
|
||
|
||
; ************************************************
|
||
; ===== Point 1 ==============
|
||
; ************************************************
|
||
POST_1_OK:
|
||
|
||
LD A,(TABLE_X.v1) ; ¢ëᢥâ¨âì "1" ;rdlow-ok
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
|
||
; ===== TEST ADRESS BUS ======
|
||
POST_2_ADRESS_BUS:
|
||
LD HL,#C000
|
||
LD DE,#0000
|
||
.fill_mem: ; § ¯®«¨âì ¯ ¬ïâì ¤à¥á ¬¨
|
||
LD (HL),E
|
||
INC L
|
||
LD (HL),D
|
||
INC HL
|
||
INC DE
|
||
INC DE
|
||
BIT 7,H
|
||
JR NZ,.fill_mem
|
||
|
||
DEC HL
|
||
DEC DE
|
||
DEC DE
|
||
.check_mem: ; ¯à®¢¥à¨âì ᮢ¯ ¤¥¨¥
|
||
LD A,(HL)
|
||
CP D
|
||
JR NZ,.error
|
||
DEC HL
|
||
LD A,(HL)
|
||
CP E
|
||
JR NZ,.error
|
||
DEC HL
|
||
DEC DE
|
||
DEC DE
|
||
LD A,H
|
||
CP 0BFh
|
||
JR NZ,.check_mem
|
||
JR POST_2_OK
|
||
|
||
; ®è¨¡ª ¤à¥á CODE: 'XXXX
|
||
.error:
|
||
.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 #0F
|
||
OR TABLE_X
|
||
LD L,A
|
||
LD H,0
|
||
LD A,(HL)
|
||
AND B
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
|
||
EXX
|
||
LD DE,0
|
||
.LOOP_WTT2:
|
||
DEC DE
|
||
LD A,D
|
||
OR E
|
||
JR NZ,.LOOP_WTT2
|
||
LD A,#FF
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
.LOOP_WTT21:
|
||
DEC DE
|
||
LD A,D
|
||
OR E
|
||
JR NZ,.LOOP_WTT21
|
||
EXX
|
||
|
||
LD A,C
|
||
AND #0F
|
||
OR TABLE_X
|
||
LD L,A
|
||
LD A,(HL)
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
|
||
EXX
|
||
LD DE,0
|
||
.LOOP_WTT3:
|
||
DEC DE
|
||
LD A,D
|
||
OR E
|
||
JR NZ,.LOOP_WTT3
|
||
LD A,#FF
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
.LOOP_WTT31:
|
||
DEC DE
|
||
LD A,D
|
||
OR E
|
||
JR NZ,.LOOP_WTT31
|
||
EXX
|
||
|
||
JP (IX)
|
||
|
||
; ************************************************
|
||
; ===== Point 2 =========
|
||
; ************************************************
|
||
|
||
POST_2_OK:
|
||
|
||
LD A,(TABLE_X.v2) ;rdlow-ok
|
||
OUT (Z84.PIO.Port_A.Data),A ; ¢ë¢¥á⨠"2"
|
||
|
||
; ===== INIT DCP ========
|
||
POST_3_INIT_DCP:
|
||
LD HL,POST_3_OK ; INIT PORTS
|
||
JP DCP_INIT ; ¯à®æ¥¤ãà ¨¨æ¨ «¨§ 樨 á ¢®§¢à ⮬ ¢ (HL)
|
||
; ®è¨¡®ª ¥â
|
||
|
||
; ***********************************
|
||
; ===== Point 3 =========
|
||
; ***********************************
|
||
|
||
POST_3_OK:
|
||
LD A,(TABLE_X.v3) ; ¢ë¢¥á⨠"3" ;rdlow-ok
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
|
||
; ===== TEST RAM PAGES ==
|
||
|
||
IN A,(SLOT3)
|
||
EX AF,AF' ; § ¯®¬¨âì
|
||
|
||
POST_4_PAGES:
|
||
LD B,0
|
||
.loop:
|
||
LD A,#FF
|
||
LD I,A
|
||
LD A,B
|
||
OUT (SLOT3),A
|
||
LD A,0
|
||
LD I,A
|
||
IN A,(SLOT3)
|
||
CP B
|
||
JR NZ,.error ; ¥á«¨ ®è¨¡ª ¯¥à¥ª«î票ï Port-
|
||
DJNZ .loop
|
||
|
||
EX AF,AF'
|
||
OUT (SLOT3),A ; ¢®ááâ ®¢¨âì
|
||
JR POST_4_OK
|
||
|
||
; ***********************************
|
||
; ERROR Port CODE 'XX
|
||
.error:
|
||
LD C,B
|
||
LD IX,.error_out_ret
|
||
.error_out_ret:
|
||
LD B,11011111b
|
||
JP OUT_C_BYTE
|
||
|
||
; ***********************************
|
||
; ===== Point 4 =========
|
||
; ***********************************
|
||
|
||
POST_4_OK:
|
||
LD A,(TABLE_X.v4) ;rdlow-ok
|
||
OUT (Z84.PIO.Port_A.Data),A ; ¢ëᢥâ¨âì "4"
|
||
|
||
;= ¯à®¢¥àª ç¨áâ®âë è¨ë ¤ ëå Z84C15 =
|
||
POST_5_DATA_BUS:
|
||
LD B,0
|
||
.loop:
|
||
IN A,(0)
|
||
CP #FF
|
||
; JR NZ,.error ;!!!!! ¯®á¬®âà¥âì
|
||
DJNZ .loop
|
||
JR POST_5_OK
|
||
|
||
; ERROR CODE '_'XX
|
||
.error:
|
||
LD C,A
|
||
.erb1:
|
||
LD IX,.erbr1
|
||
LD B,%11011111
|
||
JP OUT_C_BYTE
|
||
.erbr1:
|
||
LD A,%11011111
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
|
||
LD DE,0
|
||
.LOOP_WTT4:
|
||
DEC DE
|
||
LD A,D
|
||
OR E
|
||
JR NZ,.LOOP_WTT4
|
||
JR .erb1
|
||
|
||
; **********************************
|
||
; ===== Point 5 =========
|
||
; **********************************
|
||
|
||
POST_5_OK:
|
||
LD A,(TABLE_X.v5) ;rdlow-ok
|
||
OUT (Z84.PIO.Port_A.Data),A ; ¢ë¢¥á⨠"5"
|
||
|
||
; **********************************
|
||
; POST § ¢¥àè¥
|
||
; **********************************
|
||
ENDMODULE
|
||
|
||
MODULE SET_CONFIG_ID
|
||
|
||
IN A,(SLOT3)
|
||
EX AF,AF' ; SAVE PAGE3
|
||
|
||
;NO_SUMX_EQ:
|
||
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
|
||
;-------------[Save IX:IY]--------------
|
||
; Don't use IY before this point if it`s normal booting!!!
|
||
|
||
;NO_NEW_BIOS:
|
||
|
||
LD IX,0
|
||
AND A
|
||
ADD IX,SP ; ¢®ááâ ®¢¨âì § 票¥ ¯¥à¥¤ ®¥ § £àã§ç¨ª®¬ ª®äë (¥á«¨ áâ àâ ¯®á«¥ à¥á¥â )
|
||
;
|
||
; ‚ í⮬ ¬¥á⥠ã á IX:IY ¨§ Loader.asm
|
||
;
|
||
|
||
/*
|
||
; „®â 騫¨ ¤® áî¤ ¬¥âªã ®â «® ¤¥à
|
||
; ¯®ª ¨ª ª ¥ ¨á¯®«ì§ã¥âáï
|
||
|
||
LD A,IYL
|
||
LD L,A
|
||
LD A,IYH
|
||
LD H,A
|
||
|
||
LD BC,#0107 ; !!!!! áà ¢¨âì á 0107h ¢ë¥á⨠à¥ä¥à¥á®¬ âãâ ¨ ¢ loader.asm
|
||
AND A ; ¥á«¨ à ¢® - ¯à®è« ¯¥à¥§ £à㧪
|
||
SBC HL,BC
|
||
JR Z,set_config
|
||
*/
|
||
;---------------------------------------
|
||
LD HL,#FFFD ; !!!!! Sprinter-2 ¢ë¥á⨠à¥ä¥à¥á®¬ âãâ ¨ ¢ loader.asm
|
||
|
||
set_config:
|
||
LD (SYS_PAGE.CONFIG_BYTE),HL ; á®åà ¨âì ®¬¥à ¯à®è¨¢ª¨
|
||
; LD HL,(SYS_PAGE.CONFIG_BYTE) ; ¢§ïâì ®¬¥à ¯à®è¨¢ª¨ ¢ HL
|
||
|
||
EX AF,AF'
|
||
OUT (SLOT3),A ; Restore SLOT3
|
||
|
||
ENDMODULE
|
||
;*********************************
|
||
; ¯¥à¢ ï ¨¨æ¨ «¨§ æ¨ï áâà ¨æ:
|
||
; SLOT3=0, SLOT2=2, SLOT1=5, SLOT0=0
|
||
|
||
XOR A
|
||
OUT (RGADR),A
|
||
OUT (RGMOD),A
|
||
OUT (SLOT3),A
|
||
OUT (SLOT0),A
|
||
LD A,5
|
||
OUT (SLOT1),A
|
||
LD A,2
|
||
OUT (SLOT2),A
|
||
|
||
;*********************************
|
||
; Don't use stack (SP) before this point if it`s normal booting!!!
|
||
LD SP,#BFFE ; <EFBFBD> ç «® ¨á¯®«ì§®¢ ¨ï á⥪ !!!
|
||
PUSH HL ; á®åà ¨âì ®¬¥à ¯à®è¨¢ª¨
|
||
|
||
CALL PORTS_INIT ; ¨¨æ¨ «¨§¨à®¢ âì ¯®àâë
|
||
CALL EMM.CheckColdInit ; ¨¨æ¨ «¨§ æ¨ï ¯ ¬ïâ¨
|
||
|
||
POP HL ; ª®ä¨£ãà æ¨ï
|
||
JR Reset_Handler.start
|
||
; *************************************
|
||
; ‘ç¨â ¥¬, çâ® ¢å®¤ ¢ SETUP ¢á¥£¤ !!!
|
||
; *************************************
|
||
|
||
; LD A,H
|
||
; CP 0FFH
|
||
; JR NZ,NO_SETUP_1
|
||
; LD A,L
|
||
|
||
;-----[IF]-----
|
||
; IF SPRIN2 = 2
|
||
; CP 0FDH ; Ю䍣ãà æ¨ï Sprinter-2
|
||
PG_SP1 equ #EC
|
||
PG_SP2 equ #EE
|
||
PG_AY equ #EA
|
||
|
||
; ELSE
|
||
|
||
; ; CP #FE ; Ю䍣ãà æ¨ï Sprinter-1
|
||
; PG_SP1 equ #EE
|
||
; PG_SP2 equ #EC
|
||
; PG_AY equ #EA
|
||
|
||
; ENDIF
|
||
;--------------
|
||
; JR NZ,NO_SETUP_2
|
||
|
||
MODULE Reset_Handler
|
||
start:
|
||
IN A,(SLOT3)
|
||
push af
|
||
;----[¯¥à¥å¢ â soft reset #EE port]-----
|
||
Check_EE_Port:
|
||
|
||
LD A,Conf_port.RET_PORT
|
||
LD B,0
|
||
LD C,BIOS.SET_PORTS
|
||
CALL @ToBIOS_3D13 ; ¯¥à¥ãáâ ®¢¨âì ¢ãâà. ¯®àâ #EE
|
||
LD A,B
|
||
AND A
|
||
jr z,Check_Spec_Page
|
||
|
||
DI
|
||
OUT (SLOT3),A ; Set restart page
|
||
|
||
.After_Hard_Rst:
|
||
|
||
LD HL,(#FFF4) ; prog address
|
||
ld a,(#FFF0) ; PAGE0
|
||
OUT (SLOT0),A
|
||
LD A,(#FFF1) ; PAGE1
|
||
OUT (SLOT1),A
|
||
LD A,(#FFF2) ; PAGE2
|
||
OUT (SLOT2),A
|
||
LD A,(#FFF3) ; PAGE3
|
||
OUT (SLOT3),A
|
||
|
||
jp (HL)
|
||
;
|
||
;--[¯¥à¥å¢ â soft/hard reset #41 page]--
|
||
Check_Spec_Page:
|
||
|
||
LD A,Spec_Page
|
||
OUT (SLOT3),A
|
||
LD A,(#FFFE)
|
||
CP 'Z'
|
||
JR NZ,No_Reset_handlers
|
||
LD A,(#FFFF)
|
||
CP 'X'
|
||
JR NZ,No_Reset_handlers
|
||
|
||
LD A,(#FFF7)
|
||
CP 'R'
|
||
JR NZ,Spec_Page_handler_OK
|
||
LD A,(#FFF8)
|
||
CP 'S'
|
||
JR NZ,Spec_Page_handler_OK
|
||
LD A,(#FFF9)
|
||
CP 'T'
|
||
JR NZ,Spec_Page_handler_OK
|
||
|
||
XOR A
|
||
LD (#FFF7),A
|
||
|
||
JR Check_EE_Port.After_Hard_Rst
|
||
;---------------------------------------
|
||
No_Reset_handlers:
|
||
init_rom_address EQU #8200 ;!HARDCODE
|
||
|
||
ld hl,init_zx_roms
|
||
ld de,init_rom_address
|
||
ld bc,init_zx_roms.length
|
||
ldir
|
||
|
||
call init_rom_address
|
||
|
||
LD HL,#C000
|
||
LD DE,#C001
|
||
LD BC,#3FFF
|
||
LD (HL),C
|
||
LDIR ; § ¡¨âì FF- ¬¨
|
||
|
||
LD HL,PROG_NO_ROM
|
||
LD DE,#C000 + #38
|
||
LD BC,PROG_NO_ROM.size
|
||
LDIR
|
||
|
||
LD HL,RAM_BIOS_PROG
|
||
LD DE,#C000 + #08
|
||
LD BC,RAM_BIOS_PROG.Length
|
||
LDIR
|
||
|
||
Spec_Page_handler_OK:
|
||
pop af
|
||
OUT (SLOT3),A
|
||
|
||
ENDMODULE
|
||
;**************************************
|
||
; COPY BIOS ’Ž RAM ????
|
||
;**************************************
|
||
;
|
||
;**************************************
|
||
;
|
||
MODULE Prepare_For_Setup
|
||
|
||
Set_ALL_Mode:
|
||
LD A,#FF
|
||
LD BC,Port_All_Mode
|
||
OUT (C),A
|
||
|
||
Set_Default_Screen:
|
||
CALL INT_DEF ; set default int
|
||
ld a,128+4 ; !HARDCODE
|
||
ld c,#F2 ; !HARDCODE FN_SYNC
|
||
RST #18 ; set default vsync
|
||
|
||
Setup_to_RAM:
|
||
LD HL,Setup_Starter.Start
|
||
LD DE,COMPILE_ADDR.SETUP_STARTER
|
||
LD BC,Setup_Starter.Length
|
||
LDIR
|
||
|
||
; á⥪ ª« ¤ñâáï ¤à¥á ¢®§¢à â ¨ ¤ «ìè¥ â é¨âáï ¢á直¬¨ ª®áâë«ï¬¨, ç⮡ ¢¥àãâìáï § ¤
|
||
CALL Setup_Starter.Exec ; #C000
|
||
|
||
JP ZX_SPECTRUM_MODE ; ¢ë室 ¢ ०¨¬ zx spectrum
|
||
|
||
ENDMODULE
|
||
;***********************************
|
||
; ˆ¨æ¨ «¨§ æ¨ï ¯®à⮢
|
||
|
||
PORTS_INIT:
|
||
|
||
; ¢ª«îç¨âì TURBO
|
||
|
||
LD A,D_TBON+CNF_0
|
||
OUT (SYS_PORT.ON),A
|
||
|
||
; RESET to ISA
|
||
|
||
LD BC,ISA_PORT
|
||
LD A,#FF
|
||
OUT (C),A
|
||
.isa_reset:
|
||
DEC A
|
||
JR NZ,.isa_reset
|
||
OUT (C),A
|
||
|
||
; ˆ¨æ¨ «¨§ æ¨ï ¯®á«¥¤®¢ ⥫쮣® ¯®àâ ª« ¢¨ âãàë
|
||
|
||
LD A,0
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
|
||
LD A,1
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
LD A,0 ; 18H ¢ª«î票¥ ¯à¥àë¢ ¨©
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
|
||
LD A,3
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
LD A,#C1
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
|
||
LD A,4
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
;------------------------------ ;!!!!! ¯®á¬®âà¥âì
|
||
; ld a,5
|
||
LD A,7 ; ????? 5/7 ¯ à¨â¥â?
|
||
;------------------------------ ;!!!!! ¯®á¬®âà¥âì
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
|
||
LD A,5
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
LD A,#62
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
|
||
;--------[Clean keyboard buffer]--------
|
||
.clean_kbd_buf:
|
||
IN A,(Z84.SIO.Ch_A.Ctrl)
|
||
BIT 0,A
|
||
jr z,.mouse
|
||
IN A,(Z84.SIO.Ch_A.Data)
|
||
jr .clean_kbd_buf
|
||
;---------------------------------------
|
||
.mouse:
|
||
; ˆ¨æ¨ «¨§ æ¨ï ¬ëè¨
|
||
|
||
LD A,0 ; for MOUSE
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
|
||
LD A,1
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
LD A,0
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
|
||
LD A,3
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
LD A,#41
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
|
||
LD A,4
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
LD A,#44
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
|
||
LD A,5
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
LD A,#E0
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
|
||
; ˆ¨æ¨ «¨§ æ¨ï â ©¬¥à ¬ëè¨
|
||
|
||
LD A,85 ; for MOUSE
|
||
OUT (Z84.CTC.Ch_0),A
|
||
LD A,45
|
||
OUT (Z84.CTC.Ch_0),A
|
||
|
||
; ˆ¨æ¨ «¨§ æ¨ï ¯ à ««¥«ì®£® ¯®àâ 1 (¯à¨â¥à)
|
||
|
||
; ¤«ï POST-Tester-
|
||
|
||
; LD A,0CFH ; BITS I/O
|
||
; OUT (Z84.PIO.Port_A.Command),A
|
||
; XOR A
|
||
; OUT (Z84.PIO.Port_A.Command),A ; ALL - out
|
||
; OUT (Z84.PIO.Port_A.Data),A ; DATA - all zeros
|
||
|
||
; ¤«ï printer-a
|
||
|
||
LD A,#0F ; OUT
|
||
OUT (Z84.PIO.Port_A.Command),A
|
||
OUT (Z84.PIO.Port_A.Command),A
|
||
|
||
; ˆ¨æ¨ «¨§ æ¨ï ¯ à ««¥«ì®£® ¯®àâ 2 (INT/DMA ISA)
|
||
|
||
LD BC,Z84.PIO.Port_B.Command
|
||
|
||
LD A,#CF ; BITS I/O
|
||
OUT (C),A
|
||
LD A,#3F
|
||
OUT (C),A
|
||
LD A,#C0
|
||
OUT (Z84.PIO.Port_B.Data),A
|
||
|
||
; "‡ £«ã襨¥" ª®¢®ªá
|
||
|
||
XOR A
|
||
OUT (CBL.SYS_PORT),A
|
||
LD BC,CBL.OUT
|
||
LD A,#80
|
||
.CBL_MUTE:
|
||
OUT (C),A
|
||
DJNZ .CBL_MUTE
|
||
|
||
; ‘¡à®á ª®â஫«¥à ¤¨áª®¢®¤
|
||
|
||
; ‚ª«îç¨âì ¤®áâ㯠ª ª®â஫«¥àã ¤¨áª
|
||
|
||
LD A,CNF_3
|
||
OUT (SYS_PORT.ON),A
|
||
|
||
OUT (FDC_93.DrvCTRL),A ; !!!!! £«ïãâì
|
||
push hl
|
||
pop hl
|
||
LD A,#3C ; !!!!! £«ïãâì
|
||
OUT (FDC_93.DrvCTRL),A ; !!!!! £«ïãâì
|
||
push hl
|
||
pop hl
|
||
XOR A
|
||
OUT (FDC_93.Command),A
|
||
|
||
; ‚몫îç¨âì ¤®áâ㯠ª ª®â஫«¥àã ¤¨áª
|
||
|
||
LD A,CNF_0
|
||
OUT (SYS_PORT.ON),A
|
||
|
||
; set HDD1/not-HDD2
|
||
|
||
LD A,#21 ;!HARDCODE ᤥ« âì ç¥à¥§ ¬¥âªã
|
||
OUT (#BC),A ;!HARDCODE
|
||
|
||
; CALL DOS_OFF
|
||
|
||
|
||
LD BC,#7FFD
|
||
LD A,#10
|
||
OUT (C),A ; BASIC_48 mode
|
||
LD B,#1F
|
||
LD A,01
|
||
OUT (C),A ; RAM-0 mode !!!
|
||
|
||
RET
|
||
|
||
;**************************************
|
||
|
||
;
|
||
;------------------------[copy zx-roms to zx-pages]---------------------;
|
||
; SLOT0 - ROM 8, sys_port - on.
|
||
; RAM SLOT0 - page 0
|
||
; ¤«ï ०¨¬ zx spectrum
|
||
; ‚›<EFBFBD>Ž‹<EFBFBD>Ÿ…’‘Ÿ ˆ‡ އ“
|
||
init_zx_roms:
|
||
DISP Reset_Handler.init_rom_address
|
||
|
||
in a,(SLOT3)
|
||
push af
|
||
|
||
DI
|
||
LD A,1
|
||
OUT (SYS_PORT.ON),A
|
||
ld a,2
|
||
|
||
IF SetFullZXromLoader
|
||
ld b,6 ; zx-rom number of pages
|
||
ELSE
|
||
ld b,4
|
||
ENDIF
|
||
|
||
.loop:
|
||
push bc
|
||
|
||
out (ROM.SLOT0),a
|
||
or %01000000
|
||
out (SLOT3),a
|
||
and %10111111
|
||
|
||
LD HL,0
|
||
LD DE,#C000
|
||
LD BC,#4000
|
||
LDIR
|
||
|
||
inc a
|
||
pop bc
|
||
DJNZ .loop
|
||
|
||
xor a
|
||
out (ROM.SLOT0),a
|
||
OUT (SYS_PORT.ON),A
|
||
POP AF
|
||
out (SLOT3),a
|
||
|
||
|
||
LD A,#E2 ; ROM-ID - BASIC 128
|
||
LD B,#42 ; page
|
||
CALL .SET_ROM
|
||
|
||
LD A,#E3 ; ROM-ID - BASIC 48
|
||
LD B,#43 ; page
|
||
CALL .SET_ROM
|
||
|
||
LD A,#E1 ; ROM-ID - TR-DOS
|
||
LD B,#44 ; page
|
||
CALL .SET_ROM
|
||
|
||
LD A,#E0 ; ROM-ID - EXPANSION
|
||
LD B,#45 ; page
|
||
CALL .SET_ROM
|
||
|
||
|
||
LD A,#EB ; ROM-ID - BIOS-1
|
||
IF SetFullZXromLoader
|
||
LD B,#46 ; page
|
||
ELSE
|
||
LD B,#45 ; page
|
||
ENDIF
|
||
CALL .SET_ROM
|
||
|
||
|
||
IF SetFullZXromLoader
|
||
LD A,#EF ; ROM-ID - BIOS-2
|
||
LD B,#47 ; page
|
||
CALL .SET_ROM
|
||
ENDIF
|
||
RET
|
||
|
||
.SET_ROM:
|
||
LD C,BIOS.SET_PORTS
|
||
JP ToBIOS_3D13
|
||
|
||
ENT
|
||
.length EQU $-init_zx_roms
|
||
;-----------------------------------------------------------------------;
|
||
;
|
||
|
||
|
||
;**************************************
|
||
;**************************************
|
||
|
||
GOTO_SPEC: ; ????? ¯à®æ¥¤ãà ¡¨®á ¤«ï § 室 ¢ ०¨¬ ᯥâªàã¬
|
||
IN A,(SLOT3)
|
||
EX AF,AF'
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,B
|
||
LD (SYS_PAGE.CONFIG_DE+1),A
|
||
EX AF,AF'
|
||
OUT (SLOT3),A
|
||
|
||
;NO_SETUP_2:
|
||
; CP #FC
|
||
; JR Z,SPECTRUM_0 ; Ю䍣ãà æ¨ï AY
|
||
|
||
;NO_SETUP_1:
|
||
ZX_SPECTRUM_MODE:
|
||
; LD A,(#A8)
|
||
; OUT (Z84.PIO.Port_A.Data),A
|
||
|
||
LD A,#FE ; !HARDCODE ᤥ« âì ç¥à¥§ ¬¥âªã ACC-off Spectrum-MODE
|
||
LD BC,Port_All_Mode
|
||
OUT (C),A
|
||
|
||
;SND_TEST_RET:
|
||
LD SP,#BFFF
|
||
|
||
CALL INT_PENT
|
||
CALL SET_PAL_ZX
|
||
|
||
LD HL,#4104
|
||
LD E,0
|
||
LD B,4
|
||
CALL LP_OPEN_S
|
||
|
||
LD HL,#5104
|
||
LD E,0
|
||
LD B,4
|
||
CALL LP_OPEN_S
|
||
|
||
;*************************************
|
||
/*
|
||
LD D,#35
|
||
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,#BFFF
|
||
LD HL,RES128_PROG
|
||
LD DE,#5B00 ; § ¯ã᪠¯à®£à ¬¬ë BASIC-¥.
|
||
LD BC,LEN_RES128
|
||
LDIR
|
||
DI
|
||
JP #5B00
|
||
|
||
;********************************
|
||
; <EFBFBD>à®£à ¬¬ , à §¬¥é ¥¬ ï 5B00h ¤«ï § ¯ã᪠Spectrum-
|
||
|
||
RES128_PROG:
|
||
LD A,ROM.EXT
|
||
OUT (SYS_PORT.OFF),A ; ‚®§¢à â ¢ 128k ROM
|
||
LD C,SLOT3
|
||
IN B,(C)
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD DE,(SYS_PAGE.CONFIG_DE)
|
||
XOR A
|
||
LD (SYS_PAGE.CONFIG_DE+1),A
|
||
OUT (C),B
|
||
|
||
LD BC,#1FFD
|
||
OUT (C),A ; Scorp ¯®àâ
|
||
LD B,#7F
|
||
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,#10
|
||
OUT (C),A
|
||
DEC D
|
||
JP Z,0 ; 1 ‚•Ž„ ‚ BASIC-48
|
||
|
||
LD HL,0
|
||
PUSH HL
|
||
DEC D
|
||
JP Z,#3D29 ; 2 ‚•Ž„ ‚ TR-DOS
|
||
|
||
XOR A
|
||
OUT (C),A
|
||
LD A,#02
|
||
LD B,#1F
|
||
OUT (C),A
|
||
DEC D
|
||
JP Z,0 ; 3 ‚•Ž„ ‚ EXPANSION ???
|
||
|
||
LD A,0
|
||
OUT (C),A
|
||
LD A,#30
|
||
LD B,#7F
|
||
OUT (C),A
|
||
DEC D
|
||
JP Z,#3D29 ; 4 ‚•Ž„ ‚ TR-DOS á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨
|
||
JP 0 ; 5 ‚•Ž„ ‚ BASIC-48 á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨
|
||
LEN_RES128 EQU $-RES128_PROG
|
||
|
||
;*****************************************************
|
||
|
||
TURBO_OFF:
|
||
LD A,D_TBOFF
|
||
OUT (SYS_PORT.ON),A
|
||
RET
|
||
|
||
TURBO_ON:
|
||
LD A,D_TBON
|
||
OUT (SYS_PORT.ON),A
|
||
RET
|
||
|
||
JP_HL: JP (HL)
|
||
|
||
;***************************************
|
||
|
||
RAM_BIOS_PROG: ; for CALL BIOS in 41h page
|
||
PUSH AF
|
||
LD A,ROM.EXT
|
||
OUT (SYS_PORT.ON),A
|
||
POP AF
|
||
RET
|
||
NOP
|
||
.Length EQU $-RAM_BIOS_PROG
|
||
; JR RST_18_1
|
||
|
||
|
||
;
|
||
;
|
||
PROG_NO_ROM:
|
||
DISP #38
|
||
|
||
DI
|
||
|
||
LD A,#FF
|
||
OUT (SLOT3),A
|
||
OUT (SLOT2),A
|
||
OUT (SLOT1),A
|
||
|
||
LD SP,#BF00
|
||
|
||
LD C,BIOS.LP_OPEN_S
|
||
LD B,3
|
||
LD E,0
|
||
RST ToBIOS
|
||
|
||
LD C,BIOS.LP_CLS_WIN
|
||
LD DE,0
|
||
LD HL,#2050
|
||
RST ToBIOS
|
||
|
||
LD A,1
|
||
OUT (RGMOD),A ; set scr-2
|
||
|
||
LD HL,MESSAGE_NR
|
||
LD DE,#A000
|
||
LD BC,MESSAGE_NR.size
|
||
LD A,C
|
||
LDIR
|
||
|
||
LD HL,#A000
|
||
LD D,0 ; delimiter
|
||
LD E,COLORS.FLASH + COLORS.PAPER.RED + COLORS.INC.CYAN
|
||
LD B,A
|
||
LD C,BIOS.LP_PRINT_LN3
|
||
RST ToBIOS
|
||
|
||
1: DI : HALT
|
||
JR 1B
|
||
|
||
MESSAGE_NR: DZ " Spectrum ROM not installed. Use spectrum.exe Press Ctrl+Alt+Del or RESET"
|
||
.size EQU $-MESSAGE_NR
|
||
|
||
ENT
|
||
PROG_NO_ROM.size EQU $-PROG_NO_ROM
|
||
;-------------[new code end]------------
|
||
|
||
|
||
;*****************************************************
|
||
|
||
|
||
;CH_2:
|
||
; LD A,2
|
||
;C_1601: ; OPEN CHANEL
|
||
; CALL_48 1601h
|
||
; RET
|
||
|
||
|
||
;PRINT_LINE:
|
||
; LD A,(HL)
|
||
; INC HL
|
||
; CP 0FFh
|
||
; RET Z
|
||
; RST 10H
|
||
; JR PRINT_LINE
|
||
|
||
|
||
; JP RESET_128
|
||
|
||
;********************************
|
||
; *** UTILITES ***
|
||
;********************************
|
||
|
||
;C_0030: ; ¯®«ãç¨âì à ¡ ®¡«
|
||
; CALL_48X 0030h
|
||
; RET
|
||
;C_19E8: ; ®ç¨áâ¨âì à ¡ ®¡«
|
||
; CALL_48X 19E8h
|
||
; RET
|
||
;C_1655: ; ¯®«ãç¨âì ¯à®áâà á⢮
|
||
; CALL_48X 1655h
|
||
; RET
|
||
|
||
;****************************************
|
||
; ******* SERVICE *******
|
||
;****************************************
|
||
|
||
;*******************************************************
|
||
; „…˜ˆ”<EFBFBD>€–ˆŸ ŠŽŒ€<EFBFBD>„<EFBFBD>މ ‘’<EFBFBD>ŽŠˆ,<EFBFBD>…<EFBFBD>…„€<EFBFBD><EFBFBD>މ „‹Ÿ "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: ; Ž<EFBFBD><EFBFBD>€<EFBFBD>“†…<EFBFBD>€ ŠŽŒ€<EFBFBD>„€ „‹Ÿ '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,(SLOT3)
|
||
; LD B,A ; 3-ï áâà ¨æ ⥪ã饩 § ¤ ç¨
|
||
; LD A,SYS_PAGE
|
||
; OUT (SLOT3),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 (SLOT3),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 (SLOT3),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
|
||
|
||
;**********************************************
|
||
; paths from project DIR
|
||
INCLUDE 'EXP_HDD.asm'
|
||
INCLUDE 'SERVICE.asm'
|
||
; INCLUDE 'TEST.ASZ'
|
||
INCLUDE 'FLEX.asm'
|
||
IFN SET_NEWdcp
|
||
INCLUDE './src/bios/old_files/EXP_DCP_UNPACKER.asm'
|
||
ENDIF
|
||
; INCLUDE 'EXP_SCR.ASZ'
|
||
INCLUDE 'EXP_PIC2.asm'
|
||
|
||
IFN SET_NEWdcp
|
||
INCLUDE 'EXP_FN2.asm'
|
||
ELSE
|
||
INCLUDE 'EXP_FN.ASM'
|
||
INCLUDE 'EXP_FN2.asm'
|
||
ENDIF
|
||
;**********************************************
|
||
; BLOCK DCP_DATA-$,#FF
|
||
;
|
||
; #-5kb-##############################
|
||
; #::::::::::::::::::::::::::::::::::#\
|
||
; #::::: Œ¥áâ® ¤ ëå ¤«ï DCP :::::::#\
|
||
; #::::::::::::::::::::::::::::::::::#\
|
||
; ####################################\
|
||
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||
DCP_DATA:
|
||
|
||
IFN SET_NEWdcp
|
||
INCBIN './src/bios/old_files/EXP_DCP.LZ'
|
||
ELSE
|
||
INCLUDE 'EXP_DCP_2.ASM'
|
||
ENDIF
|
||
;**********************************************
|
||
|
||
;**********************************************
|
||
;BLOCK #2800-$,#FF
|
||
;
|
||
; #-2kb-##############################
|
||
; #::::::::::::::::::::::::::::::::::#\
|
||
; #:::: ‡¤¥áì ¬¥áâ® ¤«ï IBM-ZG ::::::#\
|
||
; #::::::::::::::::::::::::::::::::::#\
|
||
; ####################################\
|
||
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||
ZG_ADRESS:
|
||
INCBIN 'EXP_FONT.FNT'
|
||
;**********************************************
|
||
; BLOCK #3000-$,#FF
|
||
IFN SET_NEWdcp
|
||
INCLUDE 'EXP_FN.asm'
|
||
ENDIF
|
||
INCLUDE 'EXP_LP2.asm'
|
||
;**********************************************
|
||
FN_SEND_BYTE:
|
||
LD E,A ; á®åà ¨âì ¡ ©â
|
||
CALL SEND_HALF_BYTE ; ¯¥à¥¤ âì ¯®«ã¡ ©â ¨§ …
|
||
RET C ; ¢®§¢à â ¯® ®è¨¡ª¥
|
||
LD A,E ; ᤢ¨ãâì ¡ ©â 4 ¡¨â
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
LD E,A
|
||
|
||
SEND_HALF_BYTE: ; ¯¥à¥¤ âì ¯®«®¢¨ã ¡ ©â _E_!!
|
||
LD A,E
|
||
OR #F0 ; ãáâ ®¢¨âì áâ à訥 ¡¨âë LPT ¤ â
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
LD BC,0 ; áç¥â稪 â ©¬- ãâ
|
||
|
||
WAIT_SENT_1:
|
||
IN A,(KEMPSTON.JOY_DOS) ; ¯à®¢¥à¨âì ¡¨â 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 #0F ; á¡à®á¨âì áâ à訥 ¡¨âë LPT -
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
|
||
LD BC,0 ; áç¥â稪 â ©¬- ãâ
|
||
|
||
WAIT_SENT_2:
|
||
IN A,(KEMPSTON.JOY_DOS) ; ¯à®¢¥à¨âì ¡¨â 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 #F0 ; ãáâ ®¢¨âì áâ à訥 ¡¨âë LPT ¤ â
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
XOR A
|
||
SCF ; â ©¬- ãâ
|
||
RET
|
||
|
||
CONTINUE_SENT2: ; ¯®«ã¡ ©â ¯¥à¥¤
|
||
LD A,E
|
||
OR #F0 ; ãáâ ®¢¨âì áâ à訥 ¡¨âë LPT ¤ â
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
XOR A
|
||
RET
|
||
|
||
;**********************************************
|
||
|
||
FN_RESEIVE_B: ; ¯à¨ïâì ¡ ©â ¢ A
|
||
|
||
CALL RESEIVE_POLU_BYTE ; ¯à¨ïâì ¯®«ã¡ ©â
|
||
RET C ; ¢®§¢à â ¯® ®è¨¡ª¥
|
||
RLCA
|
||
RLCA
|
||
RLCA
|
||
RLCA
|
||
AND #F0
|
||
LD E,A
|
||
CALL RESEIVE_POLU_BYTE ; ¢â®à®©
|
||
RET C
|
||
AND 0Fh
|
||
OR E
|
||
RET ; ¡ ©â ¯à¨ïâ
|
||
|
||
RESEIVE_POLU_BYTE: ; ¯à¨ïâì ¯®«®¢¨ã ¡ ©â ¢ …
|
||
|
||
LD A,#F0 ; ãáâ ®¢¨âì áâ à訥 ¡¨âë LPT ¤ â
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
LD BC,0 ; áç¥â稪 â ©¬- ãâ
|
||
|
||
WAIT_RES_1:
|
||
IN A,(KEMPSTON.JOY_DOS) ; ¯à®¢¥à¨âì ¡¨â 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 (Z84.PIO.Port_A.Data),A
|
||
|
||
LD BC,0 ; áç¥â稪 â ©¬- ãâ
|
||
|
||
WAIT_RES_2:
|
||
IN A,(KEMPSTON.JOY_DOS) ; ¯à®¢¥à¨âì ¡¨â 4 0 - á®®¡é¥¨¥ ®â PC
|
||
BIT 4,A
|
||
JR Z,CONTINUE_RES2
|
||
DEC BC
|
||
LD A,B
|
||
OR C
|
||
JR NZ,WAIT_RES_2
|
||
LD A,#F0 ; ãáâ ®¢¨âì áâ à訥 ¡¨âë LPT ¤ â
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
SCF
|
||
RET ; ®è¨¡ª
|
||
|
||
CONTINUE_RES2: ; ¯®«ã¡ ©â ¢ëáâ ¢«¥
|
||
LOOP_EQ: ; ¯à®ç¨â âì ¥é¥ à §, çâ® ¡ë ᮢ¯ «®
|
||
AND #0F
|
||
LD B,A
|
||
IN A,(KEMPSTON.JOY_DOS)
|
||
AND #0F
|
||
CP B
|
||
JR NZ,LOOP_EQ
|
||
|
||
OR #F0 ; ãáâ ®¢¨âì áâ à訥 ¡¨âë LPT ¤ â ¢ 1 - ¯à¨ïâ®
|
||
OUT (Z84.PIO.Port_A.Data),A
|
||
RET
|
||
|
||
;***************************************
|
||
;!!!!! ¯®á¬®âà¥âì
|
||
; BLOCK #3CC0-$,255
|
||
; no-magics!
|
||
;MAGIC_1: ; ‡€ƒ‹“˜Š€ „‹Ÿ MAGIC
|
||
; PUSH AF
|
||
; LD A,ROM.EXT
|
||
; OUT (SYS_PORT.OFF),A
|
||
; POP AF
|
||
; JP MAGIC_1
|
||
;MAGIC_3:
|
||
; PUSH AF
|
||
; LD A,ROM.EXT
|
||
; OUT (SYS_PORT.OFF),A
|
||
; POP AF
|
||
; RETN
|
||
;MAGIC_2:
|
||
;; CALL MG_BEGIN
|
||
; JR MAGIC_3
|
||
|
||
;*************************
|
||
; BLOCK #3CE0-$,0
|
||
;SW_ROM_1:
|
||
; LD HL,259Fh
|
||
; PUSH HL
|
||
; LD HL,5B00h
|
||
; LD A,(HL)
|
||
; CP #F5
|
||
; JR Z,JP_HL_48 ; ‚އ‚<EFBFBD>€’ Š Œ…<EFBFBD>ž BASIC128
|
||
; POP HL
|
||
; JR SW_ROM ; <EFBFBD><EFBFBD>Ž‘’މ ‚އ‚<EFBFBD>€’
|
||
;*************************
|
||
|
||
; BLOCK #3CF0-$,0
|
||
;JMP_48:
|
||
; LD HL,00h
|
||
; JR JP_HL_48
|
||
;
|
||
; NOP
|
||
; NOP
|
||
; NOP
|
||
|
||
;***************************************
|
||
; BLOCK #3CF8-$,0
|
||
; no basic-48!
|
||
;JP_HL_48:
|
||
; PUSH HL
|
||
;SW_ROM:
|
||
; PUSH AF
|
||
; LD A,ROM.EXT
|
||
; OUT (SYS_PORT.OFF),A
|
||
; POP AF
|
||
; RET
|
||
;***************************************
|
||
_mInfoBLOCK #3D00-$,#FF
|
||
DOS_ON: NOP
|
||
RET
|
||
;***************************************
|
||
|
||
;***************************************
|
||
; BLOCK #3D02-$,FF
|
||
; !TODO ¬®¦® ®¯à¨å®¤®¢ âì âãâ 17 ¡ ©â®¢
|
||
;
|
||
;***************************************
|
||
|
||
;***************************************
|
||
_mInfoBLOCK #3D13-$,#FF
|
||
|
||
NOP
|
||
JP #18
|
||
;***************************************
|
||
|
||
;***************************************
|
||
; BLOCK #3D17-$,FF
|
||
; !TODO ¬®¦® ®¯à¨å®¤®¢ âì âãâ 233 ¡ ©â
|
||
;
|
||
;***************************************
|
||
|
||
;***************************************
|
||
_mInfoBLOCK #3E00-$,#FF
|
||
DOS_OFF:
|
||
DI
|
||
PUSH AF
|
||
PUSH BC
|
||
LD BC,(#5BFF) ; !HARDCODE
|
||
LD A,#C9
|
||
LD (#5BFF),A ; !HARDCODE
|
||
CALL #5BFF ; !HARDCODE
|
||
LD (#5BFF),BC ; !HARDCODE
|
||
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,#2050
|
||
; 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,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 #3E16-$,FF
|
||
; !TODO ¬®¦® ®¯à¨å®¤®¢ âì âãâ 10 ¡ ©â®¢
|
||
;
|
||
;***************************************
|
||
|
||
;***************************************
|
||
;------[ ; !TODO çâ®- â® á¢ï§ ®¥ á ¯¥à¥¬¥ë¬¨ LIB_TABLE ; ]------
|
||
; _mInfoBLOCK #3E20-$,#FF
|
||
|
||
FN_LIB:
|
||
SCF
|
||
RET
|
||
/*
|
||
|
||
IN A,(SLOT3)
|
||
LD B,A
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
PUSH HL
|
||
LD L,C - ¤¥è¥äà â®à API ¨§¬¥¨«áï ¨ ⥯¥àì ¢ C ¥ â®, çâ® âãâ ®¦¨¤ ¥âáï. ަ¨¤ ¥âáï #A0..AF
|
||
LD H,#C1
|
||
LD A,(HL)
|
||
POP HL
|
||
AND A
|
||
SCF
|
||
JR Z,FN_LIB_RET
|
||
|
||
OUT (SLOT3),A
|
||
LD (#C0FE),SP
|
||
LD SP,#C0F0
|
||
PUSH BC
|
||
CALL #C100 ; !HARDCODE
|
||
POP BC
|
||
LD SP,(#C0FE)
|
||
; LD A,B
|
||
; OUT (SLOT3),A
|
||
; RET
|
||
|
||
FN_LIB_RET:
|
||
LD A,B
|
||
OUT (SLOT3),A
|
||
; SCF
|
||
RET
|
||
*/
|
||
;---------------------------------------------------------------[]------
|
||
|
||
FN_KBD_OUT: ; ¢å®¤ A - byte
|
||
; B - speed_parameter
|
||
|
||
AND A
|
||
LD E,A
|
||
LD D,#FF
|
||
JP PE,kbd_parity ; ãáâ ®¢ª ¯ à¨â¥â PE/PO ???
|
||
LD D,#FE
|
||
kbd_parity:
|
||
AND A ; ¯¥à¢ë© ¡¨â - start-bit - 0
|
||
RL E
|
||
RL D ; ¢ DE - 11 ¡¨â ¤«ï ¯¥à¥¤ ç¨
|
||
LD C,11
|
||
|
||
kbd_loop:
|
||
LD A,5
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
LD A,#60
|
||
BIT 0,E
|
||
JR NZ,no_inv
|
||
XOR 2 ; ¤ ë¥
|
||
no_inv:
|
||
LD L,A
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A ; ¢ëáâ ¢¨âì ¤ ë¥
|
||
|
||
LD A,5
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
LD A,L
|
||
OR #80 ; á¨åந¬¯ã«ìá
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A ; ¨¬¯ã«ìá á¨åà®
|
||
LD A,B ; speed_par
|
||
kbd_loop1:
|
||
PUSH HL
|
||
POP HL
|
||
DEC A
|
||
JR NZ,kbd_loop1
|
||
LD A,5
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
LD A,L
|
||
OUT (Z84.SIO.Ch_A.Ctrl),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 (Z84.SIO.Ch_A.Ctrl),A
|
||
LD A,#60
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A ; § ª®ç¨âì ¯¥à¥¤ çã
|
||
AND A
|
||
RET
|
||
;****************************************
|
||
|
||
|
||
; —⥨¥ á ROM-Disk
|
||
; HL - ¤à¥á, ªã¤ ç¨â âì
|
||
; DE - ®¬¥à ᥪâ®à (áç¨â âì ¯® 256b ᥪâ®à)
|
||
; B - ç¨á«® ᥪâ®à®¢
|
||
; A' - à §¬¥à ᥪâ®à (1 - 256b, 2 - 512 b)
|
||
ROM_DISK:
|
||
LD C,0 ; áç¥â稪
|
||
EX AF,AF'
|
||
DEC A
|
||
JR Z,.loop
|
||
DEC A
|
||
SCF
|
||
RET NZ
|
||
|
||
EX DE,HL
|
||
ADD HL,HL
|
||
EX DE,HL
|
||
LD A,B
|
||
ADD A,A
|
||
LD B,A
|
||
RET C
|
||
|
||
CALL .loop
|
||
RET C
|
||
AND A
|
||
RR D
|
||
RR E
|
||
XOR A
|
||
RET
|
||
|
||
/*
|
||
; ????? ª ª®©-â® £«îª ¥¤®¤¥« ë©
|
||
READ_ROM_PAGE_X:
|
||
LD DE,0
|
||
LD BC,#100 ; ®¤¨ ᥪâ®à
|
||
PUSH DE
|
||
PUSH BC
|
||
LD HL,ROM_DISK_PGS
|
||
LD DE,#FF00 ; !HARDCODE
|
||
LD A,#1F ; last page ROM
|
||
JR LOOP_NEXT
|
||
*/
|
||
|
||
.loop:
|
||
PUSH DE ; ®¬¥à ᥪâ®à
|
||
PUSH BC
|
||
|
||
LD A,E
|
||
AND 63 ; ADRESS in ROM-Page
|
||
PUSH AF ; á®åà ¨âì ¤à¥á
|
||
|
||
EX DE,HL ; DE - ¤à¥á ¡ãä¥à
|
||
ADD HL,HL
|
||
ADD HL,HL ; H - ®¬¥à ¡ ª¨
|
||
|
||
LD A,(ROM_DISK.Pages.Number)
|
||
INC H
|
||
CP H
|
||
LD L,H
|
||
LD H, high ROM_DISK.Pages.Number ; ROM-Disk pages!
|
||
LD A,(HL) ; PAGE-ROM
|
||
|
||
POP HL ; ¢®ááâ ®¢¨âì ¤à¥á ¢ ROM-Page
|
||
LD L,0 ; ¥á«¨ ¤ «¥ª® § å®â¥«¨ - ¢ë室 á ®è¨¡ª®©
|
||
JR C,.errorExit ; ROM-Disk-end
|
||
|
||
; DE - ¡ãä¥à
|
||
; HL - ¤à¥á ¢ ROM
|
||
; B - ç¨á«® ᥪâ®à®¢
|
||
; A - ROM-Page
|
||
.loopRead:
|
||
DI
|
||
PUSH HL ; ®âªã¤
|
||
PUSH DE ; ªã¤
|
||
|
||
LD HL,-.stackDepth - .readProcedure.size ; memory stack use!
|
||
ADD HL,SP ; stack
|
||
|
||
PUSH HL ; ¤à¥á ¯à®£à ¬¬ë .readProcedure
|
||
|
||
LD DE,.readProcedure ; ¯¥à¥¥á⨠¯à®£à ¬¬ã á⥪
|
||
EX DE,HL
|
||
LD BC,.readProcedure.size
|
||
LDIR ; ¯à®£à ¬¬ á⥪¥
|
||
LD BC,#100 ; ¤«¨ ᥪâ®à
|
||
RET ; ¨á¯®«¨âì ¯à®£à ¬¬ã .readProcedure, á⥪¥ ¤à¥á ¡ãä¥à ¨ ROM
|
||
|
||
|
||
; DE - next address
|
||
; HL - ROM address
|
||
.readNext:
|
||
POP BC ; ç¨á«® ᥪâ®à®¥
|
||
|
||
INC C ; áç¥â稪 áç¨â ëå ᥪâ®à®¢
|
||
DEC B ; ᥪâ®à ª®ç¨«¨áì?
|
||
|
||
JR Z,.normExit
|
||
BIT 6,H ; ç⥨¥ ¥ § ª®ç¥®
|
||
|
||
PUSH BC ; á®åà ¨âì áç¥â稪¨
|
||
JR Z,.loopRead ; ç¨â âì ¤ «ìè¥
|
||
POP BC
|
||
|
||
POP HL ; ®¬¥à ᥪâ®à
|
||
|
||
LD A,B
|
||
LD B,0
|
||
ADD HL,BC
|
||
LD B,A ; ¢ëç¨á«¨âì á«¥¤.ᥪâ®à
|
||
|
||
EX DE,HL ; ⥯¥àì HL - ¤à¥á, DE ᥪâ®à, B - ᪮«ìª® ¥é¥ ç¨â âì
|
||
|
||
JP .loop ; ç âì ¢á¥ á®¢ !
|
||
|
||
; ç⥨¥ § ª®ç¥®
|
||
.normExit:
|
||
POP HL ; ᥪâ®à, ®âªã¤ ¢¥«®áì ç⥨¥
|
||
ADD HL,BC ; ¯® ¢®§¢à âã: HL - á«¥¤. ¤à¥á
|
||
EX DE,HL ; DE - á«¥¤.ᥪâ®à
|
||
AND A
|
||
RET
|
||
; ®è¨¡ª
|
||
.errorExit: ; !TODO ᤥ« âì, ç⮡ ¢ë室¥ ¯®ª §ë¢ «®áì ª®«¨ç¥á⢮ ¯à®ç¨â ëå ᥪâ®à®¢
|
||
POP BC
|
||
POP DE
|
||
SCF
|
||
RET
|
||
|
||
; ¯à®æ¥¤ãà , ¯¥à¥®á¨¬ ï á⥪ ¤«ï çâ¥¨ï ¨§ ROM-Disk
|
||
; ®áâ®à®¦¥¥ á PUSH, ¥á«¨ ¤® ¬®£®, ⮠㢥«¨ç¨¢ © .stackDepth
|
||
.readProcedure:
|
||
POP DE ; ªã¤
|
||
POP HL ; ®âªã¤
|
||
OUT (ROM.SLOT0),A ; ROM_PAGE
|
||
LDIR ; §¤¥áì ç¨â ¥âáï ¨§ ROM-Disk
|
||
LD B,A
|
||
XOR A
|
||
OUT (ROM.SLOT0),A
|
||
OUT (SYS_PORT.ON),A
|
||
LD A,B
|
||
JP .readNext
|
||
.stackDepth EQU 8 ; à ááâ®ï¨¥ ®â ª®æ ¯à®æ¥¤ãàë ¤® ¢¥àè¨ë á⥪ .
|
||
.readProcedure.size EQU $-.readProcedure
|
||
;-----------------------------------------------------------------------;
|
||
;
|
||
|
||
;-----------------------------------------------------------------------;
|
||
; ROM-Disk pages ; [ ] ªâ¨¢¨à®¢ âì ROM-DISK
|
||
_mInfoALIGN 256,#FF
|
||
; BLOCK #3F00-$,#FF
|
||
ROM_DISK.Pages.Number:
|
||
DB ROM_DISK.Pages.Size ; ç¨á«® áâà ¨æ
|
||
; ã áâà ¨æ ¢ëáâ ¢«¥ bit4 ¤«ï ª®à४⮩ ¯®¤áâ ®¢ª¨
|
||
;(¯®¤à®¡¥¥ ¢ sp2000.inc - <EFBFBD>®àâ ã¯à ¢«¥¨ï áâà ¨æ ¬¨ <EFBFBD>‡“)
|
||
ROM_DISK.Pages: ; áâà ¨æë ROM-Disk
|
||
; ABYTE #10 #01,#02,#03,#04,#05,#06,#07,#09,#0A,#0B ; 163840 bytes - without ZX-ROMS
|
||
IFN SetFullZXromLoader
|
||
ABYTE #10 #06,#07,#09,#0A,#0B ; 81920 bytes
|
||
|
||
ELSE
|
||
ABYTE #10 #09,#0A,#0B ; 49152 bytes
|
||
|
||
ENDIF
|
||
|
||
.Size EQU $-ROM_DISK.Pages
|
||
; ª®¥æ - FF
|
||
; DB #FF
|
||
;-----------------------------------------------------------------------;
|
||
|
||
;
|
||
_mInfoBLOCK ToBIOS_FromEXT-$,#FF
|
||
;------------[Return to ROM]------------
|
||
; #3FD0
|
||
; „«ï ¢ë§®¢ äãªæ¨© ¡¨®á ¨§ áâà ¨æë 0 <EFBFBD>‡“ (ROM Extension)
|
||
FN1_RET:
|
||
PUSH AF
|
||
LD A,ROM.EXPANSION
|
||
OUT (SYS_PORT.ON),A
|
||
POP AF
|
||
RST #18
|
||
JR FN1_RET
|
||
|
||
; !TODO Free 7 bytes
|
||
;---------------------------------------
|
||
;
|
||
|
||
|
||
;
|
||
_mInfoBLOCK #3FE0-$,#FF
|
||
;---------------[ Free ]----------------
|
||
; !TODO Free 8 bytes and entry point
|
||
;SOUND_TEST:
|
||
; LD A,ROM.EXPANSION
|
||
; OUT (SYS_PORT.ON),A
|
||
; JP SND_TEST_RET
|
||
;---------------------------------------
|
||
;
|
||
|
||
;!TEST ¥ 㦮 ¥á«¨ new_api_table
|
||
;------------[HDD_5x portal]------------
|
||
; â®çª ¢å®¤ /¢ë室 ¤«ï äãªæ¨© 5å ¨§ EXP
|
||
_mInfoBLOCK #3FE8-$,#FF
|
||
EXP_HDD: ;HDD_EXE:
|
||
PUSH AF
|
||
LD A,ROM.EXPANSION
|
||
OUT (SYS_PORT.ON),A
|
||
POP AF
|
||
RET
|
||
;---------------------------------------
|
||
;
|
||
|
||
|
||
;
|
||
_mInfoBLOCK #3FF0-$,#FF
|
||
;---------------[ Free ]----------------
|
||
; !TODO Free 8 bytes and entry point
|
||
;---------------------------------------
|
||
;
|
||
|
||
|
||
;
|
||
_mInfoBLOCK #3FF8-$,#FF
|
||
;-----[ From TR-DOS to API #80..#FF]-----
|
||
; ’®çª ¢å®¤ /¢ë室 ¤«ï TR-DOS
|
||
EXP_FNS_RET:
|
||
PUSH AF
|
||
LD A,ROM.EXT
|
||
OUT (SYS_PORT.OFF),A ; ’®çª ¢å®¤ /¢ë室 ¨§/¢ TR-DOS ¯à¨ ¢ë§®¢¥ äãªæ¨© BIOS #80..#FF
|
||
JP EXP_FNS ; !TEST new_api
|
||
;---------------------------------------
|
||
;
|
||
|
||
;
|
||
_mInfoBLOCK #4000-$,#FF
|
||
;=======================================================================
|