1597 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
			
		
		
	
	
			1597 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
| 
 | ||
| ;
 | ||
| ;*************************************************************
 | ||
| ;
 | ||
| ;       EXPANSION VER 3.00	(C) Peters Plus Ltd.
 | ||
| ;	EXPANSION VER 3.1	(C) Sprinter Team
 | ||
| ;
 | ||
| ;*************************************************************
 | ||
| 
 | ||
| 	DISPLAY "\r\n/=====================[EXP part]=====================\\"
 | ||
| 
 | ||
| ;***************************************
 | ||
| ;*********** BEGIN EXPANSION ***********
 | ||
| ;***************************************
 | ||
| ; ‚室 ¯® RESET
 | ||
| EXP_START:
 | ||
|         JP GLOBAL_RESET
 | ||
| 
 | ||
| ;---------------------------------------
 | ||
| ;ROM_NUMBER:
 | ||
| ;.part1:	DW	MotherBoardID
 | ||
| ;.part2:	DB	0
 | ||
| BOARD_INFO:
 | ||
| .number:	DW	MotherBoardID
 | ||
| .type:		DB	MotherBoardType
 | ||
| ;---------------------------------------
 | ||
| 
 | ||
| ;---------------------------------------
 | ||
| ; 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
 | ||
| .exit:	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:	IF TEST_INT
 | ||
| 	 ;INT:
 | ||
| 	 PUSH	BC
 | ||
| 	 PUSH	AF
 | ||
| 
 | ||
| 	 LD	C,SLOT3
 | ||
| 	 IN	B,(C)
 | ||
| 	 LD	A,SYS_PAGE
 | ||
| 	 OUT	(C),A
 | ||
| 
 | ||
| 	 LD	A,(SYS_PAGE.INT_ID)
 | ||
| 	 CP	#AA
 | ||
| 	 JR	Z,YESINT
 | ||
| 	 OUT	(C),B
 | ||
| 	 JP	NOINT
 | ||
| YESINT:	 PUSH	HL
 | ||
| 	 LD	HL,(SYS_PAGE.INT_ADRESS)
 | ||
| 	 LD	A,H
 | ||
| 	 OR	L
 | ||
| 	 LD	A,(SYS_PAGE.INT_PAGE)
 | ||
| 	 OUT	(C),B
 | ||
| 	 PUSH	DE
 | ||
| 	 CALL	NZ,EXTINT
 | ||
| 	 POP	DE
 | ||
| 	 POP	HL
 | ||
| NOINT:	 POP	AF
 | ||
| 	 POP	BC
 | ||
| 	 EI	
 | ||
| 	 RETI
 | ||
| 	ELSE
 | ||
| 
 | ||
| ; 	PUSH	AF
 | ||
| ; 1:	DEC	A
 | ||
| ; 	JR	NZ,1B
 | ||
| ; 	POP	AF
 | ||
| 	 EI
 | ||
| 	 RETI
 | ||
| 	ENDIF
 | ||
| ;RST10:
 | ||
| ;        CALL_48 10h
 | ||
| ;        RET
 | ||
| ;=======================================
 | ||
| 
 | ||
| 
 | ||
| ;=======================================
 | ||
|  IFN TEST_INT
 | ||
|         _mInfoALIGN   #10,0
 | ||
| ; any adress < #C0 with mask %xxxx0000
 | ||
| ; â ¡«¨æ  ¤«ï Sprinter POST-Tester-a
 | ||
| TABLE_X:
 | ||
| .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"
 | ||
|  ENDIF
 | ||
| ;=======================================
 | ||
| ;
 | ||
| 
 | ||
| ;
 | ||
| ;=======================================
 | ||
|  IFN TEST_INT
 | ||
| RESTARTS EQU #FFE0
 | ||
| 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
 | ||
|  ENDIF
 | ||
| ;=======================================
 | ||
| 	_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	BIOS_ver_hex
 | ||
| ; ID_SPRINTER_FullSize:
 | ||
| ; 		DB	ID_SPRINTER.Size
 | ||
| 		; § ¯¨áì 1
 | ||
| ID_SPRINTER:	DB	'Firmware v'
 | ||
| .BIOS_ver:	DB	BIOS_ver_string,' '
 | ||
| 		IF BETA_BUILD > 0
 | ||
| 		 DB	BETA_str_ver
 | ||
| 		ELSE
 | ||
| 		 DB	'[',BUILD_DATE,']'
 | ||
| 		ENDIF
 | ||
| 		DB	0
 | ||
| .Record1_Size	EQU	$-ID_SPRINTER
 | ||
| 		; § ¯¨áì 2
 | ||
| 		DB	'Sprinter',0
 | ||
| 		; § ¯¨áì 3			; [x] 24/02/2024
 | ||
| .bitstream_ver:	DB	bitstream_ver_string,0
 | ||
| 		DB	0
 | ||
| 		;
 | ||
| .Size		EQU $-ID_SPRINTER
 | ||
| .Records_Num	EQU	3
 | ||
| 
 | ||
| ; Check for max length of string
 | ||
| 	ASSERT ID_SPRINTER.Record1_Size < SYS_PAGE.ID_FLAG.Size, 'ERROR! ID String is to long!'
 | ||
| ;=======================================
 | ||
| 
 | ||
| 
 | ||
| ;	BLOCK	#FC-$,0
 | ||
| BoardID:
 | ||
| .start:         WORD    BoardID_start                                   ; BoardID_start
 | ||
| .end:           WORD    BoardID_end                                     ; BoardID_end
 | ||
| ;#######################################################################;
 | ||
| 
 | ||
| 
 | ||
| ;#######################################################################;
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| ; ROM-Disk pages                                                        ; [x]  ªâ¨¢¨à®¢  ROM-DISK 
 | ||
