1600 lines
35 KiB
NASM
1600 lines
35 KiB
NASM
|
||
;
|
||
;*************************************************************
|
||
;
|
||
; EXPANSION VER 3.00 (C) Peters Plus Ltd.
|
||
;
|
||
;*************************************************************
|
||
|
||
;***************************************
|
||
;*********** BEGIN EXPANSION ***********
|
||
;***************************************
|
||
; ‚室 ¯® RESET
|
||
EXP_START:
|
||
JP GLOBAL_RESET
|
||
|
||
;---------------------------------------
|
||
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.BIOS
|
||
OUT (SYS_PORT.RAM),A
|
||
POP AF
|
||
JR RST_18_1
|
||
;=======================================
|
||
|
||
;=======================================
|
||
BLOCK #10-$,0
|
||
RST_10:
|
||
; JR RST10
|
||
;=======================================
|
||
|
||
;=======================================
|
||
BLOCK #18-$,0
|
||
; RST18h - MAIN BIOS functions
|
||
JP EXP_FNS_RST18
|
||
RST_18_1:
|
||
CALL EXP_FNS_RST18
|
||
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
|
||
;=======================================
|
||
|
||
|
||
;=======================================
|
||
_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"
|
||
;=======================================
|
||
RESTARTS EQU #FFE0 ; !FIXIT ¢ë¥á⨠¢ SP2000.inc
|
||
GLOBAL_RESET:
|
||
DI
|
||
IM 1
|
||
LD HL,RESTARTS
|
||
LD DE,RESTARTS_PROG
|
||
LD B,RESTARTS_PROG.Size
|
||
.compare:
|
||
LD A,(DE)
|
||
CP (HL)
|
||
JR NZ,NO_RESTART
|
||
INC HL
|
||
INC DE
|
||
DJNZ .compare
|
||
JP RESTARTS
|
||
;=======================================
|
||
_mInfoBLOCK #66-$,0
|
||
|
||
NMI_Point:
|
||
; १¥à¢ 3 ¡ ©â ¤«ï ª®¬ ¤ë JP
|
||
;NOP
|
||
;NOP
|
||
;NOP
|
||
RETN
|
||
|
||
;=======================================
|
||
|
||
;SET_BIOS_TO_RAM: ; ¯à®£à ¬¬ à ¡®â ¥â ¤à¥á¥ 0C000h
|
||
;
|
||
; LD SP,#C0C0
|
||
; LD A,#E0
|
||
; LD C,PAGE3
|
||
; IN B,(C)
|
||
; CALL SET_ROM_PAGES+#C000
|
||
; 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
|
||
|
||
;=======================================
|
||
; 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.Size
|
||
; .compare:
|
||
; LD A,(DE)
|
||
; CP (HL)
|
||
; JR NZ,NO_RESTART
|
||
; INC HL
|
||
; INC DE
|
||
; DJNZ .compare
|
||
; JP RESTARTS
|
||
|
||
;-----[¯¥à¥å¢ â 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
|
||
JP POST_TEST.START
|
||
; no boundary set!
|
||
;
|
||
|
||
|
||
; ==== POST PROCs =================
|
||
MODULE POST_TEST
|
||
START:
|
||
; *********************************
|
||
; ===== 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 %1101'1111 ; á § ¯ïâ묨
|
||
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 #BF
|
||
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,%1101'1111
|
||
JP OUT_C_BYTE
|
||
.erbr1:
|
||
LD A,%1101'1111
|
||
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!!!
|
||
LD IX,0
|
||
AND A
|
||
ADD IX,SP ; ¢®ááâ ®¢¨âì § 票¥ ¯¥à¥¤ ®¥ § £àã§ç¨ª®¬ ª®äë (¥á«¨ áâ àâ ¯®á«¥ à¥á¥â )
|
||
;
|
||
; ‚ í⮬ ¬¥á⥠ã á IX:IY ¨§ Loader.asm
|
||
;
|
||
; „®â 騫¨ ¤® áî¤ ¬¥âªã ®â «® ¤¥à , ¯®ª ¥ ¨á¯®«ì§ã¥âáï
|
||
; !TODO number from loader
|
||
; LD A,YL
|
||
; LD L,A
|
||
; LD A,YH
|
||
; LD H,A
|
||
; LD BC,#0107 ; !!!!! áà ¢¨âì á 0107h ¢ë¥á⨠à¥ä¥à¥á®¬ âãâ ¨ ¢ loader.asm
|
||
; AND A ; ¥á«¨ à ¢® - ¯à®è« ¯¥à¥§ £à㧪
|
||
; SBC HL,BC
|
||
;JR Z,set_config ;!TODO ªâ¨¢ æ¨ï ¬¥âª¨ IX:IY ¨§ «® ¤¥à
|
||
|
||
;!TEST
|
||
;LD IX,#FFFD ; LD IX,#FFFD ; !!!!! Sprinter-2 ¢ë¥á⨠à¥ä¥à¥á®¬ âãâ ¨ ¢ loader.asm
|
||
LD HL,#FEFF ; LD IX,#FEFF ; !!!!! Sprinter-2 ¢ë¥á⨠à¥ä¥à¥á®¬ âãâ ¨ ¢ loader.asm
|
||
;
|
||
set_config:
|
||
LD (SYS_PAGE.CONFIG_BYTE),HL ; á®åà ¨âì ®¬¥à ¯à®è¨¢ª¨
|
||
;LD (SYS_PAGE.CONFIG_BYTE),IX ; á®åà ¨âì ®¬¥à ¯à®è¨¢ª¨
|
||
;LD HL,(SYS_PAGE.CONFIG_BYTE) ; ¢§ïâì ®¬¥à ¯à®è¨¢ª¨ ¢ HL
|
||
;
|
||
LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
|
||
LD (SYS_PAGE.CONFIG_DE),A
|
||
|
||
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 ; <20> ç «® ¨á¯®«ì§®¢ ¨ï á⥪ !!!
|
||
PUSH HL ; á®åà ¨âì ®¬¥à ¯à®è¨¢ª¨
|
||
|
||
CALL PORTS_INIT ; ¨¨æ¨ «¨§¨à®¢ âì ¯®àâë
|
||
XOR A
|
||
OUT (BorderColor),A
|
||
CALL EMM.CheckColdInit ; ¨¨æ¨ «¨§ æ¨ï ¯ ¬ïâ¨
|
||
|
||
POP HL ; ª®ä¨£ãà æ¨ï
|
||
JR Reset_Handler.start
|
||
; *************************************
|
||
; ‘ç¨â ¥¬, çâ® ¢å®¤ ¢ SETUP ¢á¥£¤ !!!
|
||
; *************************************
|
||
|
||
; LD A,H
|
||
; CP #FF
|
||
; JR NZ,NO_SETUP_1
|
||
; LD A,L
|
||
|
||
|
||
; JR NZ,NO_SETUP_2
|
||
|
||
MODULE Reset_Handler
|
||
start:
|
||
IN A,(SLOT3)
|
||
push af
|
||
;----[¯¥à¥å¢ â soft reset #EE port]-----
|
||
Check_EE_Port:
|
||
|
||
LD A,ACEX.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- ¬¨
|
||
|
||
; áâ ¢¨¬ ¬¥âªã ¥á«¨ ¯à®£à㧨«¨ <20>‡“ ᯥªâàã¬
|
||
LD A,'X'
|
||
LD (DE),A
|
||
DEC DE
|
||
LD A,'Z'
|
||
LD (DE),A
|
||
|
||
;!FIXIT ᤥ« âì ¢ë¡®à £à㧨âì ¤ /¥â <20>‡“ ᯥªâà㬠¯à¨ áâ àâ¥, [-------]
|
||
; ¥á«¨ ¥â - â® ¢®âªãâì íâ®â ª®¤:
|
||
; 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
|
||
;
|
||
;**************************************
|
||
;
|
||
MODULE Prepare_For_Setup
|
||
|
||
Set_ALL_Mode:
|
||
LD A,#FF
|
||
LD BC,Port_All_Mode
|
||
OUT (C),A
|
||
|
||
Set_Default_Screen:
|
||
CALL FN_SYNC.INT_DEF ; set default int
|
||
ld a,128+4 ; !HARDCODE
|
||
;ld c,BIOS.FN_SYNC
|
||
;RST_to_BIOS_18 ; set default vsync
|
||
CALL FN_SYNC ; 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,CNF_PORT.TURBO.ON + CNF_PORT.CNF_0
|
||
OUT (SYS_PORT.ROM),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
|
||
|
||
; ˆ¨æ¨ «¨§ æ¨ï ¯®á«¥¤®¢ ⥫쮣® ¯®àâ ª« ¢¨ âãàë
|
||
XOR A ;LD A,0
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
|
||
INC A ;LD A,1
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
DEC A ;LD A,0 ; #18 ¢ª«î票¥ ¯à¥àë¢ ¨©
|
||
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
|
||
|
||
; ????? 5/7 ¯ à¨â¥â?
|
||
; LD A,5
|
||
LD A,7
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
|
||
LD A,5
|
||
OUT (Z84.SIO.Ch_A.Ctrl),A
|
||
LD A,#62 ;60, 61
|
||
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: XOR A ;LD A,0
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
|
||
INC A ;LD A,1
|
||
OUT (Z84.SIO.Ch_B.Ctrl),A
|
||
DEC 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
|
||
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_PORT.CNF_3 + ROM.BIOS
|
||
OUT (SYS_PORT.ROM),A
|
||
|
||
OUT (FDC_93.DrvCTRL),A
|
||
push hl
|
||
pop hl
|
||
LD A,#3C ;!HARDCODE ª®¬ ¤ ¤«ï ‚ƒ93
|
||
OUT (FDC_93.DrvCTRL),A
|
||
push hl
|
||
pop hl
|
||
XOR A
|
||
OUT (FDC_93.Command),A
|
||
|
||
; ‚몫îç¨âì ¤®áâ㯠ª ª®â஫«¥àã ¤¨áª
|
||
LD A,CNF_PORT.CNF_0 + ROM.BIOS
|
||
OUT (SYS_PORT.ROM),A
|
||
|
||
; set HDD1/not-HDD2
|
||
LD A,IDE.Chanel.Primary ;!HARDCODE ᤥ« âì ç¥à¥§ ¬¥âªã
|
||
OUT (IDE.Chanel.Set),A
|
||
|
||
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
|
||
|
||
;-----------------------------------------------------------------------;
|
||
|
||
|
||
;-----------------------------------------------------------------------;
|
||
; paths from project DIR
|
||
|
||
INCLUDE 'FUNC_4x.ASM'
|
||
INCLUDE 'FUNC_CMOS.ASM'
|
||
INCLUDE 'BIOS_FUNC.ASM'
|
||
INCLUDE 'FUNC_SERVICE.asm'
|
||
|
||
INCLUDE 'FLEX.asm'
|
||
; INCLUDE 'EXP_SCR.ASZ'
|
||
INCLUDE 'FUNC_PIC.ASM'
|
||
INCLUDE 'FUNC_RAM_ROM_DRV.ASM'
|
||
INCLUDE 'FUNC_SYS.ASM'
|
||
INCLUDE 'FUNK_FOR_TRDOS.ASM'
|
||
INCLUDE 'FUNC_5x.asm'
|
||
INCLUDE 'FUNC_LOW_PRINT.ASM'
|
||
;-----------------------------------------------------------------------;
|
||
|
||
|
||
;-----------------------------------------------------------------------;
|
||
; ####################################
|
||
; #::::::::::::::::::::::::::::::::::#\
|
||
; #::::: Œ¥áâ® ¤ ëå ¤«ï DCP :::::::#\
|
||
; #::::::::::::::::::::::::::::::::::#\
|
||
; ####################################\
|
||
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||
DCP_DATA: INCLUDE 'DCP.ASM'
|
||
;-----------------------------------------------------------------------;
|
||
|
||
;-----------------------------------------------------------------------;
|
||
;
|
||
; #-2kb-##############################
|
||
; #::::::::::::::::::::::::::::::::::#\
|
||
; #:::: ‡¤¥áì ¬¥áâ® ¤«ï IBM-ZG ::::::#\
|
||
; #::::::::::::::::::::::::::::::::::#\
|
||
; ####################################\
|
||
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||
ZG_ADRESS: INCLUDE 'FONT.ASM'
|
||
;-----------------------------------------------------------------------;
|
||
|
||
|
||
;
|
||
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;
|
||
|
||
;
|
||
;------------------------[copy zx-roms to zx-pages]---------------------;
|
||
; SLOT0 - ROM 8, sys_port - on.
|
||
; RAM SLOT0 - page 0
|
||
; ¤«ï ०¨¬ zx spectrum
|
||
; ‚›<E2809A>Ž‹<C5BD>Ÿ…’‘Ÿ ˆ‡ އ“
|
||
init_zx_roms:
|
||
DISP Reset_Handler.init_rom_address
|
||
|
||
IN A,(SLOT3)
|
||
PUSH AF
|
||
|
||
DI
|
||
LD A,1 ;!HARDCODE
|
||
OUT (SYS_PORT.ROM),A
|
||
;LD A,2
|
||
INC A ;!HARDCODE
|
||
LD B,3 ; zx-rom number of pages
|
||
|
||
;!FIXIT ¯¥à¥¤¥« âì äãªæ¨î ¡¨®á ¤«ï ç⥨ï ROM-DISK ¨ ¯¥à¥¥á⨠¢ ¥£® <20>‡“ ᯥªâàã¬
|
||
.loop: push bc
|
||
|
||
out (ROM.SLOT0),a
|
||
or %0100'0000
|
||
out (SLOT3),a
|
||
and %1011'1111
|
||
|
||
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.ROM),A
|
||
POP AF
|
||
out (SLOT3),a
|
||
|
||
|
||
LD A,#E2 ;!HARDCODE ROM-ID - BASIC 128
|
||
LD B,#42 ; page
|
||
CALL .SET_ROM
|
||
|
||
LD A,#E3 ;!HARDCODE ROM-ID - BASIC 48
|
||
LD B,#43 ; page
|
||
CALL .SET_ROM
|
||
|
||
LD A,#E1 ;!HARDCODE ROM-ID - TR-DOS
|
||
LD B,#44 ; page
|
||
CALL .SET_ROM
|
||
|
||
; LD A,#E0 ;!HARDCODE ROM-ID - BIOS
|
||
; LD B,#45 ; page
|
||
; CALL .SET_ROM
|
||
|
||
|
||
; LD A,#EB ;!HARDCODE ROM-ID - BIOS-1
|
||
; LD B,#45 ; page
|
||
; CALL .SET_ROM
|
||
|
||
; LD A,#EF ;!HARDCODE ROM-ID - BIOS-2
|
||
; LD B,#47 ; page
|
||
; CALL .SET_ROM
|
||
|
||
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,#FE ; !HARDCODE ᤥ« âì ç¥à¥§ ¬¥âªã ACC-off Spectrum-MODE
|
||
LD BC,Port_All_Mode
|
||
OUT (C),A
|
||
|
||
;SND_TEST_RET:
|
||
LD SP,#BFFF
|
||
|
||
CALL FN_SYNC.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 ; ¨¨æ¨ «¨§ æ¨ï ®¬¥à®¢ áâà ¨æ ०¨¬ ᯥªâàã¬
|
||
|
||
;start_basic:
|
||
BASIC_128:
|
||
LD SP,#BFFF
|
||
LD HL,RES128_PROG
|
||
LD DE,ZX_VARS.PRINTER_BUFFER ; § ¯ã᪠¯à®£à ¬¬ë BASIC-¥.
|
||
LD BC,LEN_RES128
|
||
LDIR
|
||
DI
|
||
JP ZX_VARS.PRINTER_BUFFER
|
||
;-----------------------------------------------------------------------;
|
||
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;
|
||
;
|
||
|
||
|
||
|
||
|
||
;
|
||
;>$< >$< >$< >$< >$< >$< [ <20>…<EFBFBD>…Œ…™€…Œ›… ‚ އ“ ] >$< >$< >$< >$< >$< >$< ;
|
||
|
||
;--------[ <20>à®£à ¬¬ , à §¬¥é ¥¬ ï á #5B00 ¤«ï § ¯ã᪠Spectrum ]--------;
|
||
RES128_PROG:
|
||
DISP ZX_VARS.PRINTER_BUFFER ;#5B00
|
||
LD A,ROM.BIOS
|
||
OUT (SYS_PORT.RAM),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.RAM),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
|
||
|
||
;!TODO ¯®ª ¥ à ¡®â ¥â
|
||
XOR A
|
||
OUT (C),A
|
||
LD A,#02
|
||
LD B,#1F
|
||
OUT (C),A
|
||
DEC D
|
||
JP Z,0 ; 3 ‚•Ž„ ‚ EXPANSION ???
|
||
;
|
||
|
||
XOR A
|
||
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-¬¨ ¯®àâ ¬¨
|
||
ENT
|
||
LEN_RES128 EQU $-RES128_PROG
|
||
;-----------------------------------------------------------------------;
|
||
|
||
;-------------------------------[ #FFE0 ]-------------------------------;
|
||
; ¯à®£à ¬¬ , ª®â®à ï ¡ã¤ãç¨ à §¬¥é¥®© ¢ #40 áâà ¨æ¥,
|
||
; á ¤à¥á RESTARTS, ¯¥à¥å¢ âë¢ ¥â RESET
|
||
RESTARTS_PROG: ; !TODO LDConf ¯¥à¥å¢ â à¥á¥â «î¡®© ª®ä¥ ¯®á«¥ hardreset
|
||
LD HL,RESTARTS
|
||
LD B,16
|
||
.loop:
|
||
LD (HL),0
|
||
INC HL
|
||
DJNZ .loop
|
||
NOP
|
||
NOP
|
||
.Size EQU $-RESTARTS_PROG
|
||
; LD A,1
|
||
; OUT (SLOT3),A
|
||
;-----------------------------------------------------------------------;
|
||
|
||
;----------------------------[Setup Starter]----------------------------;
|
||
MODULE Setup_Starter
|
||
; ¯à®£à ¬¬ , à §¬¥é ¥¬ ï ¯® ¤à¥áã 0C000h
|
||
; ¤«ï § ¯ã᪠Setup
|
||
Start:
|
||
DISP COMPILE_ADDR.SETUP_STARTER
|
||
Exec:
|
||
LD A,CNF_PORT.CNF_0 + ROM.EXTENSION
|
||
OUT (SYS_PORT.ROM),A
|
||
|
||
LD HL,ROM_MAP.SETUP
|
||
LD DE,MEM_MAP.SETUP
|
||
LD BC,BLOCK_Setup.Length
|
||
LDIR
|
||
|
||
LD A,CNF_PORT.CNF_0 + ROM.BIOS
|
||
OUT (SYS_PORT.ROM),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
|
||
;-----------------------------------------------------------------------;
|
||
|
||
;---------------------[ ‡€ƒ‹“˜Šˆ „‹Ÿ #41 ‘’<E28098>€<EFBFBD>ˆ–›]----------------------;
|
||
;-------------[RST 08]
|
||
RAM_BIOS_PROG: ; for CALL BIOS in 41h page
|
||
DISP #08
|
||
PUSH AF
|
||
LD A,ROM.BIOS
|
||
OUT (SYS_PORT.ROM),A
|
||
POP AF
|
||
RET
|
||
ENT
|
||
.Length EQU $-RAM_BIOS_PROG
|
||
;-------------------[]
|
||
|
||
;-------------[RST 38]
|
||
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_LINE3
|
||
RST ToBIOS
|
||
|
||
.loop: DI
|
||
HALT
|
||
JR .loop
|
||
|
||
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
|
||
;-------------------[]
|
||
;-----------------------------------------------------------------------;
|
||
;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<;
|
||
;
|
||
|
||
|
||
|
||
;
|
||
; !FIXIT ᤥ« âì í⨠䨪á¨à®¢ ë¥ ¤à¥á ®â¤¥«ìë¬ ä ©«®¬ ¨ á IF/ELSE ¨ ¯®¤ª«îç âì ¨å ¯®â®¬ ªã¤ ¤®.
|
||
;
|
||
;????? ¯®á¬®âà¥âì
|
||
;----------------------------------------------------------------------;
|
||
; 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
|
||
|
||
;*************************
|
||
_mInfoBLOCK #3CE0-$,0
|
||
SW_ROM_1:
|
||
LD HL,#259F ;!HARDCODE Show Main Menu in BASIC-128
|
||
PUSH HL
|
||
LD HL,#5B00 ;!HARDCODE
|
||
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>€’
|
||
;*************************
|
||
|
||
; BLOCK #3CF0-$,0
|
||
;JMP_48:
|
||
; LD HL,00h
|
||
; JR JP_HL_48
|
||
;
|
||
; NOP
|
||
; NOP
|
||
; NOP
|
||
|
||
;***************************************
|
||
_mInfoBLOCK #3CF8-$,0
|
||
; no basic-48!
|
||
;JP_HL_48:
|
||
PUSH HL
|
||
;SW_ROM:
|
||
PUSH AF
|
||
LD A,ROM.BIOS ;!FIXIT ¥¯à ¢¨«ì®¥ §¢ ¨¥ ª®áâ âë
|
||
OUT (SYS_PORT.RAM),A
|
||
POP AF
|
||
RET
|
||
;***************************************
|
||
;----------------------------------------------------------------------;
|
||
;
|
||
|
||
;!TODO ᯥªâà㬮¢áª¨¥ ã⨫¨âë
|
||
;----------------------------------------------------------------------;
|
||
; _mInfoBLOCK #3CFA-$,#FF
|
||
; LD A,0 ;!HARDCODE
|
||
; OUT (SYS_PORT.OFF),A
|
||
; POP AF
|
||
;----------------------------------------------------------------------;
|
||
;
|
||
|
||
|
||
;
|
||
;----------------------------------------------------------------------;
|
||
_mInfoBLOCK #3D00-$,#FF
|
||
DOS_ON: NOP
|
||
RET
|
||
;***************************************
|
||
|
||
;***************************************
|
||
; BLOCK #3D02-$,FF
|
||
; !TODO ¬®¦® ®¯à¨å®¤®¢ âì âãâ 17 ¡ ©â®¢
|
||
;
|
||
;***************************************
|
||
|
||
;***************************************
|
||
_mInfoBLOCK #3D13-$,#FF
|
||
NOP
|
||
JP ToBIOS_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
|
||
;***************************************
|
||
|
||
|
||
;***************************************
|
||
; 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
|
||
////////////////////////////////////////////////////////////////////////
|
||
;----------------------------------------------------------------------;
|
||
;
|
||
|
||
|
||
|
||
;!TODO ᪮¬¯®®¢ âì
|
||
;----------------------------------------------------------------------;
|
||
; ¢å®¤ A - byte
|
||
; B - speed_parameter
|
||
FN_KBD_OUT:
|
||
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 pages ; [x] ªâ¨¢¨à®¢ ROM-DISK
|
||
_mInfoALIGN 256,#FF
|
||
; BLOCK #3F00-$,#FF
|
||
ROM_DISK.Pages.Number:
|
||
BYTE ROM_DISK.Pages.Size ; ç¨á«® áâà ¨æ
|
||
; ã áâà ¨æ ¢ëáâ ¢«¥ bit4 ¤«ï ª®à४⮩ ¯®¤áâ ®¢ª¨
|
||
;(¯®¤à®¡¥¥ ¢ sp2000.inc - <20>®àâ ã¯à ¢«¥¨ï áâà ¨æ ¬¨ <20>‡“)
|
||
ROM_DISK.Pages: ; áâà ¨æë ROM-Disk
|
||
ABYTE #10 #05,#06,#07,#09,#0A,#0B ; 98304 bytes
|
||
.Size EQU $-ROM_DISK.Pages
|
||
;-----------------------------------------------------------------------;
|
||
;#######################################################################;
|
||
;
|
||
|
||
;---------[Return to EXTENSION]---------
|
||
_mInfoBLOCK #3FD0-$,#FF ; ToBIOS_FromEXT
|
||
; #3FD0
|
||
; „«ï ¢ë§®¢ äãªæ¨© ¡¨®á ¨§ áâà ¨æë 0 <20>‡“ (Extension)
|
||
RET_to_EXTENSION:
|
||
PUSH AF
|
||
LD A,ROM.EXTENSION
|
||
OUT (SYS_PORT.ROM),A
|
||
POP AF
|
||
RST ToBIOS_18
|
||
JP RET_to_EXTENSION
|
||
|
||
; !TODO Free 6 bytes
|
||
;---------------------------------------
|
||
;
|
||
|
||
|
||
;---------------[ Free ]----------------
|
||
;
|
||
_mInfoBLOCK #3FE0-$,#FF
|
||
; !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
|
||
;------------[HDD_5x portal]------------
|
||
; â®çª ¢å®¤ /¢ë室 ¤«ï äãªæ¨© 5å ¨§ EXP
|
||
_mInfoBLOCK #3FE8-$,#FF
|
||
EXP_HDD:
|
||
PUSH AF
|
||
LD A,ROM.EXTENSION
|
||
OUT (SYS_PORT.ROM),A
|
||
POP AF
|
||
RET
|
||
;---------------------------------------
|
||
;
|
||
|
||
|
||
;
|
||
;---------------[ Free ]----------------
|
||
_mInfoBLOCK #3FF0-$,#FF
|
||
; !TODO Free 8 bytes and entry point
|
||
;---------------------------------------
|
||
;
|
||
|
||
|
||
;
|
||
;----[ From TR-DOS to API #80..#FF ]-----
|
||
_mInfoBLOCK #3FF8-$,#FF
|
||
; ’®çª ¢å®¤ /¢ë室 ¤«ï TR-DOS
|
||
EXP_FNS_RET:
|
||
PUSH AF
|
||
LD A,ROM.BIOS
|
||
OUT (SYS_PORT.RAM),A ; ’®çª ¢å®¤ /¢ë室 ¨§/¢ TR-DOS ¯à¨ ¢ë§®¢¥ äãªæ¨© BIOS #80..#FF
|
||
JP EXP_FNS
|
||
;---------------------------------------
|
||
;
|
||
|
||
;
|
||
_mInfoBLOCK #4000-$,#FF
|
||
;======================================================================= |