1956 lines
		
	
	
		
			42 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
			
		
		
	
	
			1956 lines
		
	
	
		
			42 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
| ;[BEGIN]
 | ||
| ;//MODULE: DSETUP, Main module of BIOS SETUP & BOOTSTRAP
 | ||
| ;//CREATE: ??-??-????	AUTHOR:	Denis Parinov
 | ||
| ;//UPDATE: 23-04-2001	DNS	Remake for Sp2000 mainboard
 | ||
| ;---------------------------------------------------------------
 | ||
| ;Rev	Date	   Name	Description
 | ||
| ;---------------------------------------------------------------
 | ||
| ;R08	04-03-2002 DNS	Disabled Open TRDOS
 | ||
| ;R07	16-02-2002 DNS	Add routine for check CMOS clock registers.
 | ||
| ;R06	28-01-2002 DNS	Add new items to SETUP Utility for screen position.
 | ||
| ;R05	01-10-2001 DNS	Found BUG with size of boot messages, messages for secondary
 | ||
| ;			IDE were removed. (BUG NOT FIXED!) --- âë ®è¨¡ ¥èìáï, ¤à㣠¬®©)))
 | ||
| ;R04	14-09-2001 DNS	Added procedure GET_BOARD_NUMBER
 | ||
| ;R03	30-07-2001 DNS  Developed a new IDE DETECT routine and fixied any bugs
 | ||
| ;R02    25-07-2001 DNS  Add Secondary IDE
 | ||
| ;R01	23-04-2001 DNS	Removed procedure GET_ID and make new which
 | ||
| ;                       will be take Model Name.
 | ||
| ;---------------------------------------------------------------
 | ||
| 
 | ||
| ;Memory	dump							; !TODO ¯¥à¥¤¥« âì
 | ||
| ;#0000-#3FFF : STANDART	ROM BIOS
 | ||
| ;#4000-#7BFF : NOT USED	MEMORY
 | ||
| ;#7C00-#7C7F : SYSTEM JUMP RESIDENT
 | ||
| ;#7C80-#7DFF : NOT USED	MEMORY
 | ||
| ;#7E00-#7FFF : SECTOR BUFFER AND TEMPORY AREA
 | ||
| ;#8000-#8002 : SETUP ENTRY POINT
 | ||
| ;#8003-#80F0 : STACK FRAME						;!!!!!  ¯®á¬®âà¥âì
 | ||
| ;#80F1-#80FD : NOT USED	MEMORY
 | ||
| ;#80FE-#80FF : INTERRUPT ADDRESS
 | ||
| ;#8000-#B3FF : SETUP AND BOOT PROGRAM
 | ||
| ;#B400-#BAFF : BOOT MESSAGES					;!!!!!  ¯®á¬®âà¥âì
 | ||
| ;#B900-#BEFF : SETUP MESSAGES AND ITEMS			;!!!!!  ¯®á¬®âà¥âì
 | ||
| ;#BF00-#BFFF : STACK FRAME						;!!!!!  ¯®á¬®âà¥âì!
 | ||
| ;#C000-#D8FF : NOT USED	MEMORY
 | ||
| ;---DELETED--- #D900-#FFFF : UNPACKED	LOGOTYPE
 | ||
| 
 | ||