| 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
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| ;#######################################################################;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ;=======================================
 | ||
|  IF TEST_INT
 | ||
|         _mInfoALIGN   #10,0
 | ||
| ; any adress < #C0 with mask %xxxx0000
 | ||
| ; â ¡«¨æ  ¤«ï Sprinter POST-Tester-a
 | ||
| TABLE_X:								; â ¡«¨æ  ¤«ï Sprinter POST-Tester-a
 | ||
| .v0:	DB %00101000	; "0"        a
 | ||
| .v1:	DB %10111101	; "1"       ___
 | ||
| .v2:	DB %00110010	; "2"    f | g | b
 | ||
| .v3:	DB %00110100	; "3"      |___|
 | ||
| .v4:	DB %10100101	; "4"    e |   | c
 | ||
| .v5:	DB %01100100	; "5"      |___|
 | ||
| .v6:	DB %01100000	; "6"        d
 | ||
| .v7:	DB %00111101	; "7"
 | ||
| .v8:	DB %00100000	; "8"      a - 7
 | ||
| .v9:	DB %00100100	; "9"      b - 6
 | ||
| .vA:	DB %00100001	; "A"      f - 4
 | ||
| .vB:	DB %11100000	; "B"      g - 3
 | ||
| .vC:	DB %01101010	; "C"      e - 2
 | ||
| .vD:	DB %10110000	; "D"      c - 1
 | ||
| .vE:	DB %01100010	; "E"      d - 0
 | ||
| .vF:	DB %01100011	; "F"
 | ||
|  ENDIF
 | ||
| ;=======================================
 | ||
| ;
 | ||
| 
 | ||
| ;
 | ||
| ;=======================================
 | ||
|  IF TEST_INT
 | ||
| RESTARTS EQU #FFE0
 | ||
| ; ¯®«ë© ¯¥à¥å¢ â à¥á¥â  áà §ã ¯®á«¥ ¯à®«¨¢ª¨ ª®äë ¨ CAD.
 | ||
| ; § ª¨¤ë¢ ¥âáï ¢ ª àâã ¯®à⮢, ¯®í⮬㠨ᯮ«ì§®¢ âì  ¤® å¨âà®.
 | ||
| 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
 | ||
|  ENDIF
 | ||
| ;=======================================
 | ||
| ;
 | ||
| 
 | ||
| ;
 | ||
