1588 lines
32 KiB
NASM
1588 lines
32 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
|
||
|
||
|
||
TEMP EQU #7E00 ; !HARDCODE
|
||
MEMMAP2 EQU TEMP ; ¤®«¦® ¡ëâì ¢ë஢¥® ¯® ALIGN 256
|
||
TPOINTD EQU TEMP - SYS_PAGE.RAMD_KEYS.NUM - SYS_PAGE.Sp_RAMD_KEYS.NUM ; [x] 4/11/23
|
||
|
||
|
||
;=======================================
|
||
;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
|
||
|
||
CLEARM: IN A,(SLOT3)
|
||
PUSH AF
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
; 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/23
|
||
LD HL,SYS_PAGE.Sp_RAMD_KEYS
|
||
LD DE,TPOINTD + SYS_PAGE.RAMD_KEYS.NUM
|
||
LD BC,SYS_PAGE.Sp_RAMD_KEYS.NUM
|
||
LDIR
|
||
;
|
||
; ®ç¨é ¥¬ RAM Table
|
||
LD HL,MEMMAP2
|
||
LD DE,MEMMAP2+1
|
||
LD BC,255
|
||
LD (HL),0
|
||
LDIR
|
||
; ¢®ááâ ¢«¨¢ ¥¬ RAM ¤¨áª¨
|
||
LD IX,SYS_PAGE.RAMD_KEYS ;RAM DISKS
|
||
LD H,high SYS_PAGE.RAMD_FAT
|
||
LD D,high MEMMAP2
|
||
LD BC,SYS_PAGE.RAMD_KEYS.NUM*256 + #FF
|
||
CALL .MEMLOOP
|
||
; [x] 4/11/23
|
||
LD IX,SYS_PAGE.Sp_RAMD_KEYS
|
||
LD B,SYS_PAGE.Sp_RAMD_KEYS.NUM
|
||
CALL .MEMLOOP
|
||
;
|
||
CALL EMM.InitMem
|
||
LD BC,CMOS_CELL.BootUpParams.Mask.SaveRAMdisks ;#400E
|
||
CALL G_VALUE
|
||
OR A
|
||
CALL NZ,CCHAIN
|
||
POP AF
|
||
OUT (SLOT3),A
|
||
;!TEST; [ ] 04/11/2023 Žâ¤¥«ìë¥ à ¬¤¨áª¨ ¤«ï ०¨¬ ᯥªâà㬠¨ DSS.
|
||
LD B,high BIOS.SWAP_RAM_DRIVES.Sp2000
|
||
JP SWAP_RAM_DRIVES
|
||
;
|
||
;
|
||
.MEMLOOP:
|
||
LD A,(IX)
|
||
INC IX
|
||
OR A
|
||
LD L,A
|
||
CALL NZ,RCHAIN
|
||
DJNZ .MEMLOOP
|
||
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
|
||
;
|
||
; LD BC,#020E
|
||
; CALL G_VALUE
|
||
; OR A
|
||
; LD A,#EC ;SPRINTER
|
||
; JR Z,XFLEX
|
||
; LD A,#EA ;SPECTRUM
|
||
;XFLEX:
|
||
LD A,ROM.BIOS
|
||
OUT (SYS_PORT.ROM),A
|
||
POP HL ; ¯¨å ¥âáï ¢ EXP.ASM ¢ ¯à®æ¥¤ãà¥
|
||
JP (HL)
|
||
; LD (JMPHL),HL
|
||
|
||
; LD C,#F3
|
||
; RST_to_BIOS
|
||
; JMPHL EQU $+1
|
||
; JP #0000
|
||
;-----------------------------------------------------------------------;
|
||
|
||
|
||
INSTALL:
|
||
CALL INT_ON
|
||
CALL SET_CGA
|
||
XOR A
|
||
OUT (#FE),A
|
||
LD IX,win_descriptor.tab80x32
|
||
LD HL,#0000
|
||
LD E,1
|
||
CALL WIN_OPEN
|
||
|
||
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.INC.LCYAN
|
||
CALL CPRINTZ
|
||
; LD HL,BUILD
|
||
; LD A,COLORS.CGA.INC.LCYAN
|
||
; CALL CPRINTZ
|
||
|
||
LD DE,#0128 ; !HARDCODE
|
||
CALL LP_SET_PLACE
|
||
LD A,msgStrings.copyRightPeters
|
||
LD E,COLORS.CGA.INC.LGREEN
|
||
CALL POSTMSC
|
||
|
||
LD DE,#0228 ; !HARDCODE
|
||
CALL LP_SET_PLACE
|
||
LD A,msgStrings.copyRightSPTeam
|
||
LD E,COLORS.CGA.INC.GREEN
|
||
CALL POSTMSC
|
||
|
||
IF BETA_BUILD
|
||
LD DE,#0328
|
||
CALL LP_SET_PLACE
|
||
LD A,msgStrings.testBIOSmsg
|
||
LD E,COLORS.CGA.FLASH + COLORS.CGA.INC.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
|
||
|
||
;BUILD:
|
||
; db ', BIOS v', Disk_subsystem_ver_txt,0 ; !FIXIT ¬®¦¥â ¢®âªãâì ¢¬¥á⥠á msgStrings ?
|
||
|
||
RSTID: DB "RESTART",0
|
||
.size EQU $-RSTID
|
||
|
||
Start_again:
|
||
ld sp,STACK-2
|
||
START:
|
||
DI
|
||
PUSH AF
|
||
XOR A
|
||
LD (ERRSUM),A
|
||
LD (ERRSUM.ErrDateTime),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
|
||
CALL ZXCLS
|
||
CALL READING
|
||
CALL TCHEKSM
|
||
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 TRQUICK
|
||
CALL FINSTAL
|
||
CALL CLEARM
|
||
CALL RESCREEN
|
||
|
||
;R06
|
||
LD BC,CMOS_CELL.BootUpParams.Mask.QuickStart ;#010E
|
||
CALL G_VALUE
|
||
POP BC
|
||
INC B
|
||
DEC B
|
||
JR NZ,QIGNORE ; १ã«ìâ ⠯஢¥àª¨ Space ¨§ exp.asm [space_check]
|
||
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,RSTID
|
||
LD B,RSTID.size
|
||
CALL COMPARE
|
||
CALL NZ,SETRSTS
|
||
POP BC
|
||
OUT (C),B
|
||
JR Z,HOTST
|
||
POP AF
|
||
JR QIGNORE
|
||
|
||
SETRSTS:
|
||
PUSH AF
|
||
LD HL,RSTID
|
||
LD DE,SYS_PAGE.RESTART_ID
|
||
LD BC,RSTID.size
|
||
LDIR
|
||
LD HL,PowerOnDate ; !TODO ¨§¬¥¨âì ¯®¤ áâàãªâãàã, ª®£¤ áâàãªâãà ¯¥à¥¬¥ëå ¡ã¤¥â £®â®¢
|
||
CALL GETTIME
|
||
POP AF
|
||
RET
|
||
|
||
HOTST:
|
||
POP AF
|
||
OR A
|
||
JP NZ,EXIT_SETUP
|
||
QIGNORE:
|
||
CALL INSTALL
|
||
LD DE,#0528
|
||
;CALL ScreenPOS.LOCAT
|
||
CALL LP_SET_PLACE
|
||
LD A,msgStrings.toSetupButton
|
||
LD E,COLORS.CGA.FLASH + COLORS.CGA.INC.WHITE
|
||
CALL POSTMSC
|
||
|
||
LD DE,#0900
|
||
;CALL ScreenPOS.LOCAT
|
||
CALL LP_SET_PLACE
|
||
ERRSUM+1:
|
||
LD A,#00 ;MEM Patch!
|
||
OR A
|
||
JR Z,.ErrDateTime
|
||
XOR A
|
||
ld (.ErrDateTime+1),a ; ¥á«¨ ª®â஫ì ï á㬬 ᫥⥫ , â® á®®¡é¥¨¥ ® ªà¨¢ëå ¤ â¥/¢à¥¬¥¨ ¢ ª¬®á ¥ ¢ë¢®¤¨¬
|
||
LD A,msgStrings.cmosChecksumErr
|
||
LD E,COLORS.CGA.INC.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.INC.RED
|
||
CALL POSTMSC
|
||
CALL ScreenPOS.CRLF
|
||
CALL ScreenPOS.CRLF
|
||
|
||
CHEKOK: ;CALL ScreenPOS.GET_CUR
|
||
CALL LP_GET_PLACE
|
||
PUSH DE
|
||
CALL LOGOTYP
|
||
|
||
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: ;!FIXIT §¢ ¨¥ ¥¯à ¢¨«ì®¥
|
||
LD DE,#0528
|
||
CALL LP_SET_PLACE
|
||
LD A,msgStrings.forAltBootButton
|
||
LD E,COLORS.CGA.INC.WHITE
|
||
CALL POSTMSC
|
||
|
||
POP DE
|
||
CALL LP_SET_PLACE
|
||
|
||
CALL TSETUP ;!TODO ¬®¦¥â ¯¨åãâì ¥ñ ¯à¥àë¢ ¨ï?
|
||
|
||
CALL CONFIGURE_IDE_DRIVES.START
|
||
CALL CTRLKEY
|
||
LD A,B
|
||
AND #10
|
||
JR NZ,ABOOT
|
||
|
||
CALL TSETUP
|
||
|
||
LD BC,CMOS_CELL.BootDrives.Mask.SysDisk ;#0710
|
||
CALL PrepareToBOOT
|
||
LD A,msgStrings.bootFail
|
||
LD E,COLORS.CGA.INC.LRED
|
||
;CALL C,POSTMSG
|
||
CALL C,POSTMSC
|
||
CALL ScreenPOS.CRLF
|
||
|
||
ABOOT: LD A,msgStrings.bootAltDrv
|
||
LD E,COLORS.CGA.INC.LGREEN
|
||
;CALL C,POSTMSG
|
||
CALL C,POSTMSC
|
||
|
||
LD BC,CMOS_CELL.BootDrives.Mask.AltSysDisk ;#7010
|
||
CALL PrepareToBOOT
|
||
LD A,msgStrings.bootFail
|
||
LD E,COLORS.CGA.INC.LRED
|
||
;CALL C,POSTMSG
|
||
CALL C,POSTMSC
|
||
CALL ScreenPOS.CRLF
|
||
|
||
;NO START DISK - RESTART / SETUP / ZX SPECTRUM mode
|
||
LD BC,CMOS_CELL.Options.Mask.RebootMSG ;#021D
|
||
CALL G_VALUE
|
||
OR A
|
||
JP Z,EXIT_SETUP
|
||
|
||
CALL ScreenPOS.CRLF
|
||
LD A,msgStrings.afterBootFail
|
||
LD E,COLORS.CGA.INC.RED
|
||
CALL POSTMSC
|
||
|
||
;EI
|
||
CALL INT_ON
|
||
AGAKEY: CALL WAITKEY
|
||
LD HL,#4F00 ; DEL - go to settings
|
||
;AND A
|
||
SBC HL,DE
|
||
JR Z,CSETUP
|
||
CP #1B ; ESC - go to zx spectrum mode
|
||
JP Z,EXIT_SETUP
|
||
CP #0D ; ENTER - restart
|
||
JP NZ,AGAKEY
|
||
XOR A
|
||
JP Start_again
|
||
|
||
TSETUP:
|
||
CALL SCANKEY
|
||
RET Z
|
||
LD HL,#4F00
|
||
AND A
|
||
SBC HL,DE
|
||
JR Z,CSETUP
|
||
LD HL,#011B
|
||
AND A
|
||
SBC HL,DE
|
||
JR NZ,TSETUP
|
||
POP HL ; ã¡¨à ¥¬ «¨è¥¥
|
||
JP EXIT_SETUP
|
||
CSETUP: XOR A
|
||
LD (ITEM_Restore),A
|
||
CALL SETTINGS
|
||
XOR A
|
||
JP Start_again
|
||
|
||
COMPARE:
|
||
LD A,(DE)
|
||
CP (HL)
|
||
RET NZ
|
||
INC HL
|
||
INC DE
|
||
DJNZ COMPARE
|
||
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
|
||
|
||
RESCREEN:
|
||
;R06
|
||
LD A,#1F ;!HARDCODE READ SCREEN POSITION
|
||
CALL READCMS
|
||
PUSH AF
|
||
IN A,(SLOT3)
|
||
LD E,A
|
||
LD A,DCP_PAGE
|
||
OUT (SLOT3),A
|
||
LD A,(#C400) ;c400 for first cfg 50176 ; !TODO ¬®¦® ¯¥à¥¤¥« âì ¢ë§®¢ äãªæ¨¨ ¡¨®á
|
||
LD D,A
|
||
LD A,#CB
|
||
LD (#C400),A
|
||
POP AF
|
||
LD BC,0
|
||
OUT (C),A
|
||
LD A,D
|
||
LD (#C400),A
|
||
LD A,E
|
||
OUT (SLOT3),a
|
||
;R06
|
||
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 #60 ; !HARDCODE ᤥ« âì ¨¬ ¢á¥¬ §¢ ¨ï
|
||
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
|
||
CALL G_VALUE
|
||
LD B,0
|
||
; FDD
|
||
OR A
|
||
JR Z,FDSTART ; FDD A:
|
||
INC B
|
||
DEC A
|
||
JR Z,FDSTART ; FDD B:
|
||
; IDE
|
||
LD B,#80
|
||
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
|
||
JP OS_LOAD
|
||
;!TODO
|
||
CDSTART:
|
||
PUSH BC
|
||
LD A,msgStrings.bootCd
|
||
CALL POSTMSG
|
||
POP AF
|
||
PUSH AF
|
||
CALL PRINT_CHANEL
|
||
;
|
||
POP BC
|
||
SET 6,B
|
||
SCF
|
||
RET
|
||
|
||
RDSTART:
|
||
LD A,msgStrings.bootRamDrv
|
||
CALL POSTMSG
|
||
LD B,#60 ; !HARDCODE: 6 - ⨯ ¤à ©¢ RAM-DRV, 0 - ®¬¥à ¤à ©¢
|
||
.loop: PUSH BC
|
||
CALL OS_LOAD
|
||
POP BC
|
||
INC B
|
||
LD A,#6F ; !HARDCODE - ¬ ªá¨¬ «ì®¥ ç¨á«® à ¬¤¨áª®¢
|
||
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.CDROM
|
||
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,#0000
|
||
LD IX,#0001
|
||
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.INC.LGREEN
|
||
;CALL POSTMSG
|
||
CALL POSTMSC
|
||
CALL ScreenPOS.CRLF
|
||
POP AF
|
||
POP HL
|
||
; JP MOVE0
|
||
MOVE0: DI
|
||
IM 1
|
||
LD HL,MOVE1
|
||
LD DE,#7C00 ; !HARDCODE
|
||
LD BC,MOVE1.length
|
||
LDIR
|
||
JP #7C00
|
||
MOVE1: LD SP,#7FFF ; !HARDCODE
|
||
LD HL,TEMP
|
||
LD DE,#8000 ; !HARDCODE
|
||
LD BC,#0200 ; !HARDCODE
|
||
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_INI_TABLE.FDD
|
||
FD720A: DB #00,#09,#02,#50,#00,#00,#02,FDD_INI_TABLE.FDD
|
||
|
||
FINSTAL:
|
||
IN A,(SLOT3)
|
||
EX AF,AF'
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD HL,FDD_INI_TABLE.FDD_0
|
||
LD BC,SYS_PAGE.FDD_TBL.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 G_VALUE
|
||
LD HL,FD720A
|
||
OR A
|
||
JR Z,SETFD0
|
||
LD HL,FD144A
|
||
DEC A
|
||
JR NZ,NOFDD0
|
||
SETFD0:
|
||
IN A,(SLOT3)
|
||
EX AF,AF'
|
||
LD A,SYS_PAGE
|
||
OUT (SLOT3),A
|
||
LD DE,FDD_INI_TABLE.FDD_0
|
||
LD BC,#0008 ; !HARDCODE
|
||
LDIR
|
||
EX AF,AF'
|
||
OUT (SLOT3),A
|
||
NOFDD0:
|
||
LD BC,CMOS_CELL.DrivesSetup_1.Mask.SecondFDD ;#0C11
|
||
CALL G_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,FDD_INI_TABLE.FDD_1
|
||
LD BC,#0008 ; !HARDCODE
|
||
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:
|
||
LD B,1
|
||
CALL FN_CRIPT
|
||
|
||
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 IZPRINT
|
||
POP DE
|
||
PUSH DE
|
||
LD A,D
|
||
CALL PRNHEX
|
||
POP DE
|
||
LD A,E
|
||
JP PRNHEX
|
||
|
||
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
|
||
|
||
ZXCLS: LD HL,#4000
|
||
LD DE,#4001
|
||
LD BC,#1AFF
|
||
LD (HL),L
|
||
LDIR
|
||
RET
|
||
|
||
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
|
||
|
||
|
||
RCHAIN:
|
||
LD E,L
|
||
LDI
|
||
DEC L
|
||
LD L,(HL)
|
||
INC L
|
||
RET Z
|
||
DEC L
|
||
JR RCHAIN
|
||
|
||
CCHAIN:
|
||
LD HL,MEMMAP2
|
||
LD DE,SYS_PAGE.RAMD_FAT
|
||
XOR A
|
||
CCHAINC:
|
||
CP (HL)
|
||
JR Z,NOCOPYC
|
||
LD E,L
|
||
LDI
|
||
DEC L
|
||
NOCOPYC:
|
||
INC L
|
||
JR NZ,CCHAINC
|
||
LD HL,TPOINTD
|
||
LD DE,SYS_PAGE.RAMD_KEYS
|
||
LD BC,SYS_PAGE.RAMD_KEYS.NUM
|
||
LDIR
|
||
RET
|
||
|
||
TRQUICK:
|
||
;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
|
||
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 G_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 G_VALUE
|
||
POP BC
|
||
OR A
|
||
RET Z
|
||
DEC A
|
||
JP Z,FDD_TO_DRV
|
||
DEC A
|
||
JP Z,HDD_TO_DRV
|
||
SCF
|
||
RET
|
||
|
||
; ®âªàë¢ ¥â ¯®àâ #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
|
||
;
|
||
|
||
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
|
||
|
||
; Get_Item_Address:
|
||
; LD L,A
|
||
; LD H,0
|
||
; LD BC,MSG_Buffer
|
||
; ADD HL,HL
|
||
; ADD HL,BC
|
||
; LD A,(HL)
|
||
; INC HL
|
||
; LD H,(HL)
|
||
; LD L,A
|
||
; INC HL
|
||
; INC HL
|
||
; 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
|
||
|
||
POSTMSG:
|
||
CALL FindStringAddr
|
||
JP PRINTZ
|
||
|
||
POSTMSC:
|
||
CALL FindStringAddr
|
||
LD A,E
|
||
JP CPRINTZ
|
||
|
||
SETLAND:
|
||
LD A,#0E ; !HARDCODE CMOS ï祩ª options
|
||
CALL READCMS
|
||
AND #04 ; !HARDCODE CMOS § 票¥ ï§ëª
|
||
JR NZ,.RUS
|
||
;
|
||
LD HL,MSG_ENG
|
||
LD DE,memBUFFER.Messages
|
||
LD BC,MSG_ENG.size
|
||
LDIR
|
||
RET
|
||
;
|
||
.RUS: LD HL,MSG_RUS
|
||
LD DE,memBUFFER.Messages
|
||
LD BC,MSG_RUS.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
|
||
;
|
||
|
||
|
||
;---------------------------------------
|
||
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
|
||
|
||
|
||
; ID_BUFFER EQU $
|
||
; MSG_Buffer EQU ID_BUFFER+#100
|
||
; TMP_BUFFER EQU MSG_Buffer + MSG_ENG.size
|
||
|
||
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
|
||
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
|
||
; |