| ;System page(#FE) dump
 | ||
| ;#F000-#F007 : db "RESTART",0 ;First start identificator
 | ||
| ;#F008-#F00F : db hour,min,sec,day,month,century,year,reserved ; PowerOn date
 | ||
| ;#F010-#F017 : db hour,min,sec,day,mouth,century,year,reserved ; Reboot date
 | ||
| ;
 | ||
| ;#FEE0-#FEEF : Any buffer (Video mode set?!) Used in Sprinter DOS and CD driver
 | ||
| ;#FF00
 | ||
| ;
 | ||
| 
 | ||
| ; ¤«ï ¢ à¨ â  á § ¯ ª®¢ª®© ç á⨠¡¨ à¨ª  (¬®¦¥â ¥ áà ¡®â âì ¡¥§  ¯¨«ì¨ª  §  ¤ ¢®áâìî «¥â)
 | ||
|  IFDEF PREBUILD
 | ||
| ;  ENCODING "DOS"
 | ||
|   DEVICE	ZXSPECTRUM4096                                          ; ¬®¤¥«ì á 4 ¬¥âà ¬¨ ¯ ¬ïâ¨
 | ||
|   MMU		2 e, 0                                                  ; áâà ¨æ  0 ¢ ¡ ªã 2 ¨ ¯à®¢¥àª    £à ¨æë.
 | ||
|   INCLUDE 'src/bios/shared/includes.inc'
 | ||
|   ORG	COMPILE_ADDR.MAIN
 | ||
|   OUTPUT 'Build/Bin/temp/MAIN.BIN'
 | ||
|  ENDIF
 | ||
| 
 | ||
| ;SYS_PAGE.RAMD_KEYS      EQU     #C180                                           ; ª«îç¨ RAM-Disks
 | ||
| ;RAMD_KEY_NUM   EQU     16
 | ||
| ;SYS_PAGE       EQU     #FE                                             ; áâà ¨æ  á á¨á⥬묨 ¯¥à¥¬¥ë¬¨ BIOS
 | ||
| ;SYS_PORT_ON    EQU     #7C
 | ||
| ;SYS_PORT_OFF	EQU     #3C
 | ||
| ;STACK          EQU     #80F0
 | ||
| ;PAGE0          EQU     #82
 | ||
| ;PAGE1          EQU     #A2
 | ||
| ;PAGE2          EQU     #C2
 | ||
| ;SLOT3          EQU     #E2
 | ||
| ;Y_PORT         EQU     #89
 | ||
| ;SYSPAGE	EQU	#FE
 | ||
| ;INT            EQU     #80
 | ||
| 
 | ||
| ;ITMADDR        EQU     MSG_Items_Buffer
 | ||
| ;ITMTABS        EQU     #BA00                                           ;!!!!! b900
 | ||
| ;ITMTABS        EQU     ITMADDR
 | ||
| 
 | ||
| ;FDD	EQU	#03
 | ||
| 
 | ||
| ;!FIXIT	®à¬ «ì® ¯à®¯¨á âì
 | ||
| TEMP			EQU	#7800					; !HARDCODE
 | ||
| OS_LOAD.SectorSizeAddr	EQU	TEMP-2
 | ||
| IDENTIFY_DEVICE_BUFFER	_ATA_IDENTIFY_DEVICE_DATA = TEMP
 | ||
| MEMMAP2			EQU	TEMP					; ¤®«¦® ¡ëâì ¢ë஢¥® ¯® ALIGN 256
 | ||
| TPOINTD			EQU	TEMP - SYS_PAGE.RAMD_KEYS.NUM; - SYS_PAGE.Sp_RAMD_KEYS.NUM ; [x] 4/11/2023
 | ||
|  ASSERT	(low TEMP = 0) or (low MEMMAP2 = 0), "ERROR Align 256!!!"
 | ||
| 
 | ||
| ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ;
 | ||
| ;SETUP_MAIN:
 | ||
| MAIN_START:
 | ||
| 	; POP	AF
 | ||
| 	; POP	HL
 | ||
| 	LD	SP,STACK
 | ||
| 	PUSH	HL
 | ||
| 	LD      (RET_TO_EXP_ADDR),HL
 | ||
| 	JP	START
 | ||
| ;	DB	"(C) 2002 PETERS PLUS LTD "
 | ||
| RET_TO_EXP_ADDR: WORD 0000                                                   ; place for save ret address to exp
 | ||
| 
 | ||
| ;
 | ||
| ;------------------- ;!!!!!  ¯®á¬®âà¥âì
 | ||
| ; ‡ ç¥¨ï ¢à¥¬¥¨ ¨ ¤ âë ¢ ª¬®á § ¯¨á ë ¤¥áïâ¨ç묨 § ç¥¨ï¬¨
 | ||
| ; ¨ ¢ ॣ¨áâॠA   ¢ë室¥ ¨§ äãªæ¨¨ #F6 (CMOS_RD) BIOS § ç¥¨ï ¤¥áïâ¨çë¥.
 | ||
| GETTIME:
 | ||
| 	PUSH    HL
 | ||
| 	LD      D,CMOS.Register.hours
 | ||
|         CALL    CMOS_RD
 | ||
| 	CP      #24                                                     ;24
 | ||
| 	jp      nc,.error
 | ||
| 	LD      (HL),A
 | ||
| 	INC     HL
 | ||
| 
 | ||
| 	LD      D,CMOS.Register.minutes
 | ||
|         CALL    CMOS_RD
 | ||
| 	CP      #5A                                                     ; 60
 | ||
| 	jp      nc,.error
 | ||
| 	LD      (HL),A
 | ||
| 	INC     HL
 | ||
| 
 | ||
| 	LD      D,CMOS.Register.seconds
 | ||
|         CALL    CMOS_RD
 | ||
| 	CP      #5A                                                     ; 60
 | ||
| 	jp      nc,.error
 | ||
| 	LD      (HL),A
 | ||
| 	INC     HL
 | ||
| 
 | ||
| 	LD      D,CMOS.Register.date					; ç¨á«®
 | ||
|         CALL    CMOS_RD
 | ||
| 	CP      #32
 | ||
| 	jp      nc,.error
 | ||
| 	LD      (HL),A
 | ||
| 	INC     HL
 | ||
| 
 | ||
| 	LD      D,CMOS.Register.month
 | ||
|         CALL    CMOS_RD
 | ||
| 	CP      #13                                                     ;13
 | ||
| 	jp      nc,.error
 | ||
| 	LD      (HL),A
 | ||
| 	INC     HL
 | ||
| 
 | ||
| 	LD      D,CMOS.Register.century
 | ||
|         CALL    CMOS_RD
 | ||
| 	CP      #1A                                                     ;20
 | ||
| 	jp      c,.error
 | ||
| 	CP      #9A                                                     ;100
 | ||
| 	jp      nc,.error
 | ||
| 	LD      (HL),A
 | ||
| 	INC     HL
 | ||
| 
 | ||
| 	LD      D,CMOS.Register.year
 | ||
|         CALL    CMOS_RD
 | ||
| 	CP      #9A                                                     ;100
 | ||
| 	jp      nc,.error
 | ||
| 	LD      (HL),A
 | ||
| 
 | ||
| ; 	DEC	HL
 | ||
| ; 	LD	C,A
 | ||
| ; 	LD	A,19
 | ||
| ; 	CP	(HL)
 | ||
| ; 	RET	Z
 | ||
| ; 	LD	A,20
 | ||
| ; 	CP	(HL)
 | ||
| ; 	RET	Z
 | ||
| ; 	LD	A,80
 | ||
| ; 	CP	C
 | ||
| ; 	LD	A,20
 | ||
| ; 	JR	NC,.correct_century
 | ||
| ; 	LD	A,19
 | ||
| ; .correct_century:
 | ||
| ; 	LD	(HL),A
 | ||
| ; 	LD	D,#32							;CENTURY
 | ||
| ; 	LD	C,#F7   						; !HARDCODE
 | ||
| ; 	RST_to_BIOS_18
 | ||
| 
 | ||
| 	POP HL
 | ||
| 	RET 
 | ||
| .error:
 | ||
| 	LD HL,.default_date
 | ||
| 	POP DE
 | ||
| 	LD BC,7
 | ||
| 	LDIR
 | ||
| 
 | ||
| ;---[]
 | ||
| ;!FIXIT
 | ||
| 	CALL CMSERR
 | ||
| 	; LD	HL,.default_date
 | ||
| 	; call writeDateTimeToCmos
 | ||
| ;---[]
 | ||
| 
 | ||
| 	ld a,#FF
 | ||
| 	ld (ERRSUM.ErrDateTime),a
 | ||
| 	RET
 | ||
| 
 | ||
|  LUA ALLPASS
 | ||
| 	sj.insert_define("Current_CENTURY", math.modf(tonumber(os.date("%Y"))/100))
 | ||
| 	sj.insert_define("Current_YEAR", tonumber(os.date("%y")))
 | ||
| 	sj.insert_define("Current_MONTH", tonumber(os.date("%m")))
 | ||
| 	sj.insert_define("Current_DATE", tonumber(os.date("%d")))	
 | ||
|  ENDLUA
 | ||
| 
 | ||
| .default_date:
 | ||
| 	BYTE 0,0,0				; Hours, minutes, seconds
 | ||
| 	BYTE #Current_DATE
 | ||
| 	BYTE #Current_MONTH
 | ||
| 	BYTE #Current_CENTURY
 | ||
| 	BYTE #Current_YEAR
 | ||
| 
 | ||
| 	UNDEFINE Current_DATE
 | ||
| 	UNDEFINE Current_MONTH
 | ||
| 	UNDEFINE Current_CENTURY
 | ||
| 	UNDEFINE Current_YEAR
 | ||
| ;--------------------------------
 | ||
| ;
 | ||
| ;R07 ; !FIXIT CMOS ᤥ« âì ᮣ« á® ¤®ª¥   ª¬®á
 | ||
| ; ¥á«¨ ¡ â à¥©ª  ᥫ , â® ¯à¨ 祪¥ ª¬®á  ¢ë¤ ¢ âì ᮮ⢥âáâ¢ãîéãî ®è¨¡ªã ¨, ¢®§¬®¦®, à ¡®â âì ª ª ¡¥§ ª¬®á .
 | ||
| CMOSINIT:
 | ||
| 	LD	D,CMOS.Register.CTRLregA                                ; !FIXIT FREQ
 | ||
|         CALL    CMOS_RD
 | ||
| 	CP	#26                                                     ; !FIXIT 
 | ||
| 	JR	NZ,CMSERR
 | ||
| 
 | ||
| 	LD	D,CMOS.Register.CTRLregC
 | ||
|         CALL    CMOS_RD
 | ||
| 	CP	#50
 | ||
| 	RET	Z
 | ||
| CMSERR:
 | ||
| 	LD	D,CMOS.Register.CTRLregB
 | ||
| 	LD	A,#82							;TIME FORMAT    ; !FIXIT CMOS
 | ||
|         CALL    CMOS_WR
 | ||
| 
 | ||
| 	LD	D,CMOS.Register.CTRLregA
 | ||
| 	LD	A,#26                                                   ; !FIXIT CMOS FREQ
 | ||
|         CALL    CMOS_WR
 | ||
| 
 | ||
| 	LD	D,CMOS.Register.CTRLregC
 | ||
| 	LD	A,#0                                                    ; !FIXIT CMOS
 | ||
|         CALL    CMOS_WR
 | ||
| 
 | ||
| 	LD	HL,GETTIME.default_date
 | ||
| 	call    writeDateTimeToCmos
 | ||
| 
 | ||
| 	LD	D,CMOS.Register.CTRLregB
 | ||
| 	LD	A,#02							;TIME FORMAT    ; !FIXIT CMOS
 | ||
|         CALL    CMOS_WR
 | ||
| 
 | ||
| 	; LD	D,13
 | ||
| 	; LD	A,#80                                                   ; !FIXIT CMOS
 | ||
| 	; LD	C,#F7   						; !HARDCODE
 | ||
| 	; RST_to_BIOS
 | ||
| 	RET
 | ||
| 
 | ||
| CLEAR_MEM:	IN	A,(SLOT3)
 | ||
| 		PUSH	AF
 | ||
| 		LD	A,SYS_PAGE
 | ||
| 		OUT	(SLOT3),A
 | ||
| 	; ®ç¨é ¥¬ ¡ãä¥à RAM Table
 | ||
| 		LD	HL,MEMMAP2
 | ||
| 		LD	DE,MEMMAP2+1
 | ||
| 		LD	BC,255
 | ||
| 		LD	(HL),0
 | ||
| 		LDIR
 | ||
| 	; ª®¯¨à㥬 ZX vROM 
 | ||
| 		LD	HL,(SYS_PAGE.Block_ID.vROM)	; 㦮 § ç¥¨¥ ¢ L
 | ||
| 		LD	H,high SYS_PAGE.RAM_TABLE
 | ||
| 		LD	D,high MEMMAP2
 | ||
| 		;LD	BC,#01FF					;!HARDCODE 1 vROM RAM BLOCK ID
 | ||
| 		CALL	COPY_CHAIN
 | ||
| 		; LD	IX,SYS_PAGE.Block_ID.vROM
 | ||
| 		; LD	H,high SYS_PAGE.RAM_TABLE
 | ||
| 		; LD	D,high MEMMAP2
 | ||
| 		; LD	BC,#01FF					;!HARDCODE 1 vROM RAM BLOCK ID
 | ||
| 		; CALL	.SAVE_RMD
 | ||
| 	; [x] 28/09/2024 Žâ¤¥«ìë¥ à ¬¤¨áª¨ ¤«ï ०¨¬  ᯥªâà㬠 ¨ DSS.
 | ||
| 		LD	B,high BIOS.SWAP_RAM_DRIVES.Sp2000
 | ||
| 		CALL	SWAP_RAM_DRIVES
 | ||
| 	; 㦮 «¨ á®åà ïâì à ¬¤¨áª¨ ¯à¨ ¯¥à¥§ ¯ã᪥?
 | ||
| 		LD	BC,CMOS_CELL.BootUpParams.Mask.SaveRAMdisks		;#400E
 | ||
| 		CALL	GET_CMOS_VALUE
 | ||
| 		OR	A
 | ||
| 		PUSH	AF
 | ||
| 		JR	Z,.skip_save_rmd
 | ||
| 		;
 | ||
| 	; save RAM disks on reboot when memory is cleared
 | ||
| 		LD	HL,SYS_PAGE.RAMD_KEYS
 | ||
| 		LD	DE,TPOINTD
 | ||
| 		LD	BC,SYS_PAGE.RAMD_KEYS.NUM
 | ||
| 		LDIR
 | ||
| 		; [x] 4/11/2023
 | ||
| 		;  LD	HL,SYS_PAGE.Sp_RAMD_KEYS
 | ||
| 		;  LD	BC,SYS_PAGE.Sp_RAMD_KEYS.NUM
 | ||
| 		;  LDIR
 | ||
| 		;
 | ||
| 	; ª®¯¨à㥬 RAM ¤¨áª¨ Sprinter mode
 | ||
| 		LD	IX,SYS_PAGE.RAMD_KEYS					;RAM DISKS
 | ||
| 		LD	H,high SYS_PAGE.RAM_TABLE
 | ||
| 		LD	D,high MEMMAP2
 | ||
| 		LD	BC,SYS_PAGE.RAMD_KEYS.NUM*256+#FF
 | ||
| 		CALL	SAVE_CHAINS
 | ||
| 	; [x] 4/11/2023
 | ||
| 		; LD	IX,SYS_PAGE.Sp_RAMD_KEYS
 | ||
| 		; LD	B,SYS_PAGE.Sp_RAMD_KEYS.NUM
 | ||
| 		; CALL	.SAVE_RMD
 | ||
| 	;
 | ||
| .skip_save_rmd:	CALL	EMM.InitMem
 | ||
| 		LD	HL,MEMMAP2
 | ||
| 		LD	DE,SYS_PAGE.RAM_TABLE
 | ||
| 		CALL	RESTORE_CHAINS
 | ||
| 		POP	AF
 | ||
| 		JR	Z,.skip_restore_rmd
 | ||
| 		; LD	BC,CMOS_CELL.BootUpParams.Mask.SaveRAMdisks		;#400E
 | ||
| 		; CALL	GET_CMOS_VALUE
 | ||
| 		; OR	A
 | ||
| 		; JR	Z,.skip_restore
 | ||
| 		;
 | ||
| 		LD	HL,TPOINTD
 | ||
| 		LD	DE,SYS_PAGE.RAMD_KEYS
 | ||
| 		LD	BC,SYS_PAGE.RAMD_KEYS.NUM
 | ||
| 		LDIR 
 | ||
| 		;
 | ||
| .skip_restore_rmd:
 | ||
| 		POP	AF
 | ||
| 		OUT	(SLOT3),A
 | ||
| 	; [x] 04/11/2023 Žâ¤¥«ìë¥ à ¬¤¨áª¨ ¤«ï ०¨¬  ᯥªâà㬠 ¨ DSS.
 | ||
| 		; LD	B,high BIOS.SWAP_RAM_DRIVES.Sp2000
 | ||
| 		; JP	SWAP_RAM_DRIVES
 | ||
| 		RET
 | ||
| 	;
 | ||
| ; SAVE_CHAINS:	LD	A,(IX)
 | ||
| ; 		INC	IX
 | ||
| ; 		OR	A
 | ||
| ; 		LD	L,A
 | ||
| ; 		CALL	NZ,COPY_CHAIN
 | ||
| ; 		DJNZ	SAVE_CHAINS
 | ||
| ; 		RET
 | ||
| ;
 | ||
| 
 | ||
| ;
 | ||
| ;
 | ||
| ; before_intPointer       EQU $
 | ||
| ;                         BLOCK   #FF - low $,0                            ; ¢ëà ¢¨¢ ¨¥   #xxFF                        
 | ||
| ; INT_POINTER:		WORD    0
 | ||
| 
 | ||
| ;  ASSERT +low INT_POINTER = #FF, 'ERROR! Not valid interrupt pointer!'
 | ||
| ;  IFDEF PREBUILD
 | ||
| ;         ASSERT INT_POINTER-before_intPointer < 16, 'Warning! To much space before INT_POINTER.'
 | ||
| ;  ELSE
 | ||
| ;    IF INT_POINTER-before_intPointer > 16
 | ||
| ;         DISPLAY 'Warning! To much space before INT_POINTER: ',/D,INT_POINTER-before_intPointer
 | ||
| ;    ENDIF
 | ||
| ;  ENDIF
 | ||
| 
 | ||
| ; INT_HANDLER:
 | ||
| ; 	PUSH	AF
 | ||
| ; 	EX	AF,AF'
 | ||
| ; 	PUSH	AF
 | ||
| ; 	PUSH	BC
 | ||
| ; 	PUSH	DE
 | ||
| ; 	PUSH	HL
 | ||
| ; 	EXX 
 | ||
| ; 	PUSH	BC
 | ||
| ; 	PUSH	DE
 | ||
| ; 	PUSH	HL
 | ||
| ; 	PUSH	IX
 | ||
| ; 	PUSH	IY
 | ||
| ; 	CALL	KEYSCAN
 | ||
| ; 	POP	IY
 | ||
| ; 	POP	IX
 | ||
| ; 	POP	HL
 | ||
| ; 	POP	DE
 | ||
| ; 	POP	BC
 | ||
| ; 	EXX 
 | ||
| ; 	POP	HL
 | ||
| ; 	POP	DE
 | ||
| ; 	POP	BC
 | ||
| ; 	POP	AF
 | ||
| ; 	EX	AF,AF'
 | ||
| ; 	POP	AF
 | ||
| ; 	EI 
 | ||
| ; 	RETI 
 | ||
| ; ;
 | ||
| 
 | ||
| INT_OFF:	DI 
 | ||
| 		LD	A,#3F
 | ||
| 		LD	I,A
 | ||
| 		IM	1
 | ||
| 		RET 
 | ||
| 		;
 | ||
| INT_ON:		DI 
 | ||
| 		LD	A,+high INT_POINTER
 | ||
| 		LD	I,A
 | ||
| 		LD	HL,INT_HANDLER
 | ||
| 		LD	(INT_POINTER),HL
 | ||
| 		IM	2
 | ||
| 		EI 
 | ||
| 		RET 
 | ||
| ;
 | ||
| 
 | ||
| ;
 | ||
| ;------------------------[go to spectrum from bios]---------------------;
 | ||
| EXIT_SETUP:	CALL	INT_OFF
 | ||
| 		CALL	TRD_MOUNT	; !TEST 24/09/2024 ¯¥à¥®á ¢ EXIT_SETUP (¯¥à¥¤ § ¯ã᪮¬ ZX)
 | ||
| 		CALL	SetUp_ZX_HDD
 | ||
| 
 | ||
| ;	IF FREE_ZX_PAGES
 | ||
| 		LD	A,Spec_Page
 | ||
| 		OUT	(SLOT3),A
 | ||
| 		;
 | ||
| 		LD	A,(Spec_Page.flag_Z)
 | ||
| 		CP	'Z'
 | ||
| 		LD	A,(Spec_Page.flag_X)
 | ||
| 		LD	B,A
 | ||
| 		 LD	A,SYS_PAGE
 | ||
| 		 OUT	(SLOT3),A
 | ||
| 		LD	A,B	
 | ||
| 		JR	NZ,.Set_Page41
 | ||
| 		CP	'X'
 | ||
| .Set_Page41:	CALL	NZ,ZXMODE_SETUP.Set_Page41
 | ||
| 
 | ||
| .set_ZX_params: LD	BC,CMOS_CELL.QuickStartSetUp.Mask.ZxRom
 | ||
| 		CALL	GET_CMOS_VALUE
 | ||
| 		LD	L,A
 | ||
| 		LD	BC,CMOS_CELL.QuickStartSetUp.Mask.Hardware
 | ||
| 		CALL	GET_CMOS_VALUE
 | ||
| 		;
 | ||
| 		EX	AF,AF
 | ||
| 		 LD	A,ROM.EXTENSION
 | ||
| 		 OUT	(SYS_PORT.ROM),A
 | ||
| 		EX	AF,AF
 | ||
| 		OR	A
 | ||
| 		JP	Z,SPRINTER_ZX.custom_ROM
 | ||
| 		DEC	A
 | ||
| 		JP	Z,Pentagon_48.custom_ROM
 | ||
| 		DEC	A
 | ||
| 		JP	Z,PENTAGON_128.custom_ROM
 | ||
| 		DEC	A
 | ||
| 		JP	Z,PENTAGON_512.custom_ROM
 | ||
| 		DEC	A
 | ||
| 		JP	Z,SCORPION_256.custom_ROM
 | ||
| 		DEC	A
 | ||
| 		JP	Z,ZX_Spectrum_48.custom_ROM
 | ||
| 		DEC	A
 | ||
| 		JP	Z,ZX_SPECTRUM_128.custom_ROM
 | ||
| 		; error
 | ||
| 		XOR	A
 | ||
| 		OUT	(SYS_PORT.ROM),A
 | ||
| 		LD	D,CMOS_CELL.QuickStartSetUp	; ®¡ã«ï¥¬ ¯ à ¬¥âà   ¢á直© á«ãç ©
 | ||
| 		CALL	CMOS_WR
 | ||
| 		;
 | ||
| 		CALL	ScreenPOS.CRLF
 | ||
| 		LD	A,msgStrings.errorZXmode
 | ||
| 		LD	E,COLORS.CGA.INK.RED
 | ||
| 		CALL	POSTMSC
 | ||
| .loop_di:	DI
 | ||
| 		HALT
 | ||
| 		JR	.loop_di
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| SetUp_ZX_HDD:	LD	D,CMOS_CELL.TRDOSmount
 | ||
| 		CALL	CMOS_RD
 | ||
| 		AND	%1010'1010	; ¬ áª  ¤«ï 4-å HDD
 | ||
| 		RET	Z
 | ||
| 		; 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
 | ||
| 		RET	NC
 | ||
| 		LD	A,B
 | ||
| 		INC	A
 | ||
| 		CP	#10
 | ||
| 		JR	C,.loop
 | ||
| 		RET
 | ||
| ;-----------------------------------------------------------------------;
 | ||
| 
 | ||
| INSTALL:
 | ||
| 	CALL	INT_ON
 | ||
| 	CALL	SET_CGA
 | ||
| 	XOR	A
 | ||
| 	OUT	(BorderColor),A
 | ||
| 	LD	IX,win_descriptor.tab80x32
 | ||
|         CALL    WIN_OPEN.SCR1
 | ||
| 
 | ||
| 	LD	DE,0
 | ||
| 	LD	HL,#2050
 | ||
|         LD      B,7
 | ||
|         CALL    LP_CLS_WIN
 | ||
| 
 | ||
| 	LD	DE,0
 | ||
| 	LD	HL,#0820
 | ||
|         LD      B,0
 | ||
|         CALL    LP_CLS_WIN
 | ||
| 
 | ||
| 	CALL	SETLAND
 | ||
|  
 | ||
| 	CALL	GET_ID
 | ||
| 	LD	DE,#0028				; !HARDCODE
 | ||
|         CALL    LP_SET_PLACE
 | ||
| 	LD	HL,memBUFFER.ID
 | ||
| 	LD	A,COLORS.CGA.INK.LCYAN
 | ||
| 	CALL	CPRINTZ
 | ||
| 	; LD	HL,BUILD
 | ||
| 	; LD	A,COLORS.CGA.INK.LCYAN
 | ||
| 	; CALL	CPRINTZ
 | ||
| 
 | ||
| 	LD	DE,#0128				; !HARDCODE
 | ||
|         CALL    LP_SET_PLACE
 | ||
| 	LD	A,msgStrings.copyRightPeters
 | ||
| 	LD	E,COLORS.CGA.INK.LGREEN
 | ||
| 	CALL	POSTMSC
 | ||
| 
 | ||
| 	LD	DE,#0228				; !HARDCODE
 | ||
|         CALL    LP_SET_PLACE
 | ||
| 	LD	A,msgStrings.copyRightSPTeam
 | ||
| 	LD	E,COLORS.CGA.INK.GREEN
 | ||
| 	CALL	POSTMSC
 | ||
| 
 | ||
|  IF BETA_BUILD > 0
 | ||
| 	LD	DE,#0328
 | ||
|         CALL    LP_SET_PLACE
 | ||
| 	LD	A,msgStrings.testBIOSmsg
 | ||
| 	LD	E,COLORS.CGA.FLASH + COLORS.CGA.INK.RED
 | ||
| 	CALL	POSTMSC
 | ||
|  ENDIF
 | ||
| 
 | ||
| 	IN	A,(SLOT3)
 | ||
| 	PUSH	AF
 | ||
| 	LD	A,SYS_PAGE
 | ||
| 	OUT	(SLOT3),A
 | ||
| 	LD	HL,RebootDate
 | ||
| 	CALL	GETTIME
 | ||
| 	POP	AF
 | ||
| 	OUT	(SLOT3),A
 | ||
| 	RET 
 | ||
| 
 | ||
| RESTART_ID:
 | ||
| .str:	DZ	"RESTART"
 | ||
| .size   EQU     $ - RESTART_ID.str
 | ||
| 
 | ||
| 
 | ||
| Start_again:	LD	SP,STACK-2
 | ||
| START:		DI 
 | ||
| 		PUSH	AF
 | ||
| 		XOR	A
 | ||
| 		LD	(ERRSUM),A
 | ||
| 		LD	(ERRSUM.ErrDateTime),A
 | ||
| 		;
 | ||
| 		LD	A,R	; reg R bit7 - ¯à¨§ ª § ¯ã᪠ á ®âà ¡®âª®© «® ¤¥à  ª®äë (¨§ SET_CONFIG_ID)
 | ||
| 		LD	(LOGOTYPE.playSnd),A
 | ||
| 		;
 | ||
| ;	LD	C,#97
 | ||
| ;	RST_to_BIOS_18
 | ||
| ;	XOR	A
 | ||
| ;	LD	C,#F2
 | ||
| ;	RST_to_BIOS_18
 | ||
| ;------------------------------ ;!!!!!  ¯®á¬®âà¥âì
 | ||
| ;	CALL	KINIT
 | ||
| ;------------------------------ ;!!!!!  ¯®á¬®âà¥âì
 | ||
| 
 | ||
| ;--------[Clean keyboard buffer]--------
 | ||
| ; clean_kbd_buf:
 | ||
| ; 	IN	A,(Z84.SIO.Ch_A.Ctrl)
 | ||
| ; 	BIT	0,A
 | ||
| ; 	jr z,.exit
 | ||
| ; 	IN	A,(Z84.SIO.Ch_A.Data)
 | ||
| ; 	jr clean_kbd_buf
 | ||
| ; .exit:
 | ||
| ;---------------------------------------
 | ||
| 
 | ||
| 
 | ||
| ;R08	CALL	OPENDOS
 | ||
| 	;!TEST 20/08/2024
 | ||
| 	 ;CALL	ZXCLS
 | ||
| 	;
 | ||
| 	CALL	READING
 | ||
| 	CALL	TEST_CHECKSUM
 | ||
| 	CALL	NZ,SETDEFX
 | ||
| 
 | ||
| 	;!TODO CMOS Disabled use of CONFIG_DE (#C13A) word
 | ||
| 	 ;LD	A,#1C
 | ||
| 	 ;CALL	READCMS
 | ||
| 	 ;PUSH	AF
 | ||
| 	 ;LD	A,CMOS_CELL.HardwareConfiguration
 | ||
| 	 ;CALL	READCMS
 | ||
| 	 ;POP	DE
 | ||
| 	 ;LD	E,A
 | ||
| 	;
 | ||
| 
 | ||
| 	LD	C,SLOT3
 | ||
| 	IN	B,(C)
 | ||
| 	PUSH	BC
 | ||
| 	LD	A,SYS_PAGE
 | ||
| 	OUT	(C),A
 | ||
| 
 | ||
| ;	LD	(SYS_PAGE.CONFIG_DE),DE
 | ||
| 
 | ||
| 	LD	HL,SYS_PAGE.INT_ADRESS		;EXTENDED INTERRUPT
 | ||
| 	XOR	A
 | ||
| 	LD	(HL),A
 | ||
| 	INC	L
 | ||
| 	LD	(HL),A
 | ||
| 	INC	L
 | ||
| 	LD	(HL),A
 | ||
| 	INC	L
 | ||
| 	LD	(HL),A
 | ||
| 	POP	BC
 | ||
| 	OUT	(C),B
 | ||
| 
 | ||
| 	
 | ||
| 	;CALL	TRD_MOUNT	; !TEST 24/09/2024 ¯¥à¥®á ¢ EXIT_SETUP (¯¥à¥¤ § ¯ã᪮¬ ZX)
 | ||
| 	CALL	FDD_INSTAL
 | ||
| 	CALL	CLEAR_MEM
 | ||
| 	CALL	ZXMODE_SETUP
 | ||
| 	CALL	XY_SCREEN
 | ||
| 
 | ||
| ;R06	;[Check Quick Start ROM]
 | ||
| 	LD	BC,CMOS_CELL.BootUpParams.Mask.QuickStartROM		;#010E
 | ||
| 	CALL	GET_CMOS_VALUE
 | ||
| 	POP	BC
 | ||
| 	RR	C
 | ||
| 	JR	NC,IGNORE_QuickStartROM					; १ã«ìâ â ¯à®¢¥àª¨ Space ¨§ exp.asm [Check SPACE]
 | ||
| 	PUSH	AF
 | ||
| 	LD	C,SLOT3
 | ||
| 	IN	B,(C)
 | ||
| 	PUSH	BC
 | ||
| 	LD	A,SYS_PAGE
 | ||
| 	OUT	(C),A
 | ||
| 	LD	HL,SYS_PAGE.RESTART_ID
 | ||
| 	LD	DE,RESTART_ID.str
 | ||
| 	LD	B,RESTART_ID.size
 | ||
| 	CALL	COMPARE_RESTART_ID
 | ||
| 	CALL	NZ,SET_RESTART_ID
 | ||
| 	POP	BC
 | ||
| 	OUT	(C),B
 | ||
| 	JR	Z,YES_QuickStartROM
 | ||
| 	POP	AF
 | ||
| 	JR	IGNORE_QuickStartROM
 | ||
| 
 | ||
| SET_RESTART_ID:
 | ||
| 	PUSH	AF
 | ||
| 	LD	HL,RESTART_ID.str
 | ||
| 	LD	DE,SYS_PAGE.RESTART_ID
 | ||
| 	LD	BC,RESTART_ID.size
 | ||
| 	LDIR 
 | ||
| 	LD	HL,PowerOnDate                                          ; !TODO ¨§¬¥¨âì ¯®¤ áâàãªâãàã, ª®£¤  áâàãªâãà  ¯¥à¥¬¥ëå ¡ã¤¥â £®â®¢ 						
 | ||
| 	CALL	GETTIME
 | ||
| 	POP	AF
 | ||
| 	RET 
 | ||
| 
 | ||
| YES_QuickStartROM:
 | ||
| 	POP	AF
 | ||
| 	OR	A
 | ||
| 	JP	NZ,EXIT_SETUP
 | ||
| IGNORE_QuickStartROM:
 | ||
| 	CALL	INSTALL
 | ||
| 	LD	DE,#0528
 | ||
| 	;CALL	ScreenPOS.LOCAT
 | ||
|         CALL    LP_SET_PLACE
 | ||
| 	LD	A,msgStrings.toSetupButton
 | ||
| 	LD	E,COLORS.CGA.FLASH + COLORS.CGA.INK.WHITE
 | ||
| 	CALL	POSTMSC
 | ||
| 
 | ||
| 	LD	DE,#0900
 | ||
| 	;CALL	ScreenPOS.LOCAT
 | ||
|         CALL    LP_SET_PLACE
 | ||
| ERRSUM+1:
 | ||
| 	LD	A,#00
 | ||
| 	OR	A
 | ||
| 	JR	Z,.ErrDateTime
 | ||
| 	XOR	A
 | ||
| 	LD	(.ErrDateTime+1),A					; ¥á«¨ ª®â஫ì ï á㬬  ᫥⥫ , â® á®®¡é¥¨¥ ® ªà¨¢ëå ¤ â¥/¢à¥¬¥¨ ¢ ª¬®á ¥ ¢ë¢®¤¨¬
 | ||
| 	LD	A,msgStrings.cmosChecksumErr
 | ||
| 	LD	E,COLORS.CGA.INK.RED
 | ||
| 	CALL	POSTMSC
 | ||
| 	CALL	ScreenPOS.CRLF
 | ||
| 	CALL	ScreenPOS.CRLF
 | ||
| 	JR CHEKOK
 | ||
| 
 | ||
| .ErrDateTime+1:
 | ||
| 	LD	A,0
 | ||
| 	OR      A
 | ||
| 	JR      Z,CHEKOK
 | ||
| 	LD	A,msgStrings.cmosDateTimeErr
 | ||
| 	LD	E,COLORS.CGA.INK.RED
 | ||
| 	CALL	POSTMSC
 | ||
| 	CALL	ScreenPOS.CRLF
 | ||
| 	CALL	ScreenPOS.CRLF
 | ||
| 
 | ||
| CHEKOK:	;CALL	ScreenPOS.GET_CUR
 | ||
|         CALL    LP_GET_PLACE
 | ||
| 	PUSH	DE
 | ||
| 	CALL	LOGOTYPE
 | ||
| 
 | ||
| 	LD	DE,#0000
 | ||
| 	;CALL	ScreenPOS.LOCAT
 | ||
|         CALL    LP_SET_PLACE
 | ||
| 	LD	A,msgStrings.spModel
 | ||
| 	CALL	POSTMSG
 | ||
| 	CALL	PIDNUM
 | ||
| 	CALL	ScreenPOS.CRLF
 | ||
| 
 | ||
| 	LD	A,msgStrings.boardID
 | ||
| 	CALL	POSTMSG
 | ||
| 	CALL	PIDBOARD
 | ||
| 	CALL	ScreenPOS.CRLF
 | ||
| 
 | ||
| 	LD	A,msgStrings.spCNFver
 | ||
| 	CALL	POSTMSG
 | ||
| 	CALL	CNF_VER_PRINT
 | ||
| 	CALL	ScreenPOS.CRLF
 | ||
| 
 | ||
| 	LD	A,msgStrings.spMemory
 | ||
| 	CALL	POSTMSG
 | ||
|         CALL    EMM.GetMemSize
 | ||
| 	PUSH	BC
 | ||
| 	CALL	PMEMORY
 | ||
| 	CALL	ScreenPOS.CRLF
 | ||
| 	LD	A,msgStrings.memoryAvailable
 | ||
| 	CALL	POSTMSG
 | ||
| 	POP	HL
 | ||
| 	CALL	PMEMORY
 | ||
| 	CALL	ScreenPOS.CRLF
 | ||
| 	
 | ||
|         ;CALL	TSTCMOS
 | ||
|         CALL    CMOS_TEST
 | ||
| 
 | ||
| 	LD	A,msgStrings.cmosNone
 | ||
| 	JR	C,CMOS_ABSENT
 | ||
| 	; CMOS OK
 | ||
| 	CALL	CMOSINIT
 | ||
| 	LD	A,msgStrings.cmosFound
 | ||
| 	CALL	POSTMSG
 | ||
| 	LD	A,','
 | ||
| 	CALL	PRINT_CHAR
 | ||
| 	LD	A," "
 | ||
| 	CALL	PRINT_CHAR
 | ||
| 	LD	HL,RebootDate
 | ||
| 	CALL	PRNTIME
 | ||
| 	CALL	ScreenPOS.CRLF
 | ||
| 	JR	INFO_MESSAGE
 | ||
| CMOS_ABSENT:
 | ||
| 	CALL	POSTMSG
 | ||
| INFO_MESSAGE:
 | ||
| 	; <CTRL> for recovery boot
 | ||
| 	; LD	DE,#0428
 | ||
| 	; CALL	LP_SET_PLACE
 | ||
| 	; LD	A,msgStrings.forCtrlBootButton
 | ||
| 	; LD	E,COLORS.CGA.INK.WHITE
 | ||
| 	; CALL	POSTMSC
 | ||
| 	;
 | ||
| 	; <ALT> For alternative boot
 | ||
| 	LD	DE,#0528
 | ||
| 	CALL	LP_SET_PLACE
 | ||
| 	LD	A,msgStrings.forAltBootButton
 | ||
| 	LD	E,COLORS.CGA.INK.WHITE
 | ||
| 	CALL	POSTMSC
 | ||
| 
 | ||
| 
 | ||
| 	POP	DE
 | ||
|         CALL    LP_SET_PLACE
 | ||
| 
 | ||
| 	CALL	TSETUP		;!TODO ¬®¦¥â ¯¨åãâì ¥ñ   ¯à¥à뢠¨ï?
 | ||
| 
 | ||
| 	CALL	CONFIGURE_IDE_DRIVES.START
 | ||
| 	;CALL	CONFIGURE_IDE_DRIVES.Nop_CHANELS
 | ||
| 	CALL	CTRLKEY
 | ||
| 	LD	A,B
 | ||
| 	; [x] 05/07/2024 <CTRL for Recovery>
 | ||
| 	 BIT	X_CTRL,A
 | ||
| 	 LD	BC,#FFFF		; ¬ àª¥à ¤«ï PrepareToBOOT, ç⮡ £à㧨« Recovery
 | ||
| 	 JR	NZ,RECOVERY_BOOT
 | ||
| 	;
 | ||
| 	BIT	X_ALT,A
 | ||
| 	JR	NZ,ALT_BOOT
 | ||
| 	;
 | ||
| 	CALL	TSETUP
 | ||
| 	;
 | ||
| 	LD	BC,CMOS_CELL.BootDrives.Mask.SysDisk			;#0710
 | ||
| RECOVERY_BOOT:
 | ||
| 	CALL	PrepareToBOOT       
 | ||
| 	LD	A,msgStrings.bootFail
 | ||
| 	LD	E,COLORS.CGA.INK.LRED
 | ||
| 	CALL	C,POSTMSC
 | ||
| 	CALL	ScreenPOS.CRLF
 | ||
| 	;
 | ||
| 	CALL	INT_ON
 | ||
| ALT_BOOT:
 | ||
| 	LD	A,msgStrings.bootAltDrv
 | ||
| 	LD	E,COLORS.CGA.INK.LGREEN
 | ||
| 	CALL	POSTMSC
 | ||
| 
 | ||
| 	LD	BC,CMOS_CELL.BootDrives.Mask.AltSysDisk			;#7010
 | ||
| 	CALL	PrepareToBOOT
 | ||
| 	LD	A,msgStrings.bootFail
 | ||
| 	LD	E,COLORS.CGA.INK.LRED
 | ||
| 	CALL	C,POSTMSC
 | ||
| 	CALL	ScreenPOS.CRLF
 | ||
| 
 | ||
| 	;NO START DISK  - RESTART / SETUP / ZX SPECTRUM mode
 | ||
| 	LD	BC,CMOS_CELL.Options.Mask.RebootMSG			;#021D
 | ||
| 	CALL	GET_CMOS_VALUE
 | ||
| 	OR	A
 | ||
| 	JP	Z,EXIT_SETUP
 | ||
| 
 | ||
| 	CALL	ScreenPOS.CRLF
 | ||
| 	LD	A,msgStrings.afterBootFail
 | ||
| 	LD	E,COLORS.CGA.INK.RED
 | ||
| 	CALL	POSTMSC
 | ||
| 
 | ||
| 	;EI
 | ||
|         CALL	INT_ON 
 | ||
| StartUpKey:	CALL	WAITKEY
 | ||
| 		LD	HL,#4F00	; DEL - go to settings
 | ||
| 		;AND	A
 | ||
| 		SBC	HL,DE
 | ||
| 		JR	Z,ENTER_SETUP
 | ||
| 		;
 | ||
| 		CP	#1B		; ESC - go to zx spectrum mode
 | ||
| 		JP	Z,EXIT_SETUP
 | ||
| 		CP	#0D		; ENTER - restart
 | ||
| 		JP	NZ,StartUpKey
 | ||
| 		XOR	A
 | ||
| 		JP	Start_again
 | ||
| 
 | ||
| TSETUP:		CALL	SCANKEY
 | ||
| 		RET	Z
 | ||
| 		LD	HL,#4F00	; DEL - go to settings
 | ||
| 		AND	A
 | ||
| 		SBC	HL,DE
 | ||
| 		JR	Z,ENTER_SETUP
 | ||
| 		;
 | ||
| 		LD	HL,#011B	; ESC
 | ||
| 		AND	A
 | ||
| 		SBC	HL,DE
 | ||
| 		JR	NZ,TSETUP
 | ||
| 		POP	HL		; 㡨ࠥ¬ «¨è¥¥
 | ||
| 		JP	EXIT_SETUP
 | ||
| ENTER_SETUP:
 | ||
| 	XOR A
 | ||
| 	LD	(ITEM_Restore),A
 | ||
| 	CALL	SETTINGS
 | ||
| 	XOR	A
 | ||
| 	JP	Start_again
 | ||
| 
 | ||
| COMPARE_RESTART_ID:
 | ||
| 	LD	A,(DE)
 | ||
| 	CP	(HL)
 | ||
| 	RET	NZ
 | ||
| 	INC	HL
 | ||
| 	INC	DE
 | ||
| 	DJNZ	COMPARE_RESTART_ID
 | ||
| 	RET 
 | ||
| 
 | ||
| ; ????? ¯¥à¥¥á⨠íâ® ¢ äãªæ¨¨ <20>ˆŽ‘?
 | ||
| ; HL - data to write: BYTE Hours, minutes, seconds, day, month, century, year. (2022: 20 - century, 22 - year)
 | ||
| writeDateTimeToCmos: ;!FIXIT
 | ||
| 	LD	A,(HL)
 | ||
| 	LD	D,CMOS.Register.hours
 | ||
|         CALL    CMOS_WR
 | ||
| 
 | ||
| 	INC	HL
 | ||
| 	LD	A,(HL)
 | ||
| 	LD	D,CMOS.Register.minutes
 | ||
|         CALL    CMOS_WR
 | ||
| 
 | ||
| 	INC	HL
 | ||
| 	LD	A,(HL)
 | ||
| 	LD	D,CMOS.Register.seconds
 | ||
|         CALL    CMOS_WR	
 | ||
| 
 | ||
| 	INC	HL
 | ||
| 	LD	A,(HL)
 | ||
| 	LD	D,CMOS.Register.date
 | ||
|         CALL    CMOS_WR
 | ||
| 
 | ||
| 	INC	HL
 | ||
| 	LD	A,(HL)
 | ||
| 	LD	D,CMOS.Register.month
 | ||
|         CALL    CMOS_WR
 | ||
| 
 | ||
| 	INC	HL
 | ||
| 	LD	A,(HL)
 | ||
| 	LD	D,CMOS.Register.century
 | ||
|         CALL    CMOS_WR
 | ||
| 
 | ||
| 	INC	HL
 | ||
| 	LD	A,(HL)	
 | ||
| 	LD	D,CMOS.Register.year
 | ||
|         CALL    CMOS_WR
 | ||
| 	RET
 | ||
| 
 | ||
| XY_SCREEN:	;R06
 | ||
| 		LD	A,CMOS_CELL.ScreenPosition
 | ||
| 		CALL	READCMS
 | ||
| 		LD	B,A
 | ||
| 		LD	A,ACEX.HOLD
 | ||
| 		JP	SET_PORTS
 | ||
| 		; PUSH	AF
 | ||
| 		; IN	A,(SLOT3)
 | ||
| 		; LD	E,A
 | ||
| 		; LD	A,DCP_PAGE
 | ||
| 		; OUT	(SLOT3),A
 | ||
| 		; LD	A,(#C400)		;c400 for first cfg 50176
 | ||
| 		; LD	D,A
 | ||
| 		; LD	A,ACEX.HOLD
 | ||
| 		; LD	(#C400),A
 | ||
| 		; POP	AF
 | ||
| 		; LD	BC,0
 | ||
| 		; OUT	(C),A
 | ||
| 		; LD	A,D
 | ||
| 		; LD	(#C400),A
 | ||
| 		; LD	A,E
 | ||
| 		; OUT	(SLOT3),a
 | ||
| 		; RET
 | ||
| ;
 | ||
| ;R07
 | ||
| ; CMOSINIT:
 | ||
| ; 	LD	D,10							;FREQ
 | ||
| ; 	LD	C,#F6							;READ CMOS
 | ||
| ; 	RST_to_BIOS
 | ||
| ; 	CP	#26
 | ||
| ; 	JR	NZ,CMSERR
 | ||
| ; 	LD	D,12
 | ||
| ; 	LD	C,#F6
 | ||
| ; 	RST_to_BIOS
 | ||
| ; 	CP	#50
 | ||
| ; 	RET	Z
 | ||
| ; CMSERR:
 | ||
| ; 	LD	D,10
 | ||
| ; 	LD	A,#26							;FREQ
 | ||
| ; 	LD	C,#F7
 | ||
| ; 	RST_to_BIOS
 | ||
| ; 	LD	D,11
 | ||
| ; 	LD	A,#02							;TIME FORMAT
 | ||
| ; 	LD	C,#F7
 | ||
| ; 	RST_to_BIOS
 | ||
| ; 	LD	D,12
 | ||
| ; 	LD	A,#50
 | ||
| ; 	LD	C,#F7
 | ||
| ; 	RST_to_BIOS
 | ||
| ; 	LD	D,13
 | ||
| ; 	LD	A,#80
 | ||
| ; 	LD	C,#F7
 | ||
| ; 	RST_to_BIOS
 | ||
| ; 	RET
 | ||
| 
 | ||
| ;------------------- ;!!!!!  ¯®á¬®âà¥âì
 | ||
| ; 0 - 1-st FDD
 | ||
| ; 1 - 2-nd FDD
 | ||
| ; 2 - 1-st IDE
 | ||
| ; 3 - 2-nd IDE
 | ||
| ; 4 - 3-rd IDE
 | ||
| ; 5 - 4-th IDE
 | ||
| ; 6 - RAM-DISK
 | ||
| ;
 | ||
| ; -> BC - ï祩ª  ¨ ¬ áª  ¤«ï çâ¥¨ï § ç¥¨ï ª¬®á ¤«ï § £à㧮箣® ¤à ©¢ 
 | ||
| 
 | ||
| ;
 | ||
| ;[  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ]
 | ||
| RECOVERYstart:
 | ||
| 	        LD	A,msgStrings.bootRecovery
 | ||
| 	        CALL	POSTMSG
 | ||
|         ;
 | ||
| 
 | ||
|         ; ‚ë¡®à à ¬¤¨áª  ¤«ï ४ ¢¥à¨
 | ||
|         _mRECOVERYrdChooseTYPE  RECOVERYrdChooseTYPE
 | ||
| 
 | ||
|         ; ¯à¨¡¨¢ ¥¬ ¯®á«¥¤¨© à ¬¤¨áª, ¥á«¨ § ïâ
 | ||
| .killRAMdisk:   LD      A,SYS_PAGE.RAMD_KEYS.NUM-1
 | ||
|                 LD      (.RDkey),A
 | ||
|                 CALL    EMM.FreeMemRMD
 | ||
|                 JR      NC,.setRAMdisk
 | ||
|                 JR      Z,.setRAMdisk
 | ||
|                 RET                                                     ; ¥¯®ïâ ï ®è¨¡ª  - ¢ë室¨¬
 | ||
| .setRAMdisk:    LD      A,(.RDkey)
 | ||
|                 LD      B,ROM_DISK.Pages.Size
 | ||
|                 CALL    EMM.GetMemRMD
 | ||
|                 JR      NC,.IMGread                                     ; ᢮¡®¤ë© à ¬¤¨áª  ©¤¥
 | ||
|                 DEC     A
 | ||
|                 JR      Z,.FreeMem                                      ; ®è¨¡ª  - ¥¤®áâ â®ç® ¯ ¬ïâ¨, ¢ë§ë¢ ¥¬ ®ç¨áâªã ¯ ¬ïâ¨
 | ||
|                 RET                                                     ; ¥¯®ïâ ï ®è¨¡ª  - ¢ë室¨¬                                               
 | ||
| .FreeMem:       CALL    EMM.FullInit
 | ||
|                 JR      .killRAMdisk
 | ||
| ;
 | ||
| 
 | ||
| ; ‚室: A - RAM block ID
 | ||
| .IMGread:
 | ||
|         ; ‚ à¨ â ª®¯¨à®¢ ¨ï ROM -> RAM disk
 | ||
|         _mRECOVERYmountTYPE     RECOVERYmountTYPE
 | ||
| ;
 | ||
|         ;Exit from "ROM Disk to RAM disk" procedure
 | ||
| .RDkey+*:       LD      A,0
 | ||
|                 OR      DRIVE_CODES.SPRINTER.RAM
 | ||
|                 LD      B,A                                             ; ¯¥à¥¤ ñ¬ § £à㧮箥 ãáâனá⢮ ¢ OS_LOAD
 | ||
|                 JP	OS_LOAD
 | ||
|         ;
 | ||
| ;[  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ][  ]
 | ||
| ;
 | ||
| 
 | ||
| PrepareToBOOT:	;CALL	INT_ON
 | ||
| 		HALT
 | ||
| 		CALL	PORTS_INIT.clean_kbd_buf	;Clearing the keyboard buffer
 | ||
| 		CALL	PORTS_INIT.clean_mouse_buf	;Clearing the mouse buffer
 | ||
| 		CALL	INT_OFF
 | ||
| 	; âãâ ¥ ¤®«¦® ¡ëâì ¨á¯®à祮 § ç¥¨¥ BC
 | ||
| 		; [x] 05/07/2024 <CTRL for Recovery>
 | ||
| 		 INC	BC
 | ||
| 		 LD	A,B
 | ||
| 		 OR	C
 | ||
| 		 JP	Z,RECOVERYstart
 | ||
| 		 DEC	BC
 | ||
| 		;
 | ||
| 		CALL	GET_CMOS_VALUE
 | ||
| 		LD	B,DRIVE_CODES.SPRINTER.FDD
 | ||
|         	;   FDD
 | ||
| 		OR	A
 | ||
| 		JR	Z,FDSTART	; FDD A:
 | ||
|         	INC     B
 | ||
|         	DEC     A
 | ||
| 		JR	Z,FDSTART	; FDD B:
 | ||
|         	;   IDE
 | ||
| 		LD	B,DRIVE_CODES.SPRINTER.HDD
 | ||
| 		DEC	A
 | ||
| 		JR	Z,HDSTART
 | ||
| 		INC     B		;LD B,#81
 | ||
| 		DEC	A
 | ||
| 		JR	Z,HDSTART
 | ||
| 		INC     B		;LD B,#82
 | ||
| 		DEC	A
 | ||
| 		JR	Z,HDSTART
 | ||
| 		INC     B		;LD B,#83
 | ||
| 		DEC	A
 | ||
| 		JR	Z,HDSTART
 | ||
|         	;   RAM
 | ||
| 		DEC	A
 | ||
| 		JR	Z,RDSTART
 | ||
|         	;   ROM
 | ||
|         	DEC     A
 | ||
| 		JP	Z,RECOVERYstart
 | ||
|         	;   Error
 | ||
| 		SCF 
 | ||
| 		RET 
 | ||
| 		;
 | ||
| FDSTART:       	PUSH	BC
 | ||
| 		PUSH	BC
 | ||
| 		LD	A,msgStrings.bootFdd
 | ||
| 		CALL	POSTMSG
 | ||
| 		POP	AF
 | ||
|         	CALL	FDD_5x_RESET
 | ||
| 		POP	BC
 | ||
| 		RET	C
 | ||
| 		JR	OS_LOAD
 | ||
| 		;
 | ||
| CDSTART:	LD	A,B						; [ ] 15/02/2025 boot from ATAPI
 | ||
| 		OR	DRIVE_CODES.SPRINTER.ATAPI
 | ||
| 		LD	B,A
 | ||
| 		PUSH	BC
 | ||
| 		LD	A,msgStrings.bootCd
 | ||
| 		CALL	POSTMSG
 | ||
| 		POP	AF
 | ||
| 		PUSH	AF
 | ||
| 		CALL	PRINT_CHANEL
 | ||
| 		;
 | ||
| 		POP	BC
 | ||
| 		PUSH	BC
 | ||
| 		CALL	OS_LOAD
 | ||
| 		POP	BC
 | ||
| 		RET	NC
 | ||
| 		LD	HL,2048						;!HARDCODE sector size
 | ||
| 		LD	IX,#0011
 | ||
| 		JR	OS_LOAD.CD
 | ||
| 		;
 | ||
| RDSTART:	LD	A,msgStrings.bootRamDrv
 | ||
| 		CALL	POSTMSG
 | ||
|         	LD      B,DRIVE_CODES.SPRINTER.RAM				; 6 - ⨯ ¤à ©¢  RAM-DRV, 0 - ®¬¥à ¤à ©¢ 
 | ||
| .loop:  	PUSH	BC
 | ||
| 		CALL	OS_LOAD
 | ||
| 		POP	BC
 | ||
|         	INC	B
 | ||
|         	LD	A,DRIVE_CODES.SPRINTER.RAM + SYS_PAGE.RAMD_KEYS.NUM-1	; ¬ ªá¨¬ «ìë© ®¬¥à à ¬¤¨áª 
 | ||
|         	SUB	B
 | ||
|         	JR	NC,.loop 
 | ||
|         	RET
 | ||
| 
 | ||
| 
 | ||
| HDSTART:	IN	A,(SLOT3)
 | ||
| 		EX	AF,AF'
 | ||
| 		LD	A,SYS_PAGE
 | ||
| 		OUT	(SLOT3),A
 | ||
| 		LD	A,B
 | ||
| 		;
 | ||
| 		AND	#03		;R02 %00000011
 | ||
| 		LD	IY,IDE.INIT_TBL_IDE0
 | ||
| 		JR	Z,.next
 | ||
| 		;
 | ||
| 		LD	IY,IDE.INIT_TBL_IDE1
 | ||
| 		CP	1							;R02
 | ||
| 		JR	Z,.next	
 | ||
| 		;
 | ||
| 		LD	IY,IDE.INIT_TBL_IDE2					;R02
 | ||
| 		CP	2							;R02
 | ||
| 		JR	Z,.next
 | ||
| 		;
 | ||
| 		LD	IY,IDE.INIT_TBL_IDE3					;R02
 | ||
| 		;
 | ||
| .next:		LD	A,(IY+IDE.HDD_INIT_TABLE.DriveType)
 | ||
| 		EX	AF,AF'
 | ||
| 		OUT	(SLOT3),A
 | ||
| 		EX	AF,AF'
 | ||
| 		CP	IDE.Device.ATAPI
 | ||
| 		JP	Z,CDSTART
 | ||
| 		PUSH	AF
 | ||
| 		PUSH	BC
 | ||
| 		LD	A,msgStrings.bootHdd
 | ||
| 		CALL	POSTMSG
 | ||
| 		POP	AF
 | ||
| 		PUSH	AF
 | ||
| 		CALL	PRINT_CHANEL
 | ||
| 		;
 | ||
| 		POP	BC
 | ||
| 		POP	AF
 | ||
| 		CP	#FF
 | ||
| 		SCF 
 | ||
| 		RET	Z
 | ||
| 		;
 | ||
| OS_LOAD:	LD	HL,512						;!HARDCODE
 | ||
| 		LD	IX,#0001
 | ||
| .CD:		LD	(.SectorSizeAddr),HL
 | ||
| 		LD	HL,#0000
 | ||
| 		LD	DE,TEMP
 | ||
| 		LD	A,B
 | ||
| 		LD	BC,1*256 + BIOS.DRV_READ
 | ||
|         	PUSH	AF
 | ||
|         	RST     ToBIOS_18
 | ||
| 		;
 | ||
| 		POP	BC
 | ||
| 		RET	C
 | ||
| 		LD	A,B
 | ||
| 		EX	AF,AF'
 | ||
| 		LD	HL,TEMP
 | ||
| 		LD	DE,SYSID
 | ||
| 		LD	B,SYSID.length
 | ||
| .loop:		LD	A,(DE)
 | ||
| 		CP	(HL)
 | ||
| 		SCF 
 | ||
| 		RET	NZ
 | ||
| 		INC	HL
 | ||
| 		INC	DE
 | ||
| 		DJNZ .loop
 | ||
| 		EX	AF,AF'
 | ||
| 		PUSH	AF
 | ||
| 		LD	A,msgStrings.bootOk
 | ||
| 		LD	E,COLORS.CGA.INK.LGREEN
 | ||
| 		CALL	POSTMSC
 | ||
| 		CALL	ScreenPOS.CRLF
 | ||
| 		POP	AF			; 䨧¨ç¥áª¨© ®¬¥à ¤¨áª 
 | ||
| 		POP	HL
 | ||
| .MOVE0:		DI 
 | ||
| 		IM	1
 | ||
| 		LD	HL,MOVE1
 | ||
| 		LD	DE,OS_LOAD.SectorSizeAddr - MOVE1.length	; !HARDCODE 
 | ||
| 		LD	BC,MOVE1.length
 | ||
| 		LDIR 
 | ||
| 		JP	OS_LOAD.SectorSizeAddr - MOVE1.length
 | ||
| 		;
 | ||
| MOVE1:		LD	HL,#8000					; !HARDCODE 
 | ||
| 		LD	SP,HL
 | ||
| 		EX	DE,HL
 | ||
| 		LD	HL,TEMP
 | ||
| 		LD	BC,(OS_LOAD.SectorSizeAddr)
 | ||
| 		LDIR
 | ||
| 		JP	#8000+SYSID.length ;#800C			; !HARDCODE 
 | ||
| 		;
 | ||
| .length		EQU	$-MOVE1
 | ||
| 
 | ||
| 
 | ||
| SYSID:	DZ	"Starting..."
 | ||
| .length	EQU	$-SYSID
 | ||
| 
 | ||
| 
 | ||
| ;FD144A:	DB	#80,#12,#02,#50,#00,#00,#02,FDD_INIT_TABLE.FDD
 | ||
| ; .Size	EQU	$ - FD144A
 | ||
| ; FD720A:	DB	#00,#09,#02,#50,#00,#00,#02,FDD_INIT_TABLE.FDD
 | ||
| ; .Size	EQU	$ - FD720A
 | ||
| FDD_INIT_TABLE:	FDD_1440_TABLE
 | ||
| 
 | ||
| FDD_INSTAL:	IN	A,(SLOT3)
 | ||
| 		EX	AF,AF'
 | ||
| 		LD	A,SYS_PAGE
 | ||
| 		OUT	(SLOT3),A
 | ||
| 		LD	HL,SYS_PAGE.FDD_TABLE
 | ||
| 		LD	BC,SYS_PAGE.FDD_TABLE.Size*256 + #FF		; table_size*256 + fill_byte 
 | ||
| .FILLFDD:	LD	(HL),C
 | ||
| 		INC	HL
 | ||
| 		DJNZ	.FILLFDD
 | ||
| 		;
 | ||
| 		;EX	AF,AF'
 | ||
| 		;OUT	(SLOT3),A
 | ||
| 		;LD	BC,CMOS_CELL.DrivesSetup_1.Mask.FirstFDD	;#0311
 | ||
| 		;CALL	GET_CMOS_VALUE
 | ||
| 		;LD	HL,FD720A
 | ||
| 		;OR	A
 | ||
| 		;JR	Z,.SETFD0
 | ||
| 		LD	HL,FDD_INIT_TABLE
 | ||
| 		;DEC	A
 | ||
| 		;JR	NZ,.NOFDD0
 | ||
| ;.SETFD0:	;IN	A,(SLOT3)
 | ||
| 		;EX	AF,AF'
 | ||
| 		;LD	A,SYS_PAGE
 | ||
| 		;OUT	(SLOT3),A
 | ||
| 		LD	DE,SYS_PAGE.FDD_TABLE
 | ||
| 		; B=0
 | ||
| 		LD	C,SYS_PAGE.FDD_TABLE.Size
 | ||
| 		LDIR 
 | ||
| 		;EX	AF,AF'
 | ||
| 		;OUT	(SLOT3),A
 | ||
| ;.NOFDD0:	LD	BC,CMOS_CELL.DrivesSetup_1.Mask.SecondFDD	;#0C11
 | ||
| 		;CALL	GET_CMOS_VALUE
 | ||
| 		;LD	HL,FD720A
 | ||
| 		;OR	A
 | ||
| 		;JR	Z,.SETFD1
 | ||
| 		;LD	HL,FD144A
 | ||
| 		;DEC	A
 | ||
| 		;JR	NZ,.NOFDD1
 | ||
| ;.SETFD1:	IN	A,(SLOT3)
 | ||
| 		;EX	AF,AF'
 | ||
| 		;LD	A,SYS_PAGE
 | ||
| 		;OUT	(SLOT3),A
 | ||
| 		;LD	DE,SYS_PAGE.FDD_1_TABLE
 | ||
| 		;LD	BC,FD144A.Size
 | ||
| 		;LDIR 
 | ||
| 		EX	AF,AF'
 | ||
| 		OUT	(SLOT3),A
 | ||
| .NOFDD1:	RET 
 | ||
| 
 | ||
| 
 | ||
| PIDNUM:	LD	HL,memBUFFER.ID
 | ||
| 	LD	BC,#00FF
 | ||
| 	XOR	A
 | ||
| 	CPIR
 | ||
| 	LD	A,(HL)
 | ||
| 	OR	A
 | ||
| 	RET	Z
 | ||
| 	CALL	PRINTZ
 | ||
| 	RET
 | ||
| 
 | ||
| PIDBOARD:      	CALL    FN_CRIPT.board_id
 | ||
| 		;
 | ||
| 	IF MotherBoardType > 0
 | ||
| 		PUSH	AF
 | ||
| 	ENDIF
 | ||
| 		PUSH	DE
 | ||
| 		PUSH	HL
 | ||
| 		PUSH	BC
 | ||
| 		LD	A,B
 | ||
| 		CALL	PRNHEX
 | ||
| 		LD	A,'-'
 | ||
| 		CALL	PRINT_CHAR
 | ||
| 		POP	BC
 | ||
| 		LD	A,C
 | ||
| 		CALL	PRNHEX
 | ||
| 		LD	A,'-'
 | ||
| 		CALL	PRINT_CHAR
 | ||
| 		POP	HL
 | ||
| 		CALL	IPRINT.Z
 | ||
| 		POP	DE
 | ||
| 		PUSH	DE
 | ||
| 		LD	A,D
 | ||
| 		CALL	PRNHEX
 | ||
| 		POP	DE
 | ||
| 		LD	A,E
 | ||
| 	IF MotherBoardType == 0
 | ||
| 		JP	PRNHEX
 | ||
| 	ELSE
 | ||
| 		CALL	PRNHEX
 | ||
| 		LD	A,' '
 | ||
| 		CALL	PRINT_CHAR
 | ||
| 		POP	AF
 | ||
| 		; type 0 - Classic
 | ||
| 		RET	Z
 | ||
| 		; type 1 - DX
 | ||
| 		LD	HL,.ver_DX	
 | ||
| 		DEC	A
 | ||
| 		JP	Z,PRINTZ
 | ||
| 		; type 2 - DP
 | ||
| 		LD	HL,.ver_DP	
 | ||
| 		DEC	A
 | ||
| 		JP	Z,PRINTZ
 | ||
| 		; type 3 - Max
 | ||
| 		LD	HL,.ver_Max	
 | ||
| 		DEC	A
 | ||
| 		JP	Z,PRINTZ
 | ||
| 		; type 4 - test
 | ||
| 		LD	HL,.Test	
 | ||
| 		DEC	A
 | ||
| 		JP	Z,PRINTZ
 | ||
| 		RET
 | ||
| 		;
 | ||
| .ver_DX:	DZ	"DX"
 | ||
| .ver_DP:	DZ	"DP"
 | ||
| .ver_Max:	DZ	"Max"
 | ||
| .Test		DZ	"0123456789A"
 | ||
| 	ENDIF
 | ||
| 
 | ||
| 
 | ||
| CNF_VER_PRINT:
 | ||
|  	LD	HL,memBUFFER.ID
 | ||
| 	IFN	BIOS.FN_VERSION.STR.BitstreamVer = 0
 | ||
| 	 LD	BC,BIOS.FN_VERSION.STR.BitstreamVer*256
 | ||
| 	 XOR	A
 | ||
| .loop:	 CPIR
 | ||
| 	 DJNZ	.loop
 | ||
| 	ENDIF
 | ||
| 	JP	PRINTZ
 | ||
| 
 | ||
| ;PIDNUM	LD	A,#0D
 | ||
| ;	LD	HL,ID_BUFFER
 | ||
| ;	LD	BC,#0030
 | ||
| ;	CPIR 
 | ||
| ;	RET	NZ
 | ||
| ;	INC	HL
 | ||
| ;	LD	BC,#0286
 | ||
| ;	RST_to_BIOS_18
 | ||
| ;	INC	HL
 | ||
| ;	LD	BC,#0586
 | ||
| ;	RST_to_BIOS_18
 | ||
| ;	INC	HL
 | ||
| ;	LD	BC,#0286
 | ||
| ;	RST_to_BIOS_18
 | ||
| ;	XOR	A
 | ||
| ;	RET 
 | ||
| 
 | ||
| ;PIDDATE
 | ||
| ;	LD	A,#0D
 | ||
| ;	LD	HL,ID_BUFFER
 | ||
| ;	LD	BC,#0030
 | ||
| ;	CPIR 
 | ||
| ;	RET	NZ
 | ||
| ;	INC	HL
 | ||
| ;	CPIR 
 | ||
| ;	RET	NZ
 | ||
| ;	INC	HL
 | ||
| ;	LD	BC,#0A86
 | ||
| ;	JP_to_BIOS
 | ||
| 
 | ||
| //////////////////////////////////////////////////////////////////////
 | ||
| ; INCLUDE	'IM2_INT.asm'
 | ||
| //////////////////////////////////////////////////////////////////////
 | ||
| 
 | ||
| PRNHEX:	LD	D,A
 | ||
| 	RRCA 
 | ||
| 	RRCA 
 | ||
| 	RRCA 
 | ||
| 	RRCA 
 | ||
| 	AND	#0F
 | ||
| 	ADD	A,#30
 | ||
| 	CP	#3A
 | ||
| 	JR	C,PRNH1
 | ||
| 	ADD	A,7
 | ||
| PRNH1:	CALL	PRINT_CHAR
 | ||
| 	LD	A,D
 | ||
| 	AND	#0F
 | ||
| 	ADD	A,#30
 | ||
| 	CP	#3A
 | ||
| 	JP	C,PRINT_CHAR
 | ||
| 	ADD	A,7
 | ||
| 	JP	PRINT_CHAR
 | ||
| 
 | ||
| PHEX:	LD	D,A
 | ||
| 	RRCA 
 | ||
| 	RRCA 
 | ||
| 	RRCA 
 | ||
| 	RRCA 
 | ||
| 	AND	#0F
 | ||
| 	ADD	A,#30
 | ||
| 	CALL	PRINT_CHAR
 | ||
| 	LD	A,D
 | ||
| 	AND	#0F
 | ||
| 	ADD	A,#30
 | ||
| 	JP	PRINT_CHAR
 | ||
| 
 | ||
| PRNTIME:
 | ||
| 	IN	A,(SLOT3)
 | ||
| 	PUSH	AF
 | ||
| 	LD	A,SYS_PAGE
 | ||
| 	OUT	(SLOT3),A
 | ||
| 	LD	A,(HL)
 | ||
| 	CALL	PHEX
 | ||
| 	LD	A,":"
 | ||
| 	CALL	PRINT_CHAR
 | ||
| 	INC	L
 | ||
| 	LD	A,(HL)
 | ||
| 	CALL	PHEX
 | ||
| 	LD	A,":"
 | ||
| 	CALL	PRINT_CHAR
 | ||
| 	INC	L
 | ||
| 	LD	A,(HL)
 | ||
| 	CALL	PHEX
 | ||
| 	POP	AF
 | ||
| 	OUT	(SLOT3),A
 | ||
| 	RET 
 | ||
| 
 | ||
| 
 | ||
| PMEMORY:
 | ||
| 	ADD	HL,HL
 | ||
| 	ADD	HL,HL
 | ||
| 	ADD	HL,HL
 | ||
| 	ADD	HL,HL	; * 16
 | ||
| 	CALL	IPRINT
 | ||
| 	LD	A,"K"
 | ||
| 	JP	PRINT_CHAR
 | ||
| 
 | ||
|  IFUSED	ZXCLS
 | ||
| ZXCLS:	LD	HL,#4000
 | ||
| 	LD	DE,#4001
 | ||
| 	LD	BC,#1AFF
 | ||
| 	LD      (HL),L
 | ||
| 	LDIR 
 | ||
| 	RET 
 | ||
|  ENDIF
 | ||
| 
 | ||
| GET_ID:	LD	HL,memBUFFER.ID
 | ||
| 	;LD	C,BIOS.FN_VERSION
 | ||
| 	;JP_to_BIOS
 | ||
|         JP      FN_VERSION
 | ||
| 
 | ||
| 
 | ||
| ;R01GET_ID
 | ||
| ;R01	LD	A,#10
 | ||
| ;R01	LD	BC,#1FFD
 | ||
| ;R01	OUT	(C),A
 | ||
| ;R01	LD	C,SLOT3
 | ||
| ;R01	IN	B,(C)
 | ||
| ;R01	PUSH	BC
 | ||
| ;R01	LD	A,#EE
 | ||
| ;R01	OUT	(C),A
 | ||
| ;R01	LD	HL,#FFD0
 | ||
| ;R01	LD	DE,ID_BUFFER
 | ||
| ;R01	LD	BC,#30
 | ||
| ;R01	LDIR 
 | ||
| ;R01	POP	BC
 | ||
| ;R01	OUT	(C),B
 | ||
| ;R01	XOR	A
 | ||
| ;R01	LD	BC,#1FFD
 | ||
| ;R01	OUT	(C),A
 | ||
| ;R01	RET 
 | ||
| 
 | ||
| 
 | ||
| ; COPY_CHAIN:	LD	E,L
 | ||
| ; 		LDI 
 | ||
| ; 		DEC	L
 | ||
| ; 		LD	L,(HL)
 | ||
| ; 		INC	L
 | ||
| ; 		RET	Z
 | ||
| ; 		DEC	L
 | ||
| ; 		JR	COPY_CHAIN
 | ||
| 
 | ||
| ; ; ‚室: HL - ª®¯¨ï RAM_TABLE ®âªã¤  ª®¯¨à®¢ âì
 | ||
| ; RESTORE_CHAINS:	LD	DE,SYS_PAGE.RAM_TABLE
 | ||
| ; 		XOR	A
 | ||
| ; .loop:		CP	(HL)
 | ||
| ; 		JR	Z,.NoCopy
 | ||
| ; 		LD	E,L
 | ||
| ; 		LDI 
 | ||
| ; 		DEC	L
 | ||
| ; .NoCopy:	INC	L
 | ||
| ; 		JR	NZ,.loop
 | ||
| ; 		RET
 | ||
| 
 | ||
| ;---------------------------------------------------------------[]
 | ||
| ;REGISTER #1E
 | ||
| ; %0000'0011 - TR DOS A:	Default	 / FDD / HDD / RMD
 | ||
| ; %0000'1100 - TR DOS B:	Default	 / FDD / HDD / RMD
 | ||
| ; %0011'0000 - TR DOS C:	Default	 / FDD / HDD / RMD
 | ||
| ; %1100'0000 - TR DOS D:	Default	 / FDD / HDD / RMD
 | ||
| 
 | ||
| TRD_MOUNT:	LD	BC,CMOS_CELL.TRDOSmount.Mask.A		;#031E
 | ||
| 		LD	A,0
 | ||
| 		CALL	.TRDOSX
 | ||
| 		LD	BC,CMOS_CELL.TRDOSmount.Mask.B		;#0C1E
 | ||
| 		LD	A,1
 | ||
| 		CALL	.TRDOSX
 | ||
| 		LD	BC,CMOS_CELL.TRDOSmount.Mask.C		;#301E
 | ||
| 		LD	A,2
 | ||
| 		CALL	.TRDOSX
 | ||
| 		LD	BC,CMOS_CELL.TRDOSmount.Mask.D		;#C01E
 | ||
| 		LD	A,3
 | ||
| .TRDOSX:	; PUSH	AF
 | ||
| 		; CALL	GET_CMOS_VALUE
 | ||
| 		; POP	BC
 | ||
| 		; OR	A
 | ||
| 		; RET	Z
 | ||
| 		; LD	C,BIOS.FDD_TO_DRV
 | ||
| 		; DEC	A
 | ||
| 		; JP	Z,ToBIOS_18
 | ||
| 		; LD	C,BIOS.HDD_TO_DRV
 | ||
| 		; DEC	A
 | ||
| 		; JP	Z,ToBIOS_18
 | ||
| 		; SCF 
 | ||
| 		; RET 
 | ||
| 		PUSH	AF
 | ||
| 		CALL	GET_CMOS_VALUE
 | ||
| 		POP	BC
 | ||
| 		OR	A
 | ||
| 		RET	Z
 | ||
| 		DEC	A
 | ||
| 		JP	Z,FDD_TO_DRV
 | ||
| 		DEC	A
 | ||
| 		JP	Z,HDD_TO_DRV
 | ||
| 		SCF 
 | ||
| 		RET 
 | ||
| ;---------------------------------------------------------------[]
 | ||
| 
 | ||
| 
 | ||
| ;!TODO ¯®á¬®âà¥âì
 | ||
| 	;®âªà뢠¥â ¯®àâ #FE   ç⥨¥ ¢ 3-© ª à⥠¯®à⮢
 | ||
| 	;OPENDOS:
 | ||
| 	;	DI 
 | ||
| 	;	IN	A,(SLOT3)
 | ||
| 	;	EX	AF,AF'
 | ||
| 	;	LD	A,#40
 | ||
| 	;	OUT	(SLOT3),A
 | ||
| 	;	LD	HL,#C000
 | ||
| 	;	LD	DE,#F000
 | ||
| 	;	LD	BC,#0400
 | ||
| 	;	LDIR 
 | ||
| 	;	LD	A,#40
 | ||
| 	;	LD	(#F26E),A
 | ||
| 	;	LD	(#F27E),A
 | ||
| 	;	LD	(#F2EE),A
 | ||
| 	;	LD	(#F2FE),A
 | ||
| 	;	LD	(#F36E),A
 | ||
| 	;	LD	(#F37E),A
 | ||
| 	;	LD	(#F3EE),A
 | ||
| 	;	LD	(#F3FE),A
 | ||
| 	;	LD	HL,#F000
 | ||
| 	;	LD	DE,#F400
 | ||
| 	;	LD	BC,#0C00
 | ||
| 	;	LDIR 
 | ||
| 	;	EX	AF,AF'
 | ||
| 	;	OUT	(SLOT3),A
 | ||
| 	;	RET 
 | ||
| ;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| setFRAME:
 | ||
| .double:
 | ||
|         LD	HL,.dataDoubleAll
 | ||
|         JR	.setElements
 | ||
| .single:
 | ||
|         LD	HL,.dataSingleAll
 | ||
|         JR	.setElements
 | ||
| .high:  LD	HL,.dataSingleDown
 | ||
|         JR	.setElements
 | ||
| .low:   LD	HL,.dataSingleUp
 | ||
|         JR	.setElements
 | ||
| .medium:
 | ||
|         LD	HL,.dataSingleMedium
 | ||
| ;       JR	.setElements
 | ||
| .setElements:
 | ||
| 	LD	DE,ElementsBuffer
 | ||
| 	LD	BC,ElementsBuffer.Size
 | ||
| 	LDIR 
 | ||
| 	RET 
 | ||
| 
 | ||
| .dataDoubleAll:    BYTE "ɻͺȼ", "̹ËÊ"        ; #C9,#BB,#CD,#BA,#C8,#BC, #CC,#B9,#CB,#CA
 | ||
| .dataSingleAll:    BYTE "ڿijÀÙ", "ôÂÁ"        ; #DA,#BF,#C4,#B3,#C0,#D9, #C3,#B4,#C2,#C1
 | ||
| .dataSingleDown:   BYTE "ɻĺǶ", "ǶÑÁ"        ; #C9,#BB,#C4,#BA,#C7,#B6, #C7,#B6,#D1,#C1
 | ||
| .dataSingleUp:     BYTE "Ƕĺȼ", "ǶÂÏ"        ; #C7,#B6,#C4,#BA,#C8,#BC, #C7,#B6,#C2,#CF
 | ||
| .dataSingleMedium: BYTE "ǶĺǶ", "ǶÂÁ"        ; #C7,#B6,#C4,#BA,#C7,#B6, #C7,#B6,#C2,#C1
 | ||
| ;
 | ||
| ElementsBuffer:
 | ||
| .UpLeft:           BYTE "Ú"                     ; UL - UpLeft
 | ||
| .UpRight:          BYTE "¿"                     ; UR - UpRight
 | ||
| .HorizontalLine:   BYTE "Ä"                     ; ZL - HorizontalLine
 | ||
| .VerticalLine:     BYTE "³"                     ; VL - VerticalLine
 | ||
| .DownLeft:         BYTE "À"                     ; LL - DownLeft
 | ||
| .DownRight:        BYTE "Ù"                     ; LR - DownRight
 | ||
| .LeftCenter:       BYTE "Ã"                     ; LC - LeftCenter
 | ||
| .RightCenter:      BYTE "´"                     ; RC - RightCenter
 | ||
| .UpCenter:         BYTE "Â"                     ; UC - UpCenter
 | ||
| .DownCenter:       BYTE "Á"                     ; DC - DownCenter
 | ||
| .Size              EQU  $-ElementsBuffer
 | ||
| ;
 | ||
|  IF	STARTUP_SND
 | ||
|   INCLUDE	'startup_sound.asm'
 | ||
|  ENDIF
 | ||
|  INCLUDE	'VIDEO_IO.asm'
 | ||
|  INCLUDE	'AUTOIDE.asm'
 | ||
|  INCLUDE	'SETTINGS.asm'
 | ||
|  INCLUDE	'KEY.asm'
 | ||
| ;.......................................
 | ||
| 
 | ||
| KEY:	EI 
 | ||
| 	JP	WAITKEY
 | ||
| 
 | ||
| FindStringAddr:
 | ||
| 	LD	L,A
 | ||
| 	LD	H,0
 | ||
| 	LD	BC,memBUFFER.Messages
 | ||
| 	ADD	HL,HL
 | ||
| 	ADD	HL,BC
 | ||
| 	LD	A,(HL)
 | ||
| 	INC	HL
 | ||
| 	LD	H,(HL)
 | ||
| 	LD	L,A	
 | ||
| 	RET
 | ||
| 
 | ||
| POSTLEN:
 | ||
| 	CALL	FindStringAddr
 | ||
| 	LD	BC,#0100
 | ||
| 	XOR	A
 | ||
| 	CPIR 
 | ||
| 	LD	A,#FF
 | ||
| 	SUB	C
 | ||
| 	SRL	A
 | ||
| 	LD	C,A
 | ||
| 	LD	A,40
 | ||
| 	SUB	C
 | ||
| 	LD	E,A
 | ||
| 	;JP	ScreenPOS.LOCAT
 | ||
|         JP      LP_SET_PLACE
 | ||
| 
 | ||
| SETLAND:
 | ||
| 	LD	A,#0E							; !HARDCODE CMOS ï祩ª  options
 | ||
| 	CALL	READCMS	;!TODO ¯¥à¥¤¥« âì   GET_CMOS_VALUE
 | ||
| 	AND	#04							; !HARDCODE CMOS § ç¥¨¥ ï§ëª 
 | ||
| 	LD	HL,MSG_RUS
 | ||
| 	JR	NZ,.set
 | ||
| 	LD	HL,MSG_ENG
 | ||
| 	;
 | ||
| .set:	LD	DE,memBUFFER.Messages
 | ||
| 	LD	BC,MSG_TABLE.Size
 | ||
| 	LDIR
 | ||
| 	RET
 | ||
| 
 | ||
| ;
 | ||
| ; print boot drive number
 | ||
| PRINT_CHANEL:	AND	#0F
 | ||
| 		LD	C,A
 | ||
| 		;
 | ||
| 		LD	A,msgStrings.parPriIdeMA
 | ||
| 		JR	Z,.print_chanel
 | ||
| 		;
 | ||
| 		LD	A,msgStrings.parPriIdeSl
 | ||
| 		DEC	C
 | ||
| 		JR	Z,.print_chanel
 | ||
| 		;
 | ||
| 		LD	A,msgStrings.parSecIdeMA
 | ||
| 		DEC	C
 | ||
| 		JR	Z,.print_chanel
 | ||
| 		;
 | ||
| 		LD	A,msgStrings.parSecIdeSl
 | ||
| .print_chanel:	CALL	FindStringAddr
 | ||
| 	 	;CALL	LP_GET_PLACE
 | ||
| 	 	;LD	A,ScreenPOS.SUBNAME.POS
 | ||
| 	 	;SUB	E
 | ||
| 	 	;LD	B,A
 | ||
| 	 	LD	B,0
 | ||
| 	 	LD	D,#FF
 | ||
| 	 	JP	LP_PRINT_LINE6
 | ||
| ;
 | ||
| 
 | ||
| POSTMSC:	CALL    FindStringAddr
 | ||
| 		LD	A,E
 | ||
| 		JP	CPRINTZ
 | ||
| ;
 | ||
| //////////////////////////////////////////////////////////////////////
 | ||
|  INCLUDE	'IM2_INT.asm'
 | ||
| //////////////////////////////////////////////////////////////////////
 | ||
| 
 | ||
| POSTMSG:	CALL    FindStringAddr
 | ||
| 		JP	PRINTZ
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ;----------------------------------------------------------------------[]
 | ||
| ;!TODO ᤥ« âì ¢ë¡®à ¢ Setup, çâ® £à㧨âì ¢ v<>‡“ ¯à¨ áâ àâ¥. ‚ à¨ âë:
 | ||
| ;[x]	0 - <20>¥ £à㧨âì <20>‡“ ᯥªâà㬠, ¨¨â¨âì áâà ¨æã #41 ª ª ¢ 3.04
 | ||
| ;[x]	1 - ƒà㧨â <20>‡“ ᯥªâà㬠 ¨§ ROM ¯à¨ áâ à⥠¥á«¨ ¥â ä« £  ZX
 | ||
| ;[x]	2 - ƒà㧨â <20>‡“ ᯥªâà㬠 ¨§ ROM ¯à¨ ª ¦¤®¬ ¯¥à¥§ ¯ã᪥
 | ||
| ;[ ]	3 - <20>¥ £à㧨âì <20>‡“ ᯥªâà㬠, ¨¨â¨âì áâà ¨æã #41 â ª,
 | ||
| ;	     ç⮡ ª®¤ ¢ ¥© ¯®¤£à㦠« <20>‡“ ᯥªâà㬠 ¯à¨ ®¡à é¥¨¨
 | ||
| ZXMODE_SETUP:	IN	A,(SLOT3)
 | ||
| 		PUSH	AF
 | ||
| 		LD	A,Spec_Page
 | ||
| 		OUT	(SLOT3),A
 | ||
| 		;
 | ||
| 		LD	BC,CMOS_CELL.Options.Mask.LoadZXroms
 | ||
| 		CALL	GET_CMOS_VALUE
 | ||
| 		;
 | ||
| 		OR	A
 | ||
| 		JR	Z,.init_41h
 | ||
| 		DEC	A
 | ||
| 		JR	Z,.CheckAndLoad
 | ||
| 		DEC	A
 | ||
| 		JR	Z,.Load_ZXROMS
 | ||
| 		;!TODO
 | ||
| 		 ;DEC	A
 | ||
| 		 ;JR	Z,.New_init_41h
 | ||
| 		;
 | ||
| 		; Check ZX ROMS Loaded
 | ||
| .CheckAndLoad:	LD	A,(Spec_Page.flag_Z)
 | ||
| 		CP	'Z'
 | ||
| 		JR	NZ,.Load_ZXROMS
 | ||
| 		LD	A,(Spec_Page.flag_X)
 | ||
| 		CP	'X'
 | ||
| 		JR	NZ,.Load_ZXROMS
 | ||
| 		; [x] 31/12/23 ¯®¤áâà å®¢ª  ®â ¥¤®ãâ¥çª¨ ¯ ¬ïâ¨
 | ||
| 		 LD	A,R
 | ||
| 		 AND	#80
 | ||
| 		 JR	Z,.No_Need_To_Load_ZXROMS
 | ||
| .Load_ZXROMS:	 XOR	A
 | ||
| 		 LD	R,A
 | ||
| 		; Load ZX ROM's
 | ||
| 		 LD	BC,64*256 + BIOS.ZX_MEMORY_MANAGER  ; [ ] free zx pages! MANAGE_ZX_PAGES.FREE_vMEMORY
 | ||
| 		 RST	ToBIOS_18
 | ||
| 		;
 | ||
| 		LD	B,3				; !HARDCODE zx-rom number of pages
 | ||
| 		CALL	EMM.GetMem
 | ||
| 		JR	C,.init_41h			;!FIXIT ¯¥ç â âì ®è¨¡ªã	; [ ] free zx pages!
 | ||
| 		CALL	init_zx_roms
 | ||
| 	; IFN FREE_ZX_PAGES
 | ||
| 	; 	; áâ ¢¨¬ ¬¥âªã ¥á«¨ ¯à®£à㧨«¨ <20>‡“ ᯥªâà㬠
 | ||
| 	; 	LD	HL,'XZ'
 | ||
| 	; 	LD	(Spec_Page.flag_Z),HL
 | ||
| 	; ENDIF	;
 | ||
| .No_Need_To_Load_ZXROMS:
 | ||
| 		POP	AF
 | ||
| 		OUT	(SLOT3),A
 | ||
| 		RET
 | ||
| 		;
 | ||
| .init_41h:	CALL	init_zx_roms.init_41h
 | ||
| 		LD	A,SYS_PAGE
 | ||
| 		OUT	(SLOT3),A
 | ||
| 		CALL	.Set_Page41
 | ||
| 		;!FIXIT ãáâ ®¢¨âì ¢® ¢á¥ vROM áâà ¨æã #41		; [ ] free zx pages!
 | ||
| 		JR	.No_Need_To_Load_ZXROMS
 | ||
| 		;
 | ||
| .Set_Page41:	LD	HL,SYS_PAGE.SHARED_BUFFER_256b + 11
 | ||
| 		LD	DE,SYS_PAGE.SHARED_BUFFER_256b + 11-1
 | ||
| 		LD	BC,11-1				; !HARDCODE ª®«-¢® áâà ¨æ vROM + RAM BLOCK ID
 | ||
| 		LD	(HL),#FF
 | ||
| 		LDDR					; § ç¨é ¥¬
 | ||
| 		EX	DE,HL
 | ||
| 		;
 | ||
| 		; LD	A,SYS_PORT.EXTENSION
 | ||
| 		; OUT	(SYS_PORT.ROM),A
 | ||
| 		;  JP	MANAGE_ZX_PAGES.INIT_vROM
 | ||
| 		; XOR	A	;LD	A,SYS_PORT.BIOS
 | ||
| 		; OUT	(SYS_PORT.ROM),A
 | ||
| 		 LD	BC,128*256 + BIOS.ZX_MEMORY_MANAGER  ; [ ] free zx pages! HARDCODE
 | ||
| 		 JP	ToBIOS_18
 | ||
| 		;RET
 | ||
| ;
 | ||
| ;--------------------[copy zx-roms to zx-pages]-----------------;
 | ||
| ; SLOT0 - ROM 8, sys_port - on.
 | ||
| ; RAM SLOT0 - page 0
 | ||
| ; RAM SLOT3 - Spec_Page
 | ||
| ; ¤«ï ०¨¬  zx spectrum
 | ||
| ; !HARDCODE ®¬¥à  áâà ¨æ ¤«ï í¬ã«ïâ®à  <20>‡“
 | ||
| init_zx_roms:	DI
 | ||
| 	; ;;;;;;;;
 | ||
| 	; IF FREE_ZX_PAGES
 | ||
| 	; ;;;;;;;;
 | ||
| 	; <20>€ ‚•ŽŽ„… A = SYS_PAGE.Block_ID.vROM
 | ||
| 		; ¤®¡¨¢ ¥¬ ¡ãä¥à ¤® 11 ¡ ©â®¢ ¯ãáâ묨 áâࠨ栬¨
 | ||
| 		; ¢ ¡ãä¥à 㯠¤ãâ 1 RAM BLOCK ID, 3 áâà ¨æë ¤«ï vROM ¨ #FF 
 | ||
| 		LD	HL,#FFFF
 | ||
| 		LD	(memBUFFER.Shared + 5),HL	; !HARDCODE zx-rom number of pages
 | ||
| 		LD	(memBUFFER.Shared + 7),HL	; !HARDCODE zx-rom number of pages
 | ||
| 		LD	(memBUFFER.Shared + 9),HL	; !HARDCODE zx-rom number of pages
 | ||
| 		; ¯®«ãç ¥¬ ᯨ᮪ áâà ¨æ ¤«ï vROM
 | ||
| 		LD	HL,memBUFFER.Shared
 | ||
| 		LD	(HL),A
 | ||
| 		INC	HL
 | ||
| 		LD	B,A
 | ||
| 		CALL	EMM.GetMemBlkPages
 | ||
| 		;
 | ||
| 		LD	A,SYS_PAGE
 | ||
| 		OUT	(SLOT3),A
 | ||
| 		; ãáâ  ¢«¨¢ ¥¬ ®¬¥à  áâà ¨æ vROM ¢ ¯®àâë ALTERA
 | ||
| 		DEC	HL
 | ||
| 		LD	A,ROM.EXTENSION
 | ||
| 		OUT	(SYS_PORT.ROM),A
 | ||
| 		CALL	MANAGE_ZX_PAGES.INIT_vROM
 | ||
| 		; Š®¯¨à㥬 ®¡à §ë ZX-ROM ¨§ <20>‡“ ¢ áâà ¨æë vROM
 | ||
| 		LD	A,2				; !HARDCODE 
 | ||
| 		LD	BC,+(3*2)*256 + SLOT3		; !HARDCODE B = (zx-rom number of pages)*2
 | ||
| 		LD	HL,memBUFFER.Shared + 1
 | ||
| .loop:		OUTI
 | ||
| 		OUT	(ROM.SLOT0),A
 | ||
| 		EXX
 | ||
| 		 LD	HL,0
 | ||
| 		 LD	DE,#C000
 | ||
| 		 LD	BC,#4000
 | ||
| 		 LDIR
 | ||
| 		EXX
 | ||
| 		INC	A
 | ||
| 		DJNZ	.loop
 | ||
| 		; ¢®§¢à é ¥¬ áâà ¨æë   ¬¥áâ®
 | ||
| 		XOR	A
 | ||
| 		OUT	(ROM.SLOT0),A
 | ||
| 		OUT	(SYS_PORT.ROM),A
 | ||
| 		LD	A,Spec_Page
 | ||
| 		OUT	(SLOT3),A
 | ||
| .init_41h:	; § ¡¨âì FF- ¬¨
 | ||
| 		LD	HL,#C000
 | ||
| 		LD	DE,#C001
 | ||
| 		LD	BC,#3FFF - 2
 | ||
| 		LD	(HL),#FF
 | ||
| 		LDIR
 | ||
| 		; ‡ £«ã誠 ¤«ï áâà ¨æë #41
 | ||
| 		LD HL,PROG_NO_ROM
 | ||
| 		LD DE,#C000 + Spec_Page.no_zx_rom
 | ||
| 		LD BC,PROG_NO_ROM.size
 | ||
| 		LDIR
 | ||
| 		;
 | ||
| 		LD HL,RAM_BIOS_PROG
 | ||
| 		LD DE,#C000 + Spec_Page.to_bios
 | ||
| 		LD BC,RAM_BIOS_PROG.Length
 | ||
| 		LDIR
 | ||
| 		RET
 | ||
| ;---------------------------------------------------------------------[]
 | ||
| 
 | ||
| 
 | ||
| ;---------------------------------------
 | ||
|  INCLUDE 'src/bios/ROM/SETUP/messages.z80'
 | ||
| ;---------------------------------------
 | ||
| ;
 | ||
| 
 | ||
|         STRUCT  MAIN_BUFFERS
 | ||
| ID              BLOCK #100
 | ||
| Messages        BLOCK MSG_ENG.size
 | ||
| Shared          BLOCK 1024
 | ||
| End             BYTE
 | ||
|         ENDS
 | ||
| 
 | ||
| 
 | ||
| memBUFFER       MAIN_BUFFERS = $
 | ||
| STACK           EQU #C000
 | ||
| .Size           EQU 128
 | ||
| 
 | ||
| 
 | ||
|  IF memBUFFER.End-1 > #C000-STACK.Size
 | ||
| 	DISPLAY 'memBUFFER.Shared overlaps STACK by:	',/A,(memBUFFER.End-1)-(#C000-STACK.size)
 | ||
| 	ASSERT memBUFFER.End-1 < #C000-STACK.size
 | ||
|  ENDIF
 | ||
| 
 | ||
|  IFDEF PREBUILD
 | ||
| 	OUTEND
 | ||
| 
 | ||
| 	DISPLAY '-----[Set_Pictures Prebuild start]-----'
 | ||
| 	MMU		1 e, 0						; áâà ¨æ  0 ¢ ¡ ªã 0 ¨ ¯à®¢¥àª    £à ¨æë.
 | ||
| 	ORG		ROM_MAP.LOGO
 | ||
| 	INCLUDE 'src/bios/logo/Set_Pictures.asm'
 | ||
| 	DISPLAY '-----[Set_Pictures Prebuild done ]-----'
 | ||
|  ELSE
 | ||
| MAIN_END_CODE_ADDRESS	EQU	$-1
 | ||
| 	; DISPLAY '  -------------------[Main.asm]-------------------'		
 | ||
| 	; DISPLAY 'End code address:                ',/A,$-1
 | ||
| 	; DISPLAY 'Code size:                       ',/A,$-COMPILE_ADDR.MAIN
 | ||
| 	; DISPLAY 'End buffers address:             ',/A,memBUFFER.End-1
 | ||
| 	; DISPLAY 'Free memory:                     ',/A,#C000-(memBUFFER.End-1)-STACK.Size
 | ||
| 	; DISPLAY 'Unused bytes before INT_POINTER: ',/A,INT_POINTER-before_intPointer
 | ||
|  ENDIF
 | ||
| ;
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| ;=======================================================================================================================
 | ||
| 
 | ||
| ; 	;;;;;;;;
 | ||
| ; 	ELSE
 | ||
| ; 	;;;;;;;;
 | ||
| ; 		IN	A,(SLOT3)
 | ||
| ; 		EX	AF,AF'
 | ||
| ; 		;
 | ||
| ; 		LD	A,SYS_PORT.EXTENSION
 | ||
| ; 		OUT	(SYS_PORT.ROM),A
 | ||
| ; 		INC	A		; !HARDCODE LD A,2
 | ||
| ; 		LD	B,3		; !HARDCODE zx-rom number of pages
 | ||
| ; 		;
 | ||
| ; .loop:		EXX
 | ||
| ; 		;
 | ||
| ; 		OUT	(ROM.SLOT0),A
 | ||
| ; 		OR	%0100'0000	; !HARDCODE ®¬¥à  áâà ¨æ ¤«ï í¬ã«ïâ®à  <20>‡“
 | ||
| ; 		OUT	(SLOT3),A
 | ||
| ; 		AND	%1011'1111	; !HARDCODE ®¬¥à  áâà ¨æ ¤«ï í¬ã«ïâ®à  <20>‡“
 | ||
| ; 		;
 | ||
| ; 		LD	HL,0
 | ||
| ; 		LD	DE,#C000
 | ||
| ; 		LD	BC,#4000
 | ||
| ; 		LDIR
 | ||
| ; 		;
 | ||
| ; 		INC	A
 | ||
| ; 		EXX
 | ||
| ; 		DJNZ	.loop
 | ||
| ; 		;
 | ||
| ; 		XOR	A
 | ||
| ; 		OUT	(ROM.SLOT0),A
 | ||
| ; 		OUT	(SYS_PORT.ROM),A
 | ||
| ; 		EX	AF,AF'
 | ||
| ; 		OUT	(SLOT3),A
 | ||
| ; 		;
 | ||
| ; 	;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23
 | ||
| ; 		[ ] free zx pages! ¯¥à¥¤¥« âì   ¢ë§®¢ FREE_ZX_PAGES.INIT_vROM
 | ||
| ; 		LD	A,ACEX.vROM.BASIC_128				; ROM-ID - BASIC 128
 | ||
| ; 		LD	B,#42						;!HARDCODE page
 | ||
| ; 		CALL	SET_PORTS
 | ||
| ; 		;
 | ||
| ; 		LD	A,ACEX.vROM.BASIC_48				; ROM-ID - BASIC 48
 | ||
| ; 		LD	B,#43						;!HARDCODE page
 | ||
| ; 		CALL	SET_PORTS
 | ||
| ; 		;
 | ||
| ; 		LD	A,ACEX.vROM.TR_DOS				; ROM-ID - TR-DOS
 | ||
| ; 		LD	B,#44						;!HARDCODE page
 | ||
| ; 		CALL	SET_PORTS
 | ||
| ; 		;
 | ||
| ; 		; í⨠áâà ¨æë ¯®ª  ¥ ¨á¯®«ì§ãîâáï
 | ||
| ; 		 LD	A,ACEX.vROM.EXPANSION				; ROM-ID - BIOS
 | ||
| ; 		 ;LD	B,#45						;!HARDCODE page
 | ||
| ; 		 LD	B,#41
 | ||
| ; 		 CALL	SET_PORTS
 | ||
| ; 		 ;
 | ||
| ; 		 LD	A,ACEX.vROM.BIOS_1				; ROM-ID - BIOS-1
 | ||
| ; 		 ;LD	B,#46						;!HARDCODE page
 | ||
| ; 		 LD	B,#41
 | ||
| ; 		 CALL	SET_PORTS
 | ||
| ; 		 ;
 | ||
| ; 		 LD	A,ACEX.vROM.BIOS_2				; ROM-ID - BIOS-2
 | ||
| ; 		 ;LD	B,#47						;!HARDCODE page
 | ||
| ; 		 LD	B,#41
 | ||
| ; 		 CALL	SET_PORTS
 | ||
| ; 		; ¬®¦® § ¤¥©á⢮¢ âì ¥éñ 4 áâà ¨æë   ¯®àâë #E4..#E7
 | ||
| ; 	;;;;;;;;
 | ||
| ; 	ENDIF
 | ||
| ; 	;;;;;;;; | 