| ;-----[¯¥à¥å¢ â 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	; Z84.REG.WaitState_Ctrl 
 | ||
| 	OUT	(C),A	; Z84.SYS.Control
 | ||
| 	INC	C	; Z84.REG.WaitState_MemBound 
 | ||
| 	OUT	(C),A	; Z84.SYS.Data					; set 0 Waits
 | ||
| 	;
 | ||
| 	DEC	C
 | ||
| 	LD	A,3	; Z84.REG.Misc_Ctrl
 | ||
| 	OUT	(C),A	; Z84.SYS.Control
 | ||
| 	INC	C
 | ||
| 	; no boundary set!
 | ||
| 	;XOR	A							; disable CS0, disable CS1
 | ||
| 	LD	A,1							; enable CS0, disable CS1
 | ||
| 	OUT	(C),A	; Z84.SYS.Data
 | ||
| 	JP	POST_TEST.START
 | ||
| ;--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==
 | ||
|  IF TEST_INT
 | ||
| ;----------------[int]------------------
 | ||
| EXTINT:	OR	A
 | ||
| 	RET	Z
 | ||
| 
 | ||
| 	BIT	7,H
 | ||
| 	JR	Z,.L2
 | ||
| 	LD	C,SLOT2
 | ||
| 	BIT	6,H
 | ||
| 	JR	Z,.L1
 | ||
| 	LD	C,SLOT3
 | ||
| 
 | ||
| .L1:	IN	B,(C)
 | ||
| 	PUSH	BC
 | ||
| 	OUT	(C),A
 | ||
| 	CALL	.JPHL
 | ||
| 	POP	BC
 | ||
| 	OUT	(C),B
 | ||
| 	RET 
 | ||
|         ; ¯à®¢¥àª    ã«¥¢®© á«®â
 | ||
| .L2:    BIT     6,H
 | ||
| 	LD	C,SLOT1
 | ||
|         JR      NZ,.L1       ; ¯à®¤®«¦ ¥¬ ¥á«¨ ¥ã«¥¢®© á«®â
 | ||
| 
 | ||
| 	PUSH	HL
 | ||
| 
 | ||
| 	LD	HL,-.stackDepth - .switchProcedure.size + .patch-2
 | ||
| 	ADD	HL,SP      
 | ||
| 	PUSH	HL  
 | ||
| 
 | ||
| 	LD	HL,-.stackDepth - .switchProcedure.size			; memory stack use!
 | ||
| 	ADD	HL,SP							; stack
 | ||
| 	PUSH	HL							;  ¤à¥á ¯à®£à ¬¬ë .readProcedure
 | ||
| 
 | ||
| 	LD	DE,.switchProcedure					; ¯¥à¥¥á⨠¯à®£à ¬¬ã   á⥪
 | ||
| 	EX	DE,HL
 | ||
| 	LD	BC,.switchProcedure.size
 | ||
| 	LDIR     
 | ||
| 	RET
 | ||
| 
 | ||
| ; ¯à®æ¥¤ãà , ¯¥à¥®á¨¬ ï   á⥪ ¤«ï ¢ë§®¢  ¯à¥à뢠¨ï ¯®«ì§®¢ â¥«ï ¨§ SLOT0
 | ||
| ; ®áâ®à®¦¥¥ á PUSH, ¥á«¨  ¤® ¬®£®, ⮠㢥«¨ç¨¢ © .stackDepth
 | ||
| .switchProcedure:
 | ||
| 	DEC	DE
 | ||
| 	POP	HL
 | ||
| 	LD	(HL),E
 | ||
| 	INC	HL
 | ||
| 	LD	(HL),D
 | ||
| 
 | ||
| 	LD	C,SLOT0
 | ||
| 	IN	B,(C)
 | ||
| 	POP	HL
 | ||
| 	PUSH	BC
 | ||
| 	OUT	(C),A
 | ||
| 
 | ||
| 	XOR	A
 | ||
| 	OUT	(SYS_PORT.RAM),A
 | ||
| 
 | ||
| .patch	EQU	$+1-.switchProcedure
 | ||
| 	CALL	.JPHL
 | ||
| 
 | ||
| 	DI
 | ||
| 
 | ||
| 	XOR	A
 | ||
| 	OUT	(SYS_PORT.ROM),A
 | ||
| 
 | ||
| 	POP	BC
 | ||
| 	OUT	(C),B
 | ||
| 
 | ||
| 	RET 
 | ||
| .JPHL:	JP	(HL)
 | ||
| .stackDepth	EQU 64                                              	; à ááâ®ï¨¥ ®â ª®æ  ¯à®æ¥¤ãàë ¤® ¢¥àè¨ë á⥪ . 
 | ||
| .switchProcedure.size EQU $-.switchProcedure
 | ||
|  ENDIF
 | ||
| ;--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==
 | ||
| 
 | ||
| 
 | ||
| ; ==== 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,#FF
 | ||
| 	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		; ¯à®æ¥¤ãà  ¨¨æ¨ «¨§ æ¨¨ á ¢®§¢à â®¬   POST_3_OK
 | ||
| ; ®è¨¡®ª ¥â
 | ||
| 
 | ||
| ; ***********************************
 | ||
| ; ===== 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
 | ||
| 	XOR A
 | ||
| 	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					;!!!!!  ¯®á¬®âà¥âì
 | ||
| 	JR NZ,POST_5_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_5_ERROR:
 | ||
| ; **********************************
 | ||
| ;	POST § ¢¥àè¥
 | ||
| 	ENDMODULE
 | ||
| ; **********************************
 | ||
| 
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| ;	¯¥à¢ ï ¨¨æ¨ «¨§ æ¨ï áâà ¨æ:
 | ||
| 	XOR	A
 | ||
| 	OUT	(RGADR),A
 | ||
| 	OUT	(RGMOD),A
 | ||
| 	OUT	(SLOT0),A
 | ||
| 	;free zx pages!
 | ||
| 	 ;LD	A,ZX_PAGE.SLOT1
 | ||
| 	 ;OUT	(SLOT1),A
 | ||
| 	 ;LD	A,ZX_PAGE.SLOT2
 | ||
| 	 ;OUT	(SLOT2),A
 | ||
| 	 OUT	(SLOT2),A	; ZERO_PAGE
 | ||
| 	 DEC	A		; SHARED_PAGE
 | ||
| 	 OUT	(SLOT1),A
 | ||
| 	;
 | ||
| 	LD	A,SYS_PAGE
 | ||
| 	OUT	(SLOT3),A
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| 	MODULE SET_CONFIG_ID
 | ||
| ;-------------[Save IX:IY]--------------
 | ||
| ; Don't use IY before this point if it`s normal booting!!!
 | ||
| 	LD	IX,0
 | ||
| 	XOR	A
 | ||
| 	ADD	IX,SP					; ¢®ááâ ®¢¨âì § ç¥¨¥ ¯¥à¥¤ ®¥ § £àã§ç¨ª®¬ ª®äë (¥á«¨ áâ àâ ¯®á«¥ à¥á¥â )
 | ||
| ; ‚ í⮬ ¬¥áâ¥ ã  á IX:IY ¨§ Loader.asm
 | ||
| ; „®â é¨«¨ ¤® á ¬¥âªã ®â «® ¤¥à 
 | ||
| 	;[x] 31/12/2023 ¯®¤áâà å®¢ª  ®â ¥¤®ãâ¥çª¨ ¯ ¬ïâ¨
 | ||
| 	 ; IY - number from loader
 | ||
| 	 LD	D,YH
 | ||
| 	 LD	E,YL
 | ||
| 	 EX	DE,HL
 | ||
| 	 LD	DE,SP2000_Loader_Flag
 | ||
| 	 SBC	HL,DE
 | ||
| 	 JR	NZ,.no_conf_reload
 | ||
| 	 ; IX - number from loader
 | ||
| 	 LD	D,XH
 | ||
| 	 LD	E,XL
 | ||
| 	 EX	DE,HL
 | ||
| 	 LD	DE,ACEX.Config_ID.Sp2000
 | ||
| 	 SBC	HL,DE
 | ||
| 	 ; A = 0
 | ||
| 	 JR	NZ,.no_conf_reload
 | ||
| 	 LD	A,#80
 | ||
| .no_conf_reload:
 | ||
| 	 LD	R,A	; reg R bit7 - ¯à¨§ ª à ¡®âë «® ¤¥à 
 | ||
| 	;
 | ||
| 	;   ¢á直© á«ãç ©
 | ||
| 	 LD	HL,ACEX.Config_ID.Sp2000
 | ||
| 	 LD	(SYS_PAGE.CONFIG_BYTE),HL		; á®åà ¨âì ®¬¥à ¯à®è¨¢ª¨
 | ||
| 	 ;
 | ||
| 	 LD	A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
 | ||
| 	 LD	(SYS_PAGE.CONFIG_DE),A
 | ||
| 	;
 | ||
| 	ENDMODULE
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| ; Don't use stack (SP) before this point if it`s normal booting!!!
 | ||
| 	LD      SP,ROM_MAP.EXP.STACK			; <20> ç «® ¨á¯®«ì§®¢ ¨ï á⥪ !!!
 | ||
| 	PUSH    HL					; á®åà ¨âì ®¬¥à ¯à®è¨¢ª¨
 | ||
| 
 | ||
| 	CALL    PORTS_INIT				; ¨¨æ¨ «¨§¨à®¢ âì ¯®àâë
 | ||
|         XOR     A
 | ||
| 	OUT     (BorderColor),A
 | ||
| 	CALL    EMM.CheckColdInit			; ¨¨æ¨ «¨§ æ¨ï ¯ ¬ïâ¨
 | ||
| 	POP     HL					; ª®ä¨£ãà æ¨ï
 | ||
| ;	JR      Reset_Handler.start
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| 	MODULE	Reset_Handler
 | ||
| start:		DI
 | ||
| ;----[¯¥à¥å¢ â soft reset #EE port]-----
 | ||
| Check_EE_Port:	LD	A,ACEX.RET_PORT
 | ||
| 		LD	B,0
 | ||
| 		;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23
 | ||
| 	 	 ;LD	C,BIOS.SET_PORTS	
 | ||
| 	 	 ;CALL	@ToBIOS_3D13					; ¯¥à¥ãáâ ®¢¨âì ¢ãâà. ¯®àâ #EE
 | ||
| 		 CALL	SET_PORTS
 | ||
| 		;
 | ||
| 		; [x] 20/10/2024 ¨£®à ¯¥à¥å¢ â稪  ¯® ª« ¢¨è¥ 0
 | ||
| 		 LD	A,high ZXKeys.Line_4
 | ||
| 		 IN	A,(ZXKeys)
 | ||
| 		 RRCA
 | ||
| 		 JR	NC,No_Reset_handlers
 | ||
| 		;
 | ||
| 		LD	A,B
 | ||
| 		AND	A
 | ||
| 		JR	Z,Check_Spec_Page
 | ||
| 		;
 | ||
| 		OUT	(SLOT3),A					; Set restart page
 | ||
| .After_Hard_Rst:
 | ||
| 		LD	HL,(Spec_Page.RET_addr)				; prog address
 | ||
| 		LD	A,(Spec_Page.page_0)				; PAGE0
 | ||
| 		OUT	(SLOT0),A
 | ||
| 		LD	A,(Spec_Page.page_1)				; PAGE1
 | ||
| 		OUT	(SLOT1),A
 | ||
| 		LD	A,(Spec_Page.page_2)				; PAGE2
 | ||
| 		OUT	(SLOT2),A
 | ||
| 		LD	A,(Spec_Page.Reload_Version)
 | ||
| 		CP	#FF
 | ||
| 		JR	Z,.JPHL	; olg logic
 | ||
| 		; new logic
 | ||
| .ver_2:		LD	SP,(Spec_Page.Stack_Point)
 | ||
| 		AND	A
 | ||
| 		LD	A,#FF
 | ||
| 		LD	(Spec_Page.Reload_Version),A
 | ||
| 		LD	A,(Spec_Page.page_3)				; PAGE3
 | ||
| 		OUT	(SLOT3),A
 | ||
| 		JR	Z,.JPHL
 | ||
| 		PUSH	HL
 | ||
| 		JP	EXP_FNS_2_RET
 | ||
| .JPHL:		JP	(HL)
 | ||
| ;
 | ||
| ;--[¯¥à¥å¢ â soft/hard reset #41 page]--
 | ||
| Check_Spec_Page:
 | ||
| 		LD	A,Spec_Page
 | ||
| 		OUT	(SLOT3),A
 | ||
| 		; Check for hardreset flag
 | ||
| 		LD	A,(Spec_Page.flag_R)
 | ||
| 		CP	'R'
 | ||
| 		JR	NZ,No_Reset_handlers
 | ||
| 		LD	A,(Spec_Page.flag_S)
 | ||
| 		CP	'S'
 | ||
| 		JR	NZ,No_Reset_handlers
 | ||
| 		LD	A,(Spec_Page.flag_T)
 | ||
| 		CP	'T'
 | ||
| 		JR	NZ,No_Reset_handlers
 | ||
| 		;
 | ||
| 		XOR	A
 | ||
| 		LD	(Spec_Page.flag_R),A
 | ||
| 		JR	Check_EE_Port.After_Hard_Rst
 | ||
| 		;
 | ||
| ;---------------------------------------
 | ||
| No_Reset_handlers:
 | ||
| 		XOR	A					;!HARDCODE zx page number
 | ||
| 		OUT	(SLOT3),A
 | ||
| 	ENDMODULE
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| 
 | ||
| 	MODULE Prepare_For_Setup
 | ||
| Set_ALL_Mode:	LD A,Port_All_Mode.DEFAULT
 | ||
| 		LD BC,Port_All_Mode
 | ||
| 		OUT (C),A
 | ||
| 
 | ||
| Set_Default_Screen:
 | ||
| 		CALL FN_SYNC.INT_DEF					; set default int
 | ||
| 		ld a,128+4						; !HARDCODE 
 | ||
| 		CALL FN_SYNC						; set default vsync
 | ||
| Setup_to_RAM:	LD HL,Setup_Starter.Start
 | ||
| 		LD DE,COMPILE_ADDR.SETUP_STARTER
 | ||
| 		LD BC,Setup_Starter.Size
 | ||
| 		LDIR
 | ||
| 	;   á⥪ ª« ¤ñâáï  ¤à¥á ¢®§¢à â  ¨ ¤ «ìè¥ â é¨âáï ¢á直¬¨ ª®áâë«ï¬¨, ç⮡ ¢¥àãâìáï  § ¤
 | ||
| 		CALL Setup_Starter.Exec					; #C000
 | ||
| 		;JP	PrepareToZX
 | ||
| 	ENDMODULE
 | ||
| 
 | ||
| PrepareToZX:	; Setup HDD drives for ZX Spectrum mode
 | ||
| ; 		DI
 | ||
| ; 		LD	D,CMOS_CELL.TRDOSmount
 | ||
| ; 		CALL	CMOS_RD
 | ||
| ; 		AND	%1010'1010	; ¬ áª  ¤«ï 4-å HDD
 | ||
| ; 		JR	Z,.start_zx
 | ||
| ; 		; find first good partition
 | ||
| ; 		;
 | ||
| 
 | ||
| ; 	; ç¨á⪠ ¯¥à¥¬¥ëå ZX HDD
 | ||
| ; 		IN	A,(SLOT3)
 | ||
| ; 		EX	AF,AF
 | ||
| ; 		LD	A,SYS_PAGE
 | ||
| ; 		OUT	(SLOT3),A
 | ||
| ; 		;
 | ||
| ; 		XOR	A
 | ||
| ; 		LD	H,A
 | ||
| ; 		LD	L,A
 | ||
| ; 		LD	(SYS_PAGE.CURRENT_DIR_SEC_L),HL
 | ||
| ; 		LD	(SYS_PAGE.CURRENT_DIR_SEC_H),HL
 | ||
| ; 		DEC	A
 | ||
| ; 		LD	(SYS_PAGE.CURRENT_HDD),A
 | ||
| ; 		LD	(SYS_PAGE.CURRENT_DIR_DRIVE),A
 | ||
| ; 		LD	(SYS_PAGE.CURRENT_DIR_DRIVE_COPY),A
 | ||
| ; 		;
 | ||
| ; 		EX	AF,AF
 | ||
| ; 		OUT	(SLOT3),A
 | ||
| ; 		EX	AF,AF
 | ||
| ; 	;
 | ||
| ;		XOR	A
 | ||
| ; .loop:	PUSH	AF
 | ||
| ;		CALL	FN_HDD_PART
 | ||
| ;		POP	BC
 | ||
| ;		JR	NC,.start_zx
 | ||
| ;		LD	A,B
 | ||
| ;		INC	A
 | ||
| ;		CP	#10
 | ||
| ;		JR	C,.loop
 | ||
| 	; ¢ë室 ¢ ०¨¬ zx spectrum
 | ||
| .start_zx:
 | ||
| 	; IF FREE_ZX_PAGES
 | ||
| 		; ¥ ¤®«¦® á ¯®¯ áâì
 | ||
| 		LD	B,high BIOS.REINIT.HARD_RESET
 | ||
| 		JP	REINIT
 | ||
| 	; ELSE	; [x] free zx pages!
 | ||
| 	; 	 XOR	A
 | ||
| 	; 	 OUT	(SLOT2),A	; ZERO_PAGE
 | ||
| 	; 	 DEC	A
 | ||
| 	; 	 OUT	(SLOT1),A	; SHARED_PAGE
 | ||
| 	; 	 ;LD	A,5
 | ||
| 	; 	 ;OUT	(SLOT1),A
 | ||
| 	; 	 ;LD	A,2
 | ||
| 	; 	 ;OUT	(SLOT2),A
 | ||
| 	; 	;
 | ||
| 	; 	JP	GOTO_SPEC.ZX_MODE
 | ||
| 	; ENDIF
 | ||
| ;***********************************
 | ||
| ;	ˆ¨æ¨ «¨§ æ¨ï ¯®à⮢
 | ||
| PORTS_INIT:
 | ||
| 	; ¢ª«îç¨âì TURBO
 | ||
| 		LD	A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON
 | ||
| 		OUT	(SYS_PORT.ROM),A
 | ||
| 	; ; RESET to ISA
 | ||
| 	; 	LD BC,PORT_ISA
 | ||
| 	; 	LD A,#FF
 | ||
| 	; 	OUT (C),A
 | ||
| 	; .isa_reset:
 | ||
| 	; 	DEC A	;!FIXIT ¬®¦¥â ã¡à âì æ¨ª« ®¦¨¤ ¨ï ¨ § ¯ã«¨âì 0 ¢ ¨áã ¯®á«¥ ¨¨â  ª« ¢ë?
 | ||
| 	; 	JR NZ,.isa_reset
 | ||
| 	; 	OUT (C),A
 | ||
| 	;
 | ||
| 	; ˆ¨æ¨ «¨§ æ¨ï ¯®á«¥¤®¢ â¥«ì®£® ¯®àâ  ª« ¢¨ âãàë
 | ||
| 		; reg 0
 | ||
| 		XOR     A						;LD A,0
 | ||
| 		OUT	(Z84.SIO.Ch_A.Ctrl),A
 | ||
| 		; reg 4
 | ||
| 		LD	A,4
 | ||
| 		OUT	(Z84.SIO.Ch_A.Ctrl),A
 | ||
| 		;INC A			;LD A,5
 | ||
| 		OUT	(Z84.SIO.Ch_A.Ctrl),A
 | ||
| 		; reg 3
 | ||
| 		LD	A,3
 | ||
| 		OUT	(Z84.SIO.Ch_A.Ctrl),A
 | ||
| 		LD	A,#C1
 | ||
| 		OUT	(Z84.SIO.Ch_A.Ctrl),A
 | ||
| 		; reg 5
 | ||
| 		LD	A,5
 | ||
| 		OUT	(Z84.SIO.Ch_A.Ctrl),A
 | ||
| 		LD	A,#62        ;60, 61
 | ||
| 		OUT	(Z84.SIO.Ch_A.Ctrl),A
 | ||
| 		; reg 1
 | ||
| 		LD	A,1
 | ||
| 		OUT	(Z84.SIO.Ch_A.Ctrl),A
 | ||
| 		DEC	A     						;LD A,0  ; #18 ¢ª«î票¥ ¯à¥à뢠¨©
 | ||
| 		OUT	(Z84.SIO.Ch_A.Ctrl),A
 | ||
| .mouse:	; ˆ¨æ¨ «¨§ æ¨ï ¬ëè¨	
 | ||
| 		; ˆ¨æ¨ «¨§ æ¨ï â ©¬¥à  ¬ëè¨
 | ||
| 		LD	A,#55
 | ||
| 		OUT	(Z84.CTC.Ch_0),A
 | ||
| 		LD	A,#2D						; ᪮à®áâì ¯®àâ  - ¢â®à®© ¬®¦¨â¥«ì
 | ||
| 		OUT	(Z84.CTC.Ch_0),A
 | ||
| 		; reg 0
 | ||
| 		XOR     A       ;LD A,0
 | ||
| 		OUT	(Z84.SIO.Ch_B.Ctrl),A
 | ||
| 		; reg 4
 | ||
| 		LD	A,4
 | ||
| 		OUT	(Z84.SIO.Ch_B.Ctrl),A
 | ||
| 		;!TODO ¢á¯®¬¨âì
 | ||
| 		 ;LD	A,#45
 | ||
| 		 ;LD	A,#44
 | ||
| 		;
 | ||
| 		LD	A,#40						; ᪮à®áâì ¯®àâ  - ¯¥à¢ë© ¬®¦¨â¥«ì = 16
 | ||
| 		OUT	(Z84.SIO.Ch_B.Ctrl),A
 | ||
| 		; reg 3
 | ||
| 		LD	A,3
 | ||
| 		OUT	(Z84.SIO.Ch_B.Ctrl),A
 | ||
| 		LD	A,#41
 | ||
| 		OUT	(Z84.SIO.Ch_B.Ctrl),A
 | ||
| 		; reg 5
 | ||
| 		LD	A,5
 | ||
| 		OUT	(Z84.SIO.Ch_B.Ctrl),A
 | ||
| 		LD	A,#E0
 | ||
| 		OUT	(Z84.SIO.Ch_B.Ctrl),A
 | ||
| 		; reg 1
 | ||
| 		LD	A,1
 | ||
| 		OUT	(Z84.SIO.Ch_B.Ctrl),A
 | ||
| 		DEC	A						;LD A,0
 | ||
| 		OUT	(Z84.SIO.Ch_B.Ctrl),A
 | ||
| 	; ˆ¨æ¨ «¨§ æ¨ï ¯ à ««¥«ì®£® ¯®àâ  1 (¯à¨â¥à)
 | ||
| 		; ¤«ï POST-Tester- 
 | ||
| 		LD	A,#CF	; 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
 | ||
| 		; ¤«ï ¯à¨â¥à 
 | ||
| 		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 			;⮫쪮 ç¥à¥§ ॣ¨áâà BC, ¨ ç¥ €«ìâ¥à  ¯¥à¥å¢ â¨â
 | ||
| 		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
 | ||
| 	; "‡ £«ã襨¥" ª®¢®ªá  ¨ à¥á¥â ISA
 | ||
| 		; à¥á¥â ISA ç áâì 1
 | ||
| 		LD	BC,PORT_ISA
 | ||
| 		LD	A,#FF
 | ||
| 		OUT	(C),A
 | ||
| 		; £«ã訬 ª®¢®ªá
 | ||
| 		XOR	A
 | ||
| 		OUT	(CBL.SYS_PORT),A
 | ||
| 		LD	BC,CBL.OUT
 | ||
| 		LD	A,#80
 | ||
| .CBL_MUTE:	OUT	(C),A
 | ||
| 		DJNZ	.CBL_MUTE
 | ||
| 		; à¥á¥â ISA ç áâì 2 ¯®á«¥ ¥¡®«ì让 ¯ ã§ë
 | ||
| 		LD	BC,PORT_ISA
 | ||
| 		XOR	A
 | ||
| 		OUT	(C),A
 | ||
| 	; ‘¡à®á ª®â஫«¥à  ¤¨áª®¢®¤ 
 | ||
|         	; ‚ª«îç¨âì ¤®áâ㯠ª ª®â஫«¥àã ¤¨áª  (âà¥âìï ª®ä )
 | ||
| 		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
 | ||
| 		OUT	(IDE.Chanel.Set),A
 | ||
| 		LD	BC,#7FFD
 | ||
| 		LD	A,#10
 | ||
| 		OUT	(C),A						; BASIC_48 mode
 | ||
| 		LD	B,#1F
 | ||
| 		LD	A,1
 | ||
| 		OUT	(C),A						; RAM-0 mode !!!
 | ||
| 	; ®ç¨á⪠ ¡ãä¥à®¢ ª« ¢¨ âãàë ¨ ¬ëè¨ ¢ SIO
 | ||
| 		CALL	.clean_kbd_buf
 | ||
| 		JR	.clean_mouse_buf
 | ||
| .clean_kbd_buf:	; Clearing the keyboard buffer
 | ||
| 		IN	A,(Z84.SIO.Ch_A.Ctrl)
 | ||
| 		RRCA
 | ||
| 		RET	NC
 | ||
| 		IN	A,(Z84.SIO.Ch_A.Data)
 | ||
| 		JR	.clean_kbd_buf
 | ||
| .clean_mouse_buf:; Clearing the mouse buffer
 | ||
| 		IN	A,(Z84.SIO.Ch_B.Ctrl)
 | ||
| 		RRCA
 | ||
| 		RET	NC
 | ||
| 		IN	A,(Z84.SIO.Ch_B.Data)
 | ||
| 		JR	.clean_mouse_buf
 | ||
| ;---------------------------------------
 | ||
| 
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| 
 | ||
| 
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| ;	paths from project DIR
 | ||
| 
 | ||
|                 INCLUDE 'BIOS_FUNC.ASM'
 | ||
| 	        INCLUDE 'FUNC_4x.ASM'
 | ||
| 	        INCLUDE 'FUNC_CMOS.ASM'
 | ||
| 	        INCLUDE 'FUNC_SERVICE.asm'
 | ||
| 		; INCLUDE 'EXP_SCR.ASZ'		LP_SCR_MNU
 | ||
| 	        INCLUDE 'FUNC_SCREEN.ASM'
 | ||
| 	        INCLUDE 'FUNC_RAM_ROM_DRV.ASM'
 | ||
| 	        INCLUDE 'FUNC_SYS.ASM'
 | ||
| 	        INCLUDE 'FUNC_FOR_TRDOS.ASM'
 | ||
|                 INCLUDE 'FUNC_5x.asm'
 | ||
|                 INCLUDE 'FUNC_LOW_PRINT.ASM'
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| 
 | ||
| 
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| ;               ####################################
 | ||
| ;               #::::::::::::::::::::::::::::::::::#\
 | ||
| ;               #::::: Œ¥áâ® ¤ ëå ¤«ï DCP :::::::#\
 | ||
| ;               #::::::::::::::::::::::::::::::::::#\
 | ||
| ;               ####################################\
 | ||
| ;                \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 | ||
| DCP_DATA:	INCLUDE	'DCP.ASM'
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| 
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| ;	
 | ||
| ;               #-2kb-##############################
 | ||
| ;               #::::::::::::::::::::::::::::::::::#\
 | ||
| ;               #:::: ‡¤¥áì ¬¥áâ® ¤«ï IBM-ZG ::::::#\
 | ||
| ;               #::::::::::::::::::::::::::::::::::#\
 | ||
| ;               ####################################\
 | ||
| ;                \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 | ||
| ZG_ADDRESS:	INCLUDE	'FONT.ASM'
 | ||
| ZG_SIZE		EQU	$-ZG_ADDRESS
 | ||
| 		ASSERT (ZG_SIZE <= #800), "The font size is too big!"
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| 
 | ||
| 
 | ||
| ;
 | ||
| ; !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 BASIC_FN.x128.show_main_menu
 | ||
|         PUSH    HL
 | ||
|         LD      HL,#5B00        ;!HARDCODE BASIC_FN.x128.ROM_SWAP
 | ||
|         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:	;!FIXIT assert with ROM
 | ||
|        PUSH HL
 | ||
| SW_ROM:		;!FIXIT assert with 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	;!TODO à ¡®â ¥â ¯à¨ #7FFD[4] = 1. Š ª-â® ã§ ¢ âì § ç¥¨¥ 7FFD ¨ ¬¥ïâì?
 | ||
| 	RET
 | ||
| ;***************************************
 | ||
| 
 | ||
| ;***************************************
 | ||
| ;       BLOCK #3D02-$,FF
 | ||
| ;  !TODO ¬®¦® ®¯à¨å®¤®¢ âì âãâ 17 ¡ ©â®¢
 | ||
| ;***************************************
 | ||
| 
 | ||
| ;***************************************
 | ||
| 	_mInfoBLOCK #3D13-$,#FF
 | ||
| 	NOP
 | ||
| 	JP      ToBIOS_18
 | ||
| ;***************************************
 | ||
| 
 | ||
| ;***************************************
 | ||
| ;       BLOCK #3D17-$,FF
 | ||
| ;***************************************
 | ||
| ;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 	; IF	FREE_ZX_PAGES
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| GOTO_SPEC:	PUSH	HL
 | ||
| 		LD	HL,RET_TO_BIOS
 | ||
| 		EX	(SP),HL
 | ||
| 		PUSH	HL
 | ||
| 		LD	HL,GOTO_SPECTRUM
 | ||
| 		EX	(SP),HL
 | ||
| 		JP	EXTENSION_FNs
 | ||
| 
 | ||
| ZX_MEMORY_MANAGER:
 | ||
| 		PUSH	HL
 | ||
| 		LD	HL,RET_TO_BIOS
 | ||
| 		EX	(SP),HL
 | ||
| 		PUSH	HL
 | ||
| 		LD	HL,MANAGE_ZX_PAGES.FN_ENTRANCE
 | ||
| 		EX	(SP),HL
 | ||
| 		JP	EXTENSION_FNs
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| 
 | ||
| 
 | ||
| ;>$< >$< >$< >$< >$< >$< [ <20>…<EFBFBD>…Œ…™€…Œ›… ‚ އ“ ] >$< >$< >$< >$< >$< >$< ;
 | ||
| ;
 | ||
| ;---------------------[ ‡€ƒ‹“˜Šˆ „‹Ÿ #41 ‘’<E28098>€<EFBFBD>ˆ–›]----------------------;
 | ||
| ;-------------[RST 08]
 | ||
| RAM_BIOS_PROG:								; for CALL BIOS in #41 page
 | ||
| 	DISP	Spec_Page.to_bios
 | ||
| 		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   Spec_Page.no_zx_rom
 | ||
| 		DI
 | ||
| 		;
 | ||
| 		LD	A,CNF_PORT.CNF_0
 | ||
| 		OUT	(SYS_PORT.RAM),A
 | ||
| 		;
 | ||
| 		LD	A,SHARED_PAGE
 | ||
| 		OUT	(SLOT3),A
 | ||
| 		OUT	(SLOT2),A
 | ||
| 		OUT	(SLOT1),A
 | ||
| 		LD	SP,#BF00
 | ||
| 		;
 | ||
| 		LD      E,0
 | ||
| 		LD      BC,BIOS.LP_OPEN_S.TXT_80x32_Default
 | ||
| 		RST     ToBIOS
 | ||
| 		;
 | ||
| 		LD      DE,0
 | ||
| 		LD      HL,#2050
 | ||
| 		LD      C,BIOS.LP_CLS_WIN
 | ||
| 		RST     ToBIOS
 | ||
| 		; set scr-2
 | ||
| 		LD      A,1
 | ||
| 		OUT     (SCREEN_SWITCH),A
 | ||
| 		;
 | ||
| 		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.CGA.FLASH + COLORS.CGA.INK.RED
 | ||
| 		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
 | ||
| ;-------------------[]
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| ;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<; 
 | ||
| 
 | ||
| ;-------------------------------[ #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
 | ||
| ; ¯à®£à ¬¬ , à §¬¥é ¥¬ ï ¯®  ¤à¥áã #C000 ¤«ï § ¯ã᪠ 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]
 | ||
| 	; ¢ CF ¯¥à¥¤ ñâáï  ¦ â  «¨ ª« ¢¨è  SPACE. CF=0: ª« ¢¨è   ¦ â 
 | ||
| 	; ¯®â®¬ ¯à®¢¥àï¥âáï ¢ main.asm [space_check] ¨ ¥á«¨  ¦ â ,
 | ||
| 	; â® ¯à®¨á室¨â ¨£®à ¯ à ¬¥âà  "<22>ëáâàë© áâ àâ <20>‡“"
 | ||
| 	; ¢® ¢à¥¬ï ¯¥à¥§ £à㧪¨ ¢ [Check Quick Start ROM]
 | ||
| 		LD	BC,Port_All_Mode			        
 | ||
| 		IN	H,(C)						; ¨«¨ LD H,#FF
 | ||
| 		LD	A,Port_All_Mode.DEFAULT - Port_All_Mode.SPECTRUM_MODE_OFF
 | ||
| 		OUT	(C),A						; keyboard int & acc off
 | ||
| 		LD	A,high ZXKeys.Line_7
 | ||
| 		IN	A,(ZXKeys)
 | ||
| 		RRA		; CF=0 ª« ¢¨è   ¦ â 
 | ||
| ;----------------------[]
 | ||
| 		OUT	(C),H
 | ||
| 		DI 
 | ||
| 		POP	HL      					;  ¤à¥á ¢®§¢à â  ¢ EXP ¨§ SETUP
 | ||
| 		JP SETUP_MAIN
 | ||
| 	ENT
 | ||
| Size		EQU $-Setup_Starter.Start
 | ||
|  ENDMODULE
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| ;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<; 
 | ||
| ;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ;***************************************
 | ||
| 	_mInfoBLOCK #3E00-$,#FF
 | ||
| DOS_OFF:
 | ||
| 	PUSH	AF
 | ||
| 	LD	A,R
 | ||
| 	DI
 | ||
| 	PUSH	AF
 | ||
| 	PUSH	BC
 | ||
| 	;
 | ||
| 	LD	BC,(#5BFF)	; !HARDCODE
 | ||
| 	LD	A,#C9		; Opcode RET
 | ||
| 	LD	(#5BFF),A	; !HARDCODE
 | ||
| 	CALL	#5BFF		; !HARDCODE
 | ||
| 	LD	(#5BFF),BC	; !HARDCODE
 | ||
| 	;
 | ||
| 	POP	BC
 | ||
| 	POP	AF
 | ||
| 	JP	PO,.no_EI
 | ||
| 	EI
 | ||
| .no_EI:	POP	AF
 | ||
| 	RET
 | ||
| ;***************************************
 | ||
| 
 | ||
| 
 | ||
| ;***************************************
 | ||
| ;       BLOCK #3E16-$,FF
 | ||
| ;  !TODO ¬®¦® ®¯à¨å®¤®¢ âì âãâ 10 ¡ ©â®¢
 | ||
| ;
 | ||
| ;***************************************
 | ||
| 
 | ||
| 
 | ||
| ////////////////////////////////////////////////////////////////////////
 | ||
| ;------[  ;  !TODO çâ®- â® á¢ï§ ®¥ á ¯¥à¥¬¥ë¬¨ LIB_TABLE  ;  ]------
 | ||
| ;	_mInfoBLOCK #3E20-$,#FF
 | ||
| ; [x]
 | ||
| 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
 | ||
| ;----------------------------------------------------------------------;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ;----------------------------------------------------------------------;
 | ||
| ; DE - ç áâ®â 
 | ||
| ; HL - ¯à®¤®«¦¨â¥«ì®áâì
 | ||
| BEEP:		LD	A,#10
 | ||
| 		CALL	.beep_loop
 | ||
| 		;
 | ||
| 		;XOR	A
 | ||
| 		CALL	.beep_loop
 | ||
| 		;
 | ||
| 		DEC	HL
 | ||
| 		LD	A,H
 | ||
| 		OR	L
 | ||
| 		JR	NZ,BEEP
 | ||
| 		RET
 | ||
| 		;
 | ||
| .beep_loop:	OUT	(ZX_Beeper),A
 | ||
| 		LD	B,D
 | ||
| 		LD	C,E
 | ||
| 		;
 | ||
| .loop:		DEC	BC
 | ||
| 		LD	A,B
 | ||
| 		OR	C
 | ||
| 		JR	NZ,.loop
 | ||
| 		RET
 | ||
| ;----------------------------------------------------------------------;
 | ||
| 
 | ||
| 
 | ||
| ;#######################################################################;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ;---------[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
 | ||
| ;---------------------------------------
 | ||
| ;
 | ||
| 
 | ||
| ; [x] new portal
 | ||
| ;------------[Portal to EXT]------------        
 | ||
| ; â®çª  ¢å®¤ /¢ë室  ¤«ï äãªæ¨© ¢ ROM.EXTENSION
 | ||
| 	_mInfoBLOCK #3FE8-$,#FF	
 | ||
| EXTENSION_FNs:								;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
 | ||
| ;======================================================================= | 
