пока не работает

This commit is contained in:
Tolik 2024-09-28 02:06:04 +10:00
parent 42c3d40f86
commit c7fd876f91
13 changed files with 969 additions and 725 deletions

@ -1 +1 @@
Subproject commit 7bb1538646ae7e8ba917d04b55e7396d74154df7
Subproject commit 753caadb020b3d55971aced21723c84a72bf65df

View File

@ -237,8 +237,8 @@ TAB_FNS:
DB low SET_PORTS ; #F8
DB low READ_PORTS ; #F9 [x] 26/01/2024
DB low FN_RESERVED ; #FA [x] 26/01/2024 ­¥ à ¡®â «  ¨ ­¥ ­ã¦­ , ¤ã¡«¨àã¥â SET_PORTS
DB low GOTO_SPEC ; #FB Goto Spectrum!
DB low FN_RESERVED ; #FC
DB low GOTO_SPEC ; #FB Goto Spectrum!
DB low ZX_MEMORY_MANAGER ; #FC ; [ ] free zx pages!
DB low REINIT ; #FD
DB low FN_RESERVED ; #FE SAVE_AUTOSTART. …áâì ¢ ZX_EXP.ASM
DB low FN_VERSION ; #FF

View File

@ -647,10 +647,12 @@ SET_PORTS:
PUSH AF
POP DE
DI
LD A,CNF_PORT.CNF_0 + ROM.BIOS
OUT (SYS_PORT.ROM),A
CALL DOS_ON
;
LD A,CNF_PORT.CNF_0 + ROM.BIOS
OUT (SYS_PORT.ROM),A
; LD A,CNF_PORT.CNF_0 + ROM.BIOS
; OUT (SYS_PORT.ROM),A
;
LD C,SLOT2 ; ¯®«ãç¨âì áâà ­¨æã
IN D,(C)

View File

@ -857,48 +857,50 @@ Setup_to_RAM: LD HL,Setup_Starter.Start
;JP PrepareToZX
ENDMODULE
PrepareToZX: ;CALL init_zx_roms
; 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
;
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
;
.loop: CALL FN_HDD_PART
JR NC,.start_zx
POP AF
INC A
CP #10
JR C,.loop
; ; ç¨á⪠ ¯¥à¥¬¥­­ëå 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,BIOS.REINIT.HARD_RESET
JP REINIT
ELSE ; [x] free zx pages!
XOR A
OUT (SLOT2),A ; ZERO_PAGE
@ -1035,10 +1037,10 @@ PORTS_INIT:
LD A,IDE.Chanel.Primary
OUT (IDE.Chanel.Set),A
LD BC,#7FFD
LD A,#10
OUT (C),A ; BASIC_48 mode
XOR A
OUT (C),A ; BASIC_128 mode
LD B,#1F
LD A,01
INC A
OUT (C),A ; RAM-0 mode !!!
; ®ç¨á⪠ ¡ãä¥à®¢ ª« ¢¨ âãàë ¨ ¬ëè¨ ¢ SIO
CALL .clean_kbd_buf
@ -1063,9 +1065,9 @@ PORTS_INIT:
;-----------------------------------------------------------------------;
; paths from project DIR
INCLUDE 'BIOS_FUNC.ASM'
INCLUDE 'FUNC_4x.ASM'
INCLUDE 'FUNC_CMOS.ASM'
INCLUDE 'BIOS_FUNC.ASM'
INCLUDE 'FUNC_SERVICE.asm'
; INCLUDE 'EXP_SCR.ASZ' LP_SCR_MNU
INCLUDE 'FUNC_SCREEN.ASM'
@ -1074,7 +1076,9 @@ PORTS_INIT:
INCLUDE 'FUNC_FOR_TRDOS.ASM'
INCLUDE 'FUNC_5x.asm'
INCLUDE 'FUNC_LOW_PRINT.ASM'
IFN FREE_ZX_PAGES
INCLUDE 'FUNC_ZX.ASM'
ENDIF
;-----------------------------------------------------------------------;
@ -1100,79 +1104,6 @@ ZG_ADDRESS: INCLUDE 'FONT.ASM'
;-----------------------------------------------------------------------;
;
;>$< >$< >$< >$< >$< >$< [ <20><EFBFBD>…Œ…™€…Œ އ“ ] >$< >$< >$< >$< >$< >$< ;
;-------------------------------[ #FFE0 ]-------------------------------;
; ¯à®£à ¬¬ , ª®â®à ï ¡ã¤ãç¨ à §¬¥é¥­­®© ¢ #40 áâà ­¨æ¥,
; á  ¤à¥á  RESTARTS, ¯¥à¥å¢ â뢠¥â RESET
RESTARTS_PROG: ; !TODO LDConf ¯¥à¥å¢ â à¥á¥â  ­  «î¡®© ª®­ä¥ ¯®á«¥ hardreset
LD HL,RESTARTS
LD B,16
.loop:
LD (HL),0
INC HL
DJNZ .loop
NOP
NOP
.Size EQU $-RESTARTS_PROG
; LD A,1
; OUT (SLOT3),A
;-----------------------------------------------------------------------;
;----------------------------[Setup Starter]----------------------------;
MODULE Setup_Starter
; ¯à®£à ¬¬ , à §¬¥é ¥¬ ï ¯®  ¤à¥áã 0C000h
; ¤«ï § ¯ã᪠ Setup
Start:
DISP COMPILE_ADDR.SETUP_STARTER
Exec:
LD A,CNF_PORT.CNF_0 + ROM.EXTENSION
OUT (SYS_PORT.ROM),A
LD HL,ROM_MAP.SETUP
LD DE,MEM_MAP.SETUP
LD BC,BLOCK_Setup.Length
LDIR
LD A,CNF_PORT.CNF_0 + ROM.BIOS
OUT (SYS_PORT.ROM),A
;-----------[Check SPACE]
LD A,Port_All_Mode.DEFAULT - Port_All_Mode.SPECTRUM_MODE_OFF ; !HARDCODE
LD BC,Port_All_Mode ; keyboard int & acc off
OUT (C),A
LD A,high ZXKeys.Line_7
IN A,(ZXKeys)
CPL
AND 1
; ¢ ॣ¨áâॠA ¯¥à¥¤ ñâáï ­ ¦ â  «¨ ª« ¢¨è  SPACE.
; ¯®â®¬ ¯à®¢¥àï¥âáï ¢ main.asm [space_check]
; ¨ ¥á«¨ ­ ¦ â , â® ¯à®¨á室¨â ¨£­®à ¯ à ¬¥âà 
; "<22>ëáâàë© áâ àâ <20>‡“" ¢® ¢à¥¬ï ¯¥à¥§ £à㧪¨
EX AF,AF'
LD A,#FF ; !HARDCODE
OUT (C),A ; keyboard int & acc on, zx_screen & original waits off (for conf >= 3.05)
EX AF,AF'
;----------------------[]
DI
POP HL ;  ¤à¥á ¢®§¢à â  ¢ EXP ¨§ SETUP
; LD SP,#8000 ;!HARDCODE
; PUSH HL
; PUSH AF
JP SETUP_MAIN
ENT
Size EQU $-Setup_Starter.Start
ENDMODULE
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<;
;
;
; !FIXIT ᤥ« âì í⨠䨪á¨à®¢ ­­ë¥  ¤à¥á  ®â¤¥«ì­ë¬ ä ©«®¬ ¨ á IF/ELSE ¨ ¯®¤ª«îç âì ¨å ¯®â®¬ ªã¤  ­ ¤®.
;
@ -1264,9 +1195,168 @@ DOS_ON: NOP
;***************************************
; BLOCK #3D17-$,FF
; !TODO ¬®¦­® ®¯à¨å®¤®¢ âì âãâ 233 ¡ ©â 
;
;***************************************
;
IF FREE_ZX_PAGES
; [ ] 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,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
;-------------------[]
;-----------------------------------------------------------------------;
;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<;
ENDIF
;-------------------------------[ #FFE0 ]-------------------------------;
; ¯à®£à ¬¬ , ª®â®à ï ¡ã¤ãç¨ à §¬¥é¥­­®© ¢ #40 áâà ­¨æ¥,
; á  ¤à¥á  RESTARTS, ¯¥à¥å¢ â뢠¥â RESET
RESTARTS_PROG: ; !TODO LDConf ¯¥à¥å¢ â à¥á¥â  ­  «î¡®© ª®­ä¥ ¯®á«¥ hardreset
LD HL,RESTARTS
LD B,16
.loop:
LD (HL),0
INC HL
DJNZ .loop
NOP
NOP
.Size EQU $-RESTARTS_PROG
; LD A,1
; OUT (SLOT3),A
;-----------------------------------------------------------------------;
;----------------------------[Setup Starter]----------------------------;
MODULE Setup_Starter
; ¯à®£à ¬¬ , à §¬¥é ¥¬ ï ¯®  ¤à¥áã 0C000h
; ¤«ï § ¯ã᪠ Setup
Start:
DISP COMPILE_ADDR.SETUP_STARTER
Exec:
LD A,CNF_PORT.CNF_0 + ROM.EXTENSION
OUT (SYS_PORT.ROM),A
LD HL,ROM_MAP.SETUP
LD DE,MEM_MAP.SETUP
LD BC,BLOCK_Setup.Length
LDIR
LD A,CNF_PORT.CNF_0 + ROM.BIOS
OUT (SYS_PORT.ROM),A
;-----------[Check SPACE]
LD A,Port_All_Mode.DEFAULT - Port_All_Mode.SPECTRUM_MODE_OFF ; !HARDCODE
LD BC,Port_All_Mode ; keyboard int & acc off
OUT (C),A
LD A,high ZXKeys.Line_7
IN A,(ZXKeys)
CPL
AND 1
; ¢ ॣ¨áâॠA ¯¥à¥¤ ñâáï ­ ¦ â  «¨ ª« ¢¨è  SPACE.
; ¯®â®¬ ¯à®¢¥àï¥âáï ¢ main.asm [space_check]
; ¨ ¥á«¨ ­ ¦ â , â® ¯à®¨á室¨â ¨£­®à ¯ à ¬¥âà 
; "<22>ëáâàë© áâ àâ <20>‡“" ¢® ¢à¥¬ï ¯¥à¥§ £à㧪¨
EX AF,AF'
LD A,#FF ; !HARDCODE
OUT (C),A ; keyboard int & acc on, zx_screen & original waits off (for conf >= 3.05)
EX AF,AF'
;----------------------[]
DI
POP HL ;  ¤à¥á ¢®§¢à â  ¢ EXP ¨§ SETUP
; LD SP,#8000 ;!HARDCODE
; PUSH HL
; PUSH AF
JP SETUP_MAIN
ENT
Size EQU $-Setup_Starter.Start
ENDMODULE
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<;
;
;***************************************
_mInfoBLOCK #3E00-$,#FF
@ -1430,13 +1520,13 @@ ROM_DISK.Pages: ;
_mInfoBLOCK #3FD0-$,#FF ; ToBIOS_FromEXT
; #3FD0
; „«ï ¢ë§®¢  ä㭪権 ¡¨®á  ¨§ áâà ­¨æë 0 <20>‡“ (Extension)
RET_to_EXTENSION:
RET_TO_EXTENSION:
PUSH AF
LD A,ROM.EXTENSION
OUT (SYS_PORT.ROM),A
POP AF
RST ToBIOS_18
JP RET_to_EXTENSION
JP RET_TO_EXTENSION
; !TODO Free 6 bytes
;---------------------------------------
@ -1455,10 +1545,10 @@ RET_to_EXTENSION:
;
; [x] new portal
;------------[HDD_5x portal]------------
; â®çª  ¢å®¤ /¢ë室  ¤«ï ä㭪権 5å ¨§ EXP
;------------[Portal to EXT]------------
; â®çª  ¢å®¤ /¢ë室  ¤«ï ä㭪権 ¢ ROM.EXTENSION
_mInfoBLOCK #3FE8-$,#FF
EXP_HDD:
EXTENSION_FNs: ;EXP_HDD:
PUSH AF
LD A,ROM.EXTENSION
OUT (SYS_PORT.ROM),A

View File

@ -266,7 +266,7 @@ AP_COM: EXX
.NO_ERR:
;BIT IDE.ControlBit.DataRequest,A
AND IDE.ControlByte.DataRequest
;LD A,BIOS.Error.NoErrors
LD A,BIOS.Error.NoErrors
RET Z ;NO DATA REQUEST A = 0: BIOS.Error.NoErrors
EX DE,HL
LD BC,IDE.Read.CylinderLow

View File

@ -290,8 +290,8 @@ EMM.FreeMem: ; [x] free zx pages! ⥯
RET Z
;
LD C,A
CP ZX_RAM_ID ;!FIXIT ; [ ] free zx pages!
CALL Z,RES_FLAG_ZXvROM
;CP ZX_RAM_ID ;!FIXIT ; [ ] free zx pages!
;CALL Z,RES_FLAG_ZXvROM
;
IN A,(SLOT3)
EX AF,AF'

View File

@ -432,22 +432,4 @@ REINIT: DEC B
JR .loop2
;
;----------------------------------------------------------------------;
;
;
;----------------------------------------------------------------------;
; ­¥ ¤®«¦­® ¯®àâ¨âì DE
RES_FLAG_ZXvROM:
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'
LD A,Spec_Page
OUT (SLOT3),A
XOR A
LD (Spec_Page.flag_Z),A
LD (Spec_Page.flag_X),A
EX AF,AF'
OUT (SLOT3),A
RET
;----------------------------------------------------------------------;
;

View File

@ -1,544 +1,7 @@
;-------------------------------------------------------------------------------------------------------------------;
;!TODO ᤥ« âì ¢ë¡®à ¢ Setup, çâ® £à㧨âì ¢ v<>‡“ ¯à¨ áâ àâ¥. ‚ à¨ ­âë:
;[~] 0 - <20>¥ £à㧨âì <20>‡“ ᯥªâà㬠, ¨­¨â¨âì áâà ­¨æã #41 ª ª ¢ 3.04
;[~] 1 - ƒà㧨â <20>‡“ ᯥªâà㬠 ¨§ ROM ¯à¨ áâ à⥠¥á«¨ ­¥â ä« £  ZX
;[~] 2 - ƒà㧨â <20>‡“ ᯥªâà㬠 ¨§ ROM ¯à¨ ª ¦¤®¬ ¯¥à¥§ ¯ã᪥ (¬®¦¥â ¡ëâì ®¯ á­®)
;[ ] 3 - <20>¥ £à㧨âì <20>‡“ ᯥªâà㬠, ¨­¨â¨âì áâà ­¨æã #41 â ª, ç⮡ ª®¤ ¢ ­¥© ¯®¤£à㦠« <20>‡“ ᯥªâà㬠 ¯à¨ ®¡à é¥­¨¨
;-------------------------------------------------------------------------------------------------------------------;
; Spectrum RAM map
; SLOT0 = 0
; SLOT1 = 5
; SLOT2 = 2
; SLOT3 = 0 '48kb',1,2,3,4,5,6,7 '128kb',8,9,10,11,12,13,14,15 '256kb'
; ¤«ï ¢å®¤  ¢ ०¨¬ ᯥªâà㬠:
; 0. <20>஢¥àª  ¬¥âª¨ ZX
; 1. CONFIG_DE.CNF_PORT ’¨¯ â çª¨, ª ª ¨­¨â¨âì ¯ ¬ïâì, à §¬¥à އ“, âãà¡ 
; 2. CONFIG_DE.ZX_START áâà ­¨æ  vROM ¤«ï § ¯ã᪠
; 3. <20> áâனª¨ íªà ­  (INT, Sync)
; 4. ’®à¬®¦¥­¨¥ ¯ ¬ï⨠(port all mode)
; 5. Block_ID.vROM
; 6. Block_ID.vRAM
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
; [ ] free zx pages!
; ????? SYS_PAGE.SHARED_BUFFER_256b
;
; [ ] ‘âà ­¨æ  އ“ ¤«ï ᪮௠ ¢ SLOT0 ¤®«¦­  ᮢ¯ ¤ âì á ­ã«¥¢®© áâà ­¨æ¥© ¯®àâ  #7FFD
IF FREE_ZX_PAGES
MODULE MANAGE_ZX_PAGES
;!FIXIT
;----------------[‚뤥«¥­¨¥/®á¢®¡®¦¤¥­¨¥ áâà ­¨æ ᯥªâà㬠]-------------;
;¢å®¤: ॣ B: 0 - § à¥§¥à¢¨à®¢ ­®
; 1 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 48k. 3 áâà ­¨æë
; 2 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 128k. 2+6 áâà ­¨æë
; 3 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 512k. 2+30 áâà ­¨æë
; 4 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Scorpion 256k. 2+6+8 áâà ­¨æë
; 5..15 - § à¥§¥à¢¨à®¢ ­ë
;
; 16 - ¯®«ãç¨âì à ¬¡«®ª¨ ¨­¨æ¨ «¨§¨à®¢ ­­ëå vROM ¨ VRAM
; 17..31 - § à¥§¥à¢¨à®¢ ­ë
;
; 32 - § à¥§¥à¢¨à®¢ ­®
; 33 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Spectrum 48k ¨ ¨­¨â 2-å áâà ­¨æ vROM
; 34 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 128k ¨ ¨­¨â 3-å áâà ­¨æ vROM
; 35 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 512k ¨ ¨­¨â 3-å áâà ­¨æ vROM
; 36 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Scorpion 256k ¨ ¨­¨â 3-å áâà ­¨æ vROM
; 33..63 - § à¥§¥à¢¨à®¢ ­ë
;
; 64 - ®á¢®¡®¤¨âì à ¬¡«®ª¨ vROM ¨ vRAM
; 65..127 - § à¥§¥à¢¨à®¢ ­ë
;
; 128 - ¨­¨æ¨ «¨§¨à®¢ âì ᢮© ­ ¡®à áâà ­¨æ vROM
;
; ॣ HL: ¯à¨ ॣ B[7]=1  ¤à¥á áâà ­¨æ (11 èâ):
; byte1 - RAM block ID, byte2..11 - áâà ­¨æë ¤«ï vROM - ZXSlot: 1,2,3(=0),à áè¨à¥­­ ï
; ॣ A: ­®¬¥à ZX TASK ¯®ª  çâ® ¢á¥£¤  ­®«ì!!!
;¢ë室: CF = 0: HL - ­®¬¥à  à ¬¡«®ª®¢ ¤«ï ०¨¬®¢ 0..16. H=vRAM, L=vROM
; CF = 1: A - ­®¬¥à ®è¨¡ª¨
;
;¥á«¨ áâíª ­ å®¤¨âáï ¢ âà¥â쥬 á«®â¥, â® ¢ë§®¢ á ¢ëª«î祭­ë¬¨ ¯à¥à뢠­¨ï¬¨
FN_ENTRANCE: ;!TODO A - TASK NUMBER
AND A
LD A,BIOS.Error.NotSupported
SCF
RET Z
;
EXX
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
EXX
;
LD (SYS_PAGE.SP_SAVE),SP
LD SP,SYS_PAGE.SYS_SP
LD DE,.EXIT
PUSH DE
;-----------------------------------;
; Sub FN #8x
BIT 7,B
JR NZ,INIT_vROM ; B = 128
; Sub FN #4x
BIT 6,B
JR NZ,FREE_vMEMORY ; B = 64
; Sub FN #1x
JR NZ,GET_RAMBLOCK_IDs ; B = 16
; Sub FN #0x
DEC B
JR Z, ; B = 1
DEC B
JR Z, ; B = 2
DEC B
JR Z, ; B = 3
DEC B
JR Z, ; B = 4
;-----------------------------------;
LD A,BIOS.Error.InvalidSubFunction
SCF
RET
;
.EXIT: LD SP,(SYS_PAGE.SP_SAVE)
EXX
OUT (C),B
EXX
RET
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
; <20>¥ ¯®àâ¨âì DE
;‚室: A - TASK NUMBER
; GET_ZX_TASK_DATA:
; GET_ZX_TASK_DATA_OFFSET
; ADD A,_ZX_TASK_DATA
; LD C,A
; LD B,0
; LD IX,SYS_PAGE.ZX_TASK.CURRENT
; ADD IX,BC ; ¤ ­­ë¥ ­®¢®© § ¤ ç¨
; RET
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
FREE_vMEMORY: LD A,(SYS_PAGE.Block_ID.vROM)
CALL EMM.FreeMem
LD A,(SYS_PAGE.Block_ID.vRAM)
CALL EMM.FreeMem
;
LD HL,#FFFF
LD (SYS_PAGE.Block_ID.vROM),HL
;
JP RES_FLAG_ZXvROM
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;‚室: A - TASK NUMBER
;‚ë室: H - vRAM block ID
; L - vROM block ID
GET_RAMBLOCK_IDs:
LD HL,(SYS_PAGE.Block_IDs)
RET
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;‚室: HL - ¡ãä¥à áâà ­¨æ (SLOT1..SLOT2) ­  ª®â®àë¥ ¬ ¯¯¨¬ (¢á¥£¤  11 èâ.)
; <09>¥à¢ë© ¡ ©â ᯨ᪠ - RAM BLOCK ID. „ «¥¥ ª ª 㣮¤­® ­®¬¥à 
; áâà ­¨æ ¤«ï ª ¦¤®£® ⨯  áâà ­¨æë vROM. …᫨ ª ª ï-â® áâà ­¨æ 
; vROM ­¥ ¨á¯®«ì§ã¥âáï, â® áâ ¢¨âáï #FF
INIT_vROM: LD A,(SYS_PAGE.Block_ID.vROM)
CP (HL)
EX DE,HL
CALL NZ,EMM.FreeMem
EX DE,HL
;
LD A,(HL)
LD (SYS_PAGE.Block_ID.vROM),A
; ãáâ ­®¢ª  ¯®à⮢ ROM
LD DE,.PORTS
LD B,.PORTS.Size
.loop: PUSH BC
LD A,(HL)
INC HL
CP #FF
JR NZ,.not_Spec_Page
LD A,Spec_Page
.not_Spec_Page: LD B,A
LD A,(DE)
INC DE
PUSH DE
PUSH HL
CALL SET_PORTS
POP HL
POP DE
POP BC
DJNZ .loop
; ãáâ ­®¢ª  ¬¥âª¨ ZX ¥á«¨ à ¬¡«®ª ­¥ #FF
LD A,(SYS_PAGE.Block_ID.vROM)
INC A
RET Z
;
.set_ZX_flag: IN A,(SLOT3)
LD D,A
LD A,Spec_Page
OUT (SLOT3),A
;
LD HL,'XZ'
LD (Spec_Page.flag_Z),HL
;
LD A,D
OUT (SLOT3),A
RET
;
.PORTS: DB ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128
DB ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48
DB ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS
DB ACEX.vROM.EXPANSION ; ROM-ID - EXPANSION
DB ACEX.vROM.BIOS_1 ; ROM-ID - BIOS-1
DB ACEX.vROM.BIOS_2 ; ROM-ID - BIOS-2
DB ACEX.vROM.BASIC_128_2 ; BASIC 128 - 2
DB ACEX.vROM.BASIC_48_2 ; BASIC 48 - 2
DB ACEX.vROM.TR_DOS_2 ; TR-DOS - 2
DB ACEX.vROM.EXPANSION_2 ; BIOS (ZX_EXP) - 2
.PORTS.Size EQU $-.PORTS
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;‚•Ž„: HL - ᯨ᮪ áâà ­¨æ
; E - 0 = 128kb, 1 = 512kb
INIT_vRAM: XOR A
.set_1ffd: LD BC,#1FFD
OUT (C),A
; set 128
LD B,#7F
LD D,%0000'0000
CALL SET_7FFD
;
XOR A
OUT (C),A
BIT 3,E ; 128/512
RET Z
; set 128 + 384
;LD A,SYS_PORT.CNF_512
;OUT (SYS_PORT.ROM),A
;
LD D,%0100'0000
CALL SET_7FFD
LD D,%1000'0000
CALL SET_7FFD
LD D,%1100'0000
CALL SET_7FFD
;
XOR A
OUT (C),A
RET
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;‚•Ž„: HL - ᯨ᮪ áâà ­¨æ
; D - ­ ç «ì­®¥ §­ ç¥­¨¥ ¤«ï 7FFD
SET_7FFD: LD A,(HL)
OUT (C),D
OUT (SLOT3),A
INC HL
INC D
BIT 3,D ; ª®«¨ç¥á⢮ áâà ­¨æ
JR Z,SET_7FFD
RET
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
ZX_MEMORY:
.MODE_48k EQU 3
.MODE_128k EQU 3+5
.MODE_256k EQU 3+13
.MODE_512k EQU 3+29
;‚믮«­ï¥âáï ¤«ï ¢ë¤¥«¥­¨ï âàñå áâà ­¨æ އ“ 48k
GET_48k_MEM: LD D,ZX_MEMORY.MODE_48k
JR GET_XXX_MEM
;‚믮«­ï¥âáï ¤«ï ¨­¨â  3 áâà ­¨æ އ“ 48k ¨ 29 áâà ­¨æ އ“ Pent512k
GET_512k_MEM: LD D,ZX_MEMORY.MODE_512k
JR GET_XXX_MEM
;‚믮«­ï¥âáï ¤«ï ¢ë¤¥«¥­¨ï 3 áâà ­¨æ އ“ 48k ¨ 5 áâà ­¨æ އ“ 128k â ç¥ª
GET_128k_MEM: LD D,ZX_MEMORY.MODE_128k
;JR GET_XXX_MEM
GET_XXX_MEM: CALL FREE_vRAM
.init: LD B,D
CALL EMM.GetMem
RET C
LD (SYS_PAGE.Block_ID.vRAM),A
RET
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
FREE_vRAM: XOR A
LD C,A
OR (SYS_PAGE.Block_ID.vRAM)
RET Z
LD (SYS_PAGE.Block_ID.vRAM),C
JP EMM.FreeMem
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;‚믮«­ï¥âáï ¤«ï ¢ë¤¥«¥­¨ï 3 áâà ­¨æ އ“ 48k ¨ 14 áâà ­¨æ އ“ Scorp256k
;‚室: ---
;‚ë室: A - RAM block ID
GET_SCORP_RAM: CALL FREE_vRAM
; ¢ë¤¥«¨âì áâà ­¨æë ᪮௠
XOR A
LD DE,#F0D0 ; ¤«ï 䨫ìâà . #F0 - ¬ áª , #D0 - áâà ­¨æë ISA #D0..#DF
LD BC,256*ZX_MEMORY.MODE_256k/2 + #FF ; B - ª®«¨ç¥á⢮ áâà ­¨æ, C - Œ¥âª  ª®­æ  à ¬¡«®ª 
LD HL,SYS_PAGE.RAM_TABLE
.allocate_loop: DEC L
JR Z,.error_no_mem
CP (HL)
JR NZ,.allocate_loop
;
CALL .check_barred_pages
LD A,0
JR Z,.allocate_loop
;
LD (HL),C
LD C,L
DJNZ .allocate_loop
; L = 㪠§ â¥«ì 楯®çª¨.
AND A
LD D,L
; Get Pent128 mem
LD B,ZX_MEMORY.MODE_128k
CALL EMM.GetMem
; A - Pent128 mem block id
LD B,D ; Scorp128 mem block id
CALL EMM.MergeMemBlocks
LD (SYS_PAGE.Block_ID.vRAM),A
RET
;
; 䨫ìâà ¤«ï áâà ­¨æ ᪮௠
;¢ë室: ZF=1 - áâà ­¨æ  ­¥ ¯®¤å®¤¨â
.check_barred_pages:
; check reset page
LD A,L
CP RESET_PAGE
RET C
RET Z
; check isa page
AND D
XOR E ; áâà ­¨æë ISA #D0..#DF
RET NZ
LD L,E
RET
;
.error_no_mem: LD A,C
CALL EMM.FreeMem
LD A,BIOS.Error.EMM.NoMemory
SCF
RET
;-----------------------------------------------------------------------;
ENDMODULE
ENDIF
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
IF FREE_ZX_PAGES ;----------------------------------------------------[v]
;!TODO § ¤¥©á⢮¢ âì
; <20><EFBFBD>…„€œ: ­®¬¥à vROM, vRAM, CONFIG_DE, FN_SYNC, PORT_ALL_MODE, MEM_TYPE
; ‚室: B[3..0]: 0 - BASIC 128, 1 - BASIC 48, 2 - TR-DOS 128, ;!FIXIT ¯¥à¥¤¥« âì, íâ® CONFIG_DE
; 3 - EXPANSION. C § ªàëâ묨 128-¬¨ ¯®àâ ¬¨:
; 4 - TR-DOS, 5 - BASIC 48
; B[7..4]: ;!TODO Port All Mode: b4 - Acc off/on
; DE:
; A: TASK Number
; CF: 1 - ­¥ ¯¥à¥ãáâ ­ ¢«¨¢ âì ¯ «¨âàã
/*
; ‚室: D: 0 - BASIC 128, 1 - BASIC 48, 2 - TR-DOS 128,
; 3 - EXPANSION. C § ªàëâ묨 128-¬¨ ¯®àâ ¬¨:
; 4 - TR-DOS, 5 - BASIC 48
; E: §­ ç¥­¨¥ ¤«ï SYS_PORT/CNF_PORT
; H: ;!TODO Block_ID.vROM
; L: Block_ID.vRAM
; A: TASK Number = 0
; B: Port All Mode
;A'[1..0]: 1 - int scorp, 2 - int pent, 3 - int ZX
; A'[2]: 0 - set default palette, 1 - don't change palette
; A'[7]: 0 - 320, 1 - 312 áâப
*/
GOTO_SPEC: LD A,BIOS.Error.NotSupported
AND A
SCF
RET NZ
;
.FN: DI
EX AF,AF'
LD C,A
; set shared pages
XOR A
OUT (SLOT2),A ; ZERO_PAGE
DEC A
OUT (SLOT1),A ; SHARED_PAGE
;
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD (SYS_PAGE.CONFIG_DE),DE
LD (SYS_PAGE.Block_IDs),HL
;
EXX
LD SP,#C000
;
; [ ] free zx pages! ;!TODO ¥á«¨ § ¤ ç  ¯ãáâ ï, â® ¯¥à¢ë© ¨­¨â
;
;!TODO ᤥ« âì  ªâ¨¢ æ¨î ¢¨­â  ¤«ï ¯ à ¬¥âà  ¨§ Setup
;!TODO ãáâ ­®¢¨âì £¤¥-­¨¡ã¤ì ­¨¦¥ áâíª ¨§ TASK
; LD A,(IX + _ZX_TASK_DATA.PORT_ALL_MODE)
; LD BC,Port_All_Mode
; OUT (C),A
; ãáâ ­®¢ª  ¨­â 
EXX
LD A,C
EXX
AND %0000'0011
CALL FN_SYNC
; ãáâ ­®¢ª  à §¢ñà⪨
EXX
LD A,C
EXX
RLCA
AND %0000'0001
OR %1000'0110
CALL FN_SYNC
EXX
LD A,C
EXX
;
AND %0000'0100 ;!TODO § ¯®¬­¨âì/¢®ááâ ­®¢¨âì ª á⮬­ãî ¯ «¨âàã?
CALL Z,SET_TXT_PALETTE.ZX
;
LD E,0
CALL LP_SET_32
;
LD E,0
LD HL,#5104
CALL LP_SET_32.X
; .SHARED_BUFFER_256b
LD A,(SYS_PAGE.Block_ID.vRAM)
LD HL,SYS_PAGE.SHARED_BUFFER_256b
CALL EMM.GetMemBlkPages
;!FIXIT
;RET C
; !FIXIT ¯à®¢¥àª  à §¬¥à  ¡«®ª , ᤥ« âì, ç⮡ ¢ë¡¨à «áï ®¡êñ¬ ¯ ¬ïâ¨
;LD A,B
;CP 16
;
LD D,B
;.TASK_0: XOR A ; § ¤ ç  0, ०¨¬ 256 ª¨«®¡ ©â
.START_TASK: LD IY,.BASIC_128
JP INIT_PAGES ; ¨­¨æ¨ «¨§ æ¨ï ­®¬¥à®¢ áâà ­¨æ ०¨¬  ᯥªâà㬠
;
;start_basic:
.BASIC_128: LD SP,#C000
LD HL,RES128_PROG
LD DE,ZX_VARS.PRINTER_BUFFER ; § ¯ã᪠¯à®£à ¬¬ë ­  BASIC-¥.
LD BC,RES128_PROG.Size
LDIR
DI
JP ZX_VARS.PRINTER_BUFFER
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;*****************************************
;
; ˆ­¨æ¨ «¨§ æ¨ï áâà ­¨æ ¤«ï
; ᯥªâà㬮¢áª®£® ०¨¬  ¨
; ¢®ááâ ­®¢«¥­¨¥ ᯥªâà㬮¢áª®£®
; íªà ­ 
;
; ‚®§¢à â ¯® IX
;
; !!! NO USE STACK !!!
;
;*****************************************
;!TODO á⥪ ãáâ ­®¢«¥­ ¢® ¢â®à®© áâà ­¨æ¥, ­¥ ¨á¯®«ì§®¢ âì ¨«¨ ãáâ ­ ¢«¨¢ âì ¢ ¤àã£ãî!
; ¨­¨æ¨ «¨§ æ¨ï áâà ­¨æ zx spectrum
; HL -  ¤à¥á ¡«®ª  áâà ­¨æ ¢ SYS_PAGE SLOT3
; D - ª®«¨ç¥á⢮ íâ¨å áâà ­¨æ
INIT_PAGES: LD A,SYS_PAGE
OUT (SLOT1),A
LD A,SYS_PORT.TURBO.ON + SYS_PORT.CNF_0 + SYS_PORT.CNF_512
OUT (SYS_PORT.ROM),A
;
RES 7,H
;
LD A,D
CP ZX_MEMORY.MODE_48k
JR Z,.set_48k
;
LD E,0 ; pent128
CP ZX_MEMORY.MODE_256k
JR Z,.set_scorp
;
CP ZX_MEMORY.MODE_128k
JR Z,.set_pent
INC E
CP ZX_MEMORY.MODE_512k
JR Z,.set_pent
;!FIXIT ®¡à ¡®âª  ®è¨¡ª¨
DI
HALT
;
.set_scorp: CALL MANAGE_ZX_PAGES.INIT_vRAM
LD A,#10
CALL MANAGE_ZX_PAGES.INIT_vRAM.set_1ffd
; A = 0, BC = #7FFD
LD B,#1F
OUT (C),A
JR .set_table
;
.set_pent: CALL MANAGE_ZX_PAGES.INIT_vRAM
; ¬¥­ï¥¬ ¯®à冷ª ¤«ï ¯à®æ¥¤ãàë set_48k
.set_table: LD A,(SYS_PAGE.SHARED_BUFFER_256b+2 - #8000) ; SLOT2 page
LD D,A
LD A,(SYS_PAGE.SHARED_BUFFER_256b+5 - #8000) ; SLOT1 page
LD E,A
LD A,(SYS_PAGE.SHARED_BUFFER_256b+0 - #8000) ; SLOT0, SLOT3 page
JR .set_slots
;
.set_48k: LD A,(HL) ; SLOT0, SLOT3 page
INC HL
LD E,(HL) ; SLOT1 page
INC HL
LD D,(HL) ; SLOT2 page
;
.set_slots: OUT (SLOT0),A
OUT (SLOT3),A
LD A,E
OUT (SLOT1),A
LD A,D
OUT (SLOT2),A
;
XOR A
OUT (RGADR),A ; ॣ¨áâà ¢¨¤¥®  ¤à¥á 
OUT (RGMOD),A ; ॣ¨áâà ¬®¤ë
JP (IY)
;-----------------------------------------------------------------------;
ELSE ;--------------------------------------------------------------------[|]
IFN FREE_ZX_PAGES
;-----------------------------------------------------------------------;
;!TODO § ¤¥©á⢮¢ âì
GOTO_SPEC: IN A,(SLOT3)
@ -720,7 +183,6 @@ NO_SCREEN_ALT:
AND A
JP (IX)
;-----------------------------------------------------------------------;
ENDIF ;--------------------------------------------------------------------[^]
;
;>$< >$< >$< >$< >$< >$< [ <20><EFBFBD>…Œ…™€…Œ€Ÿ އ“ ] >$< >$< >$< >$< >$< >$< ;
@ -858,4 +320,5 @@ PROG_NO_ROM.size EQU $-PROG_NO_ROM
;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<;
;
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;
;
;
ENDIF ;--------------------------------------------------------------------[^]

View File

@ -145,7 +145,13 @@ NMI: RETN
;----------------------------[ FOR ZX-MODE ]----------------------------;
;!HARDCODE ­  íâ®â  ¤à¥á #0 ¯à룠¥â ¢ vROM Basic-48 ¯®  ¤à¥áã #3CF0
; ¬®¦­® ¯®¯à®¡®¢ âì ¯¥à¥¤¥« âì íâ®â  ¤à¥á â ¬
_mInfoBLOCK #C0-$,#FF ;!TEST 0
_mInfoBLOCK #C0-$,#FF
; ‚室 ç¥à¥§ USR 15600
RET_FROM_BIOS_TO_BASIC48:
CALL CH_2
CALL COMAND_LINE ; <E2809A>Ž<C5BD><EFBFBD>ˆ… ŠŽŒ€<C592>, …‘‹ˆ …‘’œ
; ‚室 ¡¥§ ª®¬ ­¤ë
JP SW_ROM_1 ; އ<E280A1> << MAIN MENU >>
INCLUDE 'ZX/ZX_FUNC.ASM'
INCLUDE 'ZX/ZX_MENU.ASM'
;-----------------------------------------------------------------------;
@ -360,8 +366,8 @@ BLOCK_Setup.Length EQU $-BLOCK_Setup
;---------------------------------------
;
;--------------[GOTO BIOS]--------------
; call BIOS from EXTENSION
_mInfoBLOCK #3FD0-$,#FF ; ToBIOS_FromEXT
_mInfoBLOCK #3FD0-$,#FF
;ToBIOS_FromEXT: call BIOS from EXTENSION
PUSH AF
LD A,ROM.BIOS ; set BIOS to slot0
OUT (SYS_PORT.ROM),A
@ -392,13 +398,15 @@ TRDOS_HD_CMD:
;---------------------------------------
;------------[HDD_5x portal]------------
; â®çª  ¢å®¤ /¢ë室  ¤«ï ä㭪権 ¨§ BIOS
;------------[Portal to EXT]------------
; â®çª  ¢å®¤ /¢ë室  ¤«ï ä㭪権 ¨§ BIOS
_mInfoBLOCK #3FE8-$,#FF
;RET_TO_EXP:
; PUSH AF
; LD A,ROM.BIOS
; OUT (SYS_PORT.ROM),A
RET_TO_BIOS: ;RET_TO_EXP:
PUSH AF
LD A,ROM.BIOS
OUT (SYS_PORT.ROM),A ; from BIOS EXTENSION_FNs
POP AF
RET
; JP HDD_FN_5x
;---------------------------------------

View File

@ -363,6 +363,7 @@ INT_ON:
;------------------------[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
@ -392,13 +393,22 @@ EXIT_SETUP: CALL INT_OFF
HALT
JR .loop_di
;
.set_ZX_params: LD L,A ; Block_ID.vRAM
======
.set_ZX_params: LD H,A ; Block_ID.vRAM
;!TODO ­ áâà ¨¢ âì ¢ BIOS zx mode
LD DE,256*0 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_0
LD A,(SYS_PAGE.Block_ID.vROM)
LD L,A
LD B,#FE ; !HARDCODE Port All Mode data
LD A,%0000'0010
EX AF,AF'
XOR A
;
JP GOTO_SPEC.FN
;POP HL ; <20>… ­ã¦¥­.  ¤à¥á ¢®§¢à â  ¢ EXP ¨§ SETUP
LD A,ROM.EXTENSION
OUT (SYS_PORT.ROM),A
XOR A
JP GOTO_SPECTRUM.FN
ELSE
;LD BC,#020E
;CALL GET_CMOS_VALUE
@ -407,7 +417,7 @@ EXIT_SETUP: CALL INT_OFF
;JR Z,XFLEX
;LD A,#EA ;SPECTRUM
;XFLEX:
LD A,ROM.BIOS
XOR A ;LD A,ROM.BIOS
OUT (SYS_PORT.ROM),A
POP HL ; ¯¨å ¥âáï ¢ EXP.ASM ¢ ¯à®æ¥¤ãà¥
JP (HL)
@ -418,6 +428,43 @@ EXIT_SETUP: CALL INT_OFF
;JMPHL EQU $+1
;JP #0000
ENDIF
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:
@ -523,7 +570,7 @@ START:
;CALL ZXCLS
;
CALL READING
CALL TCHEKSM
CALL TEST_CHECKSUM
CALL NZ,SETDEFX
;!TODO CMOS Disabled use of CONFIG_DE (#C13A) word
@ -591,7 +638,7 @@ SET_RESTART_ID:
PUSH AF
LD HL,RESTART_ID.str
LD DE,SYS_PAGE.RESTART_ID
LD BC,RSTID.size
LD BC,RESTART_ID.size
LDIR
LD HL,PowerOnDate ; !TODO ¨§¬¥­¨âì ¯®¤ áâàãªâãàã, ª®£¤  áâàãªâãà  ¯¥à¥¬¥­­ëå ¡ã¤¥â £®â®¢ 
CALL GETTIME
@ -1660,10 +1707,15 @@ ZXMODE_SETUP: IN A,(SLOT3)
LD R,A
;
; Load ZX ROM's
CALL MANAGE_ZX_PAGES.FREE_vMEMORY ;!FIXIT ­¥ â  áâà ­¨æ  ¢ SLOT3 ; [ ] free zx pages!
LD B,3 ; !HARDCODE zx-rom number of pages
LD A,ROM.EXTENSION
OUT (SYS_PORT.ROM),A
CALL MANAGE_ZX_PAGES.FREE_vMEMORY ;!FIXIT ­¥ â  áâà ­¨æ  ¢ SLOT3 ; [ ] free zx pages!
XOR A ;LD A,ROM.BIOS
OUT (SYS_PORT.ROM),A
;
LD B,3 ; !HARDCODE zx-rom number of pages
CALL EMM.GetMem
JR C,.init_41h ;!FIXIT ¯¥ç â âì ®è¨¡ªã ; [ ] free zx pages!
JR C,.init_41h ;!FIXIT ¯¥ç â âì ®è¨¡ªã ; [ ] free zx pages!
CALL init_zx_roms
IFN FREE_ZX_PAGES
; áâ ¢¨¬ ¬¥âªã ¥á«¨ ¯à®£à㧨«¨ <20>‡“ ᯥªâà㬠
@ -1688,7 +1740,13 @@ ZXMODE_SETUP: IN A,(SLOT3)
LD (HL),#FF
LDDR ; § ç¨é ¥¬
EX DE,HL
JP MANAGE_ZX_PAGES.INIT_vROM
;
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
RET
;
;--------------------[copy zx-roms to zx-pages]-----------------;
; SLOT0 - ROM 8, sys_port - on.
@ -1718,10 +1776,10 @@ init_zx_roms: DI
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,SYS_PORT.EXTENSION
OUT (SYS_PORT.ROM),A
INC A ; !HARDCODE LD A,2
LD BC,+(3*2)*256 + SLOT3 ; !HARDCODE B = (zx-rom number of pages)*2
LD HL,memBUFFER.Shared + 1

View File

@ -654,7 +654,7 @@ CHEKSUM:
DJNZ .loop
RET
TCHEKSM:
TEST_CHECKSUM:
CALL CHEKSUM
LD A,CMOS_CELL.CheckSum
CALL READCMS

View File

@ -1,15 +1,3 @@
; ‚室 ç¥à¥§ USR 15600
ASSERT $ = #C0, "Error with RET_FROM_BIOS_TO_BASIC48 address!!!"
RET_FROM_BIOS_TO_BASIC48:
CALL CH_2
CALL COMAND_LINE ; <E2809A>Ž<C5BD><EFBFBD>ˆ… ŠŽŒ€<C592>, …‘‹ˆ …‘’œ
; ‚室 ¡¥§ ª®¬ ­¤ë
JP SW_ROM_1 ; އ<E280A1> << MAIN MENU >>
;-----------------------------------------------------------------------;
;
;
;----------------------------[ ??????????? ]----------------------------;
; TURBO_OFF:
@ -254,4 +242,657 @@ CH_2: LD A,2
C_1601: ; OPEN CHANEL
CALL_48 #1601 ;!HARDCODE
RET
;
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
; MANAGE_ZX_PAGES
;-----------------------------------------------------------------------;
;-------------------------------------------------------------------------------------------------------------------;
;!TODO ᤥ« âì ¢ë¡®à ¢ Setup, çâ® £à㧨âì ¢ v<>‡“ ¯à¨ áâ àâ¥. ‚ à¨ ­âë:
;[~] 0 - <20>¥ £à㧨âì <20>‡“ ᯥªâà㬠, ¨­¨â¨âì áâà ­¨æã #41 ª ª ¢ 3.04
;[~] 1 - ƒà㧨â <20>‡“ ᯥªâà㬠 ¨§ ROM ¯à¨ áâ à⥠¥á«¨ ­¥â ä« £  ZX
;[~] 2 - ƒà㧨â <20>‡“ ᯥªâà㬠 ¨§ ROM ¯à¨ ª ¦¤®¬ ¯¥à¥§ ¯ã᪥ (¬®¦¥â ¡ëâì ®¯ á­®)
;[ ] 3 - <20>¥ £à㧨âì <20>‡“ ᯥªâà㬠, ¨­¨â¨âì áâà ­¨æã #41 â ª, ç⮡ ª®¤ ¢ ­¥© ¯®¤£à㦠« <20>‡“ ᯥªâà㬠 ¯à¨ ®¡à é¥­¨¨
;-------------------------------------------------------------------------------------------------------------------;
; Spectrum RAM map
; SLOT0 = 0
; SLOT1 = 5
; SLOT2 = 2
; SLOT3 = 0 '48kb',1,2,3,4,5,6,7 '128kb',8,9,10,11,12,13,14,15 '256kb'
; ¤«ï ¢å®¤  ¢ ०¨¬ ᯥªâà㬠:
; 0. <20>஢¥àª  ¬¥âª¨ ZX
; 1. CONFIG_DE.CNF_PORT ’¨¯ â çª¨, ª ª ¨­¨â¨âì ¯ ¬ïâì, à §¬¥à އ“, âãà¡ 
; 2. CONFIG_DE.ZX_START áâà ­¨æ  vROM ¤«ï § ¯ã᪠
; 3. <20> áâனª¨ íªà ­  (INT, Sync)
; 4. ’®à¬®¦¥­¨¥ ¯ ¬ï⨠(port all mode)
; 5. Block_ID.vROM
; 6. Block_ID.vRAM
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;
ZX_MEMORY:
.MODE_48k EQU 3
.MODE_128k EQU 3+5
.MODE_256k EQU 3+13
.MODE_512k EQU 3+29
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
; [ ] free zx pages!
; ????? SYS_PAGE.SHARED_BUFFER_256b
;
; [ ] ‘âà ­¨æ  އ“ ¤«ï ᪮௠ ¢ SLOT0 ¤®«¦­  ᮢ¯ ¤ âì á ­ã«¥¢®© áâà ­¨æ¥© ¯®àâ  #7FFD
IF FREE_ZX_PAGES
MODULE MANAGE_ZX_PAGES
;!FIXIT
;----------------[‚뤥«¥­¨¥/®á¢®¡®¦¤¥­¨¥ áâà ­¨æ ᯥªâà㬠]-------------;
;¢å®¤: ॣ B: 0 - § à¥§¥à¢¨à®¢ ­®
; 1 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 48k. 3 áâà ­¨æë
; 2 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 128k. 2+6 áâà ­¨æë
; 3 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 512k. 2+30 áâà ­¨æë
; 4 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Scorpion 256k. 2+6+8 áâà ­¨æë
; 5..15 - § à¥§¥à¢¨à®¢ ­ë
;
; 16 - ¯®«ãç¨âì à ¬¡«®ª¨ ¨­¨æ¨ «¨§¨à®¢ ­­ëå vROM ¨ VRAM
; 17..31 - § à¥§¥à¢¨à®¢ ­ë
;
; 32 - § à¥§¥à¢¨à®¢ ­®
; 33 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Spectrum 48k ¨ ¨­¨â 2-å áâà ­¨æ vROM
; 34 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 128k ¨ ¨­¨â 3-å áâà ­¨æ vROM
; 35 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Pentagon 512k ¨ ¨­¨â 3-å áâà ­¨æ vROM
; 36 - ¢ë¤¥«¥­¨¥ ¯ ¬ï⨠Scorpion 256k ¨ ¨­¨â 3-å áâà ­¨æ vROM
; 33..63 - § à¥§¥à¢¨à®¢ ­ë
;
; 64 - ®á¢®¡®¤¨âì à ¬¡«®ª¨ vROM ¨ vRAM
; 65..127 - § à¥§¥à¢¨à®¢ ­ë
;
; 128 - ¨­¨æ¨ «¨§¨à®¢ âì ᢮© ­ ¡®à áâà ­¨æ vROM
;
; ॣ HL: ¯à¨ ॣ B[7]=1  ¤à¥á áâà ­¨æ (11 èâ):
; byte1 - RAM block ID, byte2..11 - áâà ­¨æë ¤«ï vROM - ZXSlot: 1,2,3(=0),à áè¨à¥­­ ï
; ॣ A: ­®¬¥à ZX TASK ¯®ª  çâ® ¢á¥£¤  ­®«ì!!!
;¢ë室: CF = 0: HL - ­®¬¥à  à ¬¡«®ª®¢ ¤«ï ०¨¬®¢ 0..16. H=vRAM, L=vROM
; CF = 1: A - ­®¬¥à ®è¨¡ª¨
;
;¥á«¨ áâíª ­ å®¤¨âáï ¢ âà¥â쥬 á«®â¥, â® ¢ë§®¢ á ¢ëª«î祭­ë¬¨ ¯à¥à뢠­¨ï¬¨
FN_ENTRANCE: ;!TODO A - TASK NUMBER
AND A
LD A,BIOS.Error.NotSupported
SCF
RET Z
;
EXX
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
EXX
;
LD (SYS_PAGE.SP_SAVE),SP
LD SP,SYS_PAGE.SYS_SP
LD DE,.EXIT
PUSH DE
;-----------------------------------;
; Sub FN #8x
BIT 7,B
JR NZ,INIT_vROM ; B = 128
; Sub FN #4x
BIT 6,B
JR NZ,FREE_vMEMORY ; B = 64
; Sub FN #1x
JR NZ,GET_RAMBLOCK_IDs ; B = 16
; Sub FN #0x
; DEC B
; JR Z, ; B = 1
; DEC B
; JR Z, ; B = 2
; DEC B
; JR Z, ; B = 3
; DEC B
; JR Z, ; B = 4
;-----------------------------------;
LD A,BIOS.Error.InvalidSubFunction
SCF
RET
;
.EXIT: LD SP,(SYS_PAGE.SP_SAVE)
EXX
OUT (C),B
EXX
RET
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
; <20>¥ ¯®àâ¨âì DE
;‚室: A - TASK NUMBER
; GET_ZX_TASK_DATA:
; GET_ZX_TASK_DATA_OFFSET
; ADD A,_ZX_TASK_DATA
; LD C,A
; LD B,0
; LD IX,SYS_PAGE.ZX_TASK.CURRENT
; ADD IX,BC ; ¤ ­­ë¥ ­®¢®© § ¤ ç¨
; RET
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
FREE_vRAM: LD A,(SYS_PAGE.Block_ID.vRAM)
OR A
RET Z
XOR A
LD (SYS_PAGE.Block_ID.vRAM),A
LD C,BIOS.FreeMem
JP ToBIOS_FromEXT
;--------------;
FREE_vMEMORY: CALL FREE_vRAM
;JR FREE_vROM
;--------------;
FREE_vROM: LD A,(SYS_PAGE.Block_ID.vROM)
OR A
RET Z
XOR A
LD (SYS_PAGE.Block_ID.vROM),A
LD C,BIOS.FreeMem
RST_to_BIOS
;--------------;
RES_FLAG_ZXvROM: ; ­¥ ¤®«¦­® ¯®àâ¨âì DE
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'
LD A,Spec_Page
OUT (SLOT3),A
XOR A
LD (Spec_Page.flag_Z),A
LD (Spec_Page.flag_X),A
EX AF,AF'
OUT (SLOT3),A
RET
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;‚室: A - TASK NUMBER
;‚ë室: H - vRAM block ID
; L - vROM block ID
GET_RAMBLOCK_IDs:
LD HL,(SYS_PAGE.Block_IDs)
RET
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;‚室: HL - ¡ãä¥à áâà ­¨æ (SLOT1..SLOT2) ­  ª®â®àë¥ ¬ ¯¯¨¬ (¢á¥£¤  11 èâ.)
; <09>¥à¢ë© ¡ ©â ᯨ᪠ - RAM BLOCK ID. „ «¥¥ ª ª 㣮¤­® ­®¬¥à 
; áâà ­¨æ ¤«ï ª ¦¤®£® ⨯  áâà ­¨æë vROM. …᫨ ª ª ï-â® áâà ­¨æ 
; vROM ­¥ ¨á¯®«ì§ã¥âáï, â® áâ ¢¨âáï #FF
INIT_vROM: LD A,(HL)
OR A
SCF
RET Z
INC A
JR NZ,.free_pages
LD (HL),A
JR .set_vROM
;
.free_pages: LD A,(SYS_PAGE.Block_ID.vROM)
CP (HL)
EX DE,HL
LD C,BIOS.FreeMem
CALL NZ,ToBIOS_FromEXT
EX DE,HL
;
LD A,(HL)
.set_vROM: LD (SYS_PAGE.Block_ID.vROM),A
; ãáâ ­®¢ª  ¯®à⮢ ROM
LD DE,.PORTS
LD B,.PORTS.Size
.loop: PUSH BC
INC HL
LD A,(HL)
CP #FF
JR NZ,.not_Spec_Page
LD A,Spec_Page
.not_Spec_Page: LD B,A
LD A,(DE)
INC DE
PUSH DE
PUSH HL
LD C,BIOS.SET_PORTS
RST_to_BIOS
;CALL SET_PORTS
POP HL
POP DE
POP BC
DJNZ .loop
; ãáâ ­®¢ª  ¬¥âª¨ ZX ¥á«¨ à ¬¡«®ª ­¥ #FF
LD A,(SYS_PAGE.Block_ID.vROM)
OR A
RET Z
;
.set_ZX_flag: IN A,(SLOT3)
LD D,A
LD A,Spec_Page
OUT (SLOT3),A
;
LD HL,'XZ'
LD (Spec_Page.flag_Z),HL
;
LD A,D
OUT (SLOT3),A
RET
;
.PORTS: DB ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128
DB ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48
DB ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS
DB ACEX.vROM.EXPANSION ; ROM-ID - EXPANSION
DB ACEX.vROM.BIOS_1 ; ROM-ID - BIOS-1
DB ACEX.vROM.BIOS_2 ; ROM-ID - BIOS-2
DB ACEX.vROM.BASIC_128_2 ; BASIC 128 - 2
DB ACEX.vROM.BASIC_48_2 ; BASIC 48 - 2
DB ACEX.vROM.TR_DOS_2 ; TR-DOS - 2
DB ACEX.vROM.EXPANSION_2 ; BIOS (ZX_EXP) - 2
.PORTS.Size EQU $-.PORTS
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;‚•Ž„: HL - ᯨ᮪ áâà ­¨æ
; E - 0 = 128kb, 1 = 512kb
INIT_vRAM: XOR A
.set_1ffd: LD BC,#1FFD
OUT (C),A
; set 128
LD B,#7F
LD D,%0000'0000
CALL SET_7FFD
;
XOR A
OUT (C),A
BIT 3,E ; 128/512
RET Z
; set 128 + 384
;LD A,SYS_PORT.CNF_512
;OUT (SYS_PORT.ROM),A
;
LD D,%0100'0000
CALL SET_7FFD
LD D,%1000'0000
CALL SET_7FFD
LD D,%1100'0000
CALL SET_7FFD
;
XOR A
OUT (C),A
RET
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;‚•Ž„: HL - ᯨ᮪ áâà ­¨æ
; D - ­ ç «ì­®¥ §­ ç¥­¨¥ ¤«ï 7FFD
SET_7FFD: LD A,(HL)
OUT (C),D
OUT (SLOT3),A
INC HL
INC D
BIT 3,D ; ª®«¨ç¥á⢮ áâà ­¨æ
JR Z,SET_7FFD
RET
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;‚믮«­ï¥âáï ¤«ï ¢ë¤¥«¥­¨ï âàñå áâà ­¨æ އ“ 48k
GET_48k_MEM: LD D,ZX_MEMORY.MODE_48k
JR GET_XXX_MEM
;‚믮«­ï¥âáï ¤«ï ¨­¨â  3 áâà ­¨æ އ“ 48k ¨ 29 áâà ­¨æ އ“ Pent512k
GET_512k_MEM: LD D,ZX_MEMORY.MODE_512k
JR GET_XXX_MEM
;‚믮«­ï¥âáï ¤«ï ¢ë¤¥«¥­¨ï 3 áâà ­¨æ އ“ 48k ¨ 5 áâà ­¨æ އ“ 128k â ç¥ª
GET_128k_MEM: LD D,ZX_MEMORY.MODE_128k
;JR GET_XXX_MEM
GET_XXX_MEM: CALL FREE_vRAM
.init: LD B,D
LD C,BIOS.GetMem
RST_to_BIOS
;CALL EMM.GetMem
RET C
LD (SYS_PAGE.Block_ID.vRAM),A
RET
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;‚믮«­ï¥âáï ¤«ï ¢ë¤¥«¥­¨ï 3 áâà ­¨æ އ“ 48k ¨ 14 áâà ­¨æ އ“ Scorp256k
;‚室: ---
;‚ë室: A - RAM block ID
GET_SCORP_RAM: CALL FREE_vRAM
; ¢ë¤¥«¨âì áâà ­¨æë ᪮௠
XOR A
LD DE,#F0D0 ; ¤«ï 䨫ìâà . #F0 - ¬ áª , #D0 - áâà ­¨æë ISA #D0..#DF
LD BC,256*ZX_MEMORY.MODE_256k/2 + #FF ; B - ª®«¨ç¥á⢮ áâà ­¨æ, C - Œ¥âª  ª®­æ  à ¬¡«®ª 
LD HL,SYS_PAGE.RAM_TABLE
.allocate_loop: DEC L
JR Z,.error_no_mem
CP (HL)
JR NZ,.allocate_loop
;
CALL .check_barred_pages
LD A,0
JR Z,.allocate_loop
;
LD (HL),C
LD C,L
DJNZ .allocate_loop
; L = 㪠§ â¥«ì 楯®çª¨.
AND A
LD D,L
; Get Pent128 mem
LD B,ZX_MEMORY.MODE_128k
LD C,BIOS.GetMem
RST_to_BIOS
;CALL EMM.GetMem
; A - Pent128 mem block id
LD B,D ; Scorp128 mem block id
LD C,BIOS.MergeMemBlocks
RST_to_BIOS
;CALL EMM.MergeMemBlocks
LD (SYS_PAGE.Block_ID.vRAM),A
RET
;
; 䨫ìâà ¤«ï áâà ­¨æ ᪮௠
;¢ë室: ZF=1 - áâà ­¨æ  ­¥ ¯®¤å®¤¨â
.check_barred_pages:
; check reset page
LD A,L
CP RESET_PAGE
RET C
RET Z
; check isa page
AND D
XOR E ; áâà ­¨æë ISA #D0..#DF
RET NZ
LD L,E
RET
;
.error_no_mem: LD A,C
LD C,BIOS.FreeMem
RST_to_BIOS
;CALL EMM.FreeMem
LD A,BIOS.Error.EMM.NoMemory
SCF
RET
;-----------------------------------------------------------------------;
ENDMODULE
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°;
;!TODO § ¤¥©á⢮¢ âì
; <20><EFBFBD>…„€œ: ­®¬¥à vROM, vRAM, CONFIG_DE, FN_SYNC, PORT_ALL_MODE, MEM_TYPE
; ‚室: D: 0 - BASIC 128, 1 - BASIC 48, 2 - TR-DOS 128,
; 3 - EXPANSION. C § ªàëâ묨 128-¬¨ ¯®àâ ¬¨:
; 4 - TR-DOS, 5 - BASIC 48
; E: §­ ç¥­¨¥ ¤«ï SYS_PORT/CNF_PORT
; H: ;!TODO Block_ID.vROM
; L: Block_ID.vRAM
; A: TASK Number = 0
; B: Port All Mode
;A'[1..0]: 1 - int scorp, 2 - int pent, 3 - int ZX
; A'[2]: 0 - set default palette, 1 - don't change palette
; A'[7]: 0 - 320, 1 - 312 áâப
GOTO_SPECTRUM: LD A,BIOS.Error.NotSupported
AND A
SCF
RET NZ
;
.FN: DI
EX AF,AF'
LD C,A
; set shared pages
XOR A
OUT (SLOT2),A ; ZERO_PAGE
DEC A
OUT (SLOT1),A ; SHARED_PAGE
;
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD (SYS_PAGE.CONFIG_DE),DE
LD (SYS_PAGE.Block_IDs),HL ;!FIXIT ®á¢®¡®¤¨âì áâ àë¥ §­ ç¥­¨ï? ; [ ] free zx pages!
;
EXX
LD SP,#C000
;
; [ ] free zx pages! ;!TODO ¥á«¨ § ¤ ç  ¯ãáâ ï, â® ¯¥à¢ë© ¨­¨â
;
;!TODO ᤥ« âì  ªâ¨¢ æ¨î ¢¨­â  ¤«ï ¯ à ¬¥âà  ¨§ Setup
;!TODO ãáâ ­®¢¨âì £¤¥-­¨¡ã¤ì ­¨¦¥ áâíª ¨§ TASK
; LD A,(IX + _ZX_TASK_DATA.PORT_ALL_MODE)
; LD BC,Port_All_Mode
; OUT (C),A
; ãáâ ­®¢ª  ¨­â 
EXX
LD A,C
EXX
AND %0000'0011
LD C,BIOS.FN_SYNC
RST_to_BIOS
;CALL FN_SYNC
; ãáâ ­®¢ª  à §¢ñà⪨
EXX
LD A,C
EXX
RLCA
AND %0000'0001
OR %1000'0110
LD C,BIOS.FN_SYNC
RST_to_BIOS
;CALL FN_SYNC
EXX
LD A,C
EXX
;
AND %0000'0100 ;!TODO § ¯®¬­¨âì/¢®ááâ ­®¢¨âì ª á⮬­ãî ¯ «¨âàã?
LD BC,BIOS.SET_PAL_INIT.ZX
CALL Z,ToBIOS_FromEXT
;
LD E,0
LD BC,BIOS.LP_OPEN_S.ZX_32x24_Default
RST_to_BIOS
;CALL LP_SET_32
;
LD E,0
LD HL,#5104
LD BC,BIOS.LP_OPEN_S.ZX_32x24
RST_to_BIOS
;CALL LP_SET_32.X
; .SHARED_BUFFER_256b
LD A,(SYS_PAGE.Block_ID.vRAM)
LD HL,SYS_PAGE.SHARED_BUFFER_256b
LD C,BIOS.GetMemBlkPages
RST_to_BIOS
;CALL EMM.GetMemBlkPages
;!FIXIT
;RET C
; !FIXIT ¯à®¢¥àª  à §¬¥à  ¡«®ª , ᤥ« âì, ç⮡ ¢ë¡¨à «áï ®¡êñ¬ ¯ ¬ïâ¨
;LD A,B
;CP 16
;
LD D,B
;.TASK_0: XOR A ; § ¤ ç  0, ०¨¬ 256 ª¨«®¡ ©â
.START_TASK: LD IY,.BASIC_128
JP INIT_PAGES ; ¨­¨æ¨ «¨§ æ¨ï ­®¬¥à®¢ áâà ­¨æ ०¨¬  ᯥªâà㬠
;
;start_basic:
.BASIC_128: LD SP,#C000
LD HL,RES128_PROG
LD DE,ZX_VARS.PRINTER_BUFFER ; § ¯ã᪠¯à®£à ¬¬ë ­  BASIC-¥.
LD BC,RES128_PROG.Size
LDIR
DI
JP ZX_VARS.PRINTER_BUFFER
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
;*****************************************
;
; ˆ­¨æ¨ «¨§ æ¨ï áâà ­¨æ ¤«ï
; ᯥªâà㬮¢áª®£® ०¨¬  ¨
; ¢®ááâ ­®¢«¥­¨¥ ᯥªâà㬮¢áª®£®
; íªà ­ 
;
; ‚®§¢à â ¯® IY
;
; !!! NO USE STACK !!!
;
;*****************************************
;!TODO á⥪ ãáâ ­®¢«¥­ ¢® ¢â®à®© áâà ­¨æ¥, ­¥ ¨á¯®«ì§®¢ âì ¨«¨ ãáâ ­ ¢«¨¢ âì ¢ ¤àã£ãî!
; ¨­¨æ¨ «¨§ æ¨ï áâà ­¨æ zx spectrum
; HL -  ¤à¥á ¡«®ª  áâà ­¨æ ¢ SYS_PAGE SLOT3
; D - ª®«¨ç¥á⢮ íâ¨å áâà ­¨æ
INIT_PAGES: LD A,SYS_PAGE
OUT (SLOT1),A
LD A,SYS_PORT.TURBO.ON + SYS_PORT.CNF_0 + SYS_PORT.CNF_512
OUT (SYS_PORT.ROM),A
;
RES 7,H
;
LD A,D
CP ZX_MEMORY.MODE_48k
JR Z,.set_48k
;
LD E,0 ; pent128
CP ZX_MEMORY.MODE_256k
JR Z,.set_scorp
;
CP ZX_MEMORY.MODE_128k
JR Z,.set_pent
INC E
CP ZX_MEMORY.MODE_512k
JR Z,.set_pent
;!FIXIT ®¡à ¡®âª  ®è¨¡ª¨
DI
HALT
;
.set_scorp: CALL MANAGE_ZX_PAGES.INIT_vRAM
LD A,#10
CALL MANAGE_ZX_PAGES.INIT_vRAM.set_1ffd
; A = 0, BC = #7FFD
LD B,#1F
OUT (C),A
JR .set_table
;
.set_pent: CALL MANAGE_ZX_PAGES.INIT_vRAM
; ¬¥­ï¥¬ ¯®à冷ª ¤«ï ¯à®æ¥¤ãàë set_48k
.set_table: LD A,(SYS_PAGE.SHARED_BUFFER_256b+2 - #8000) ; SLOT2 page
LD D,A
LD A,(SYS_PAGE.SHARED_BUFFER_256b+5 - #8000) ; SLOT1 page
LD E,A
LD A,(SYS_PAGE.SHARED_BUFFER_256b+0 - #8000) ; SLOT0, SLOT3 page
JR .set_slots
;
.set_48k: LD A,(HL) ; SLOT0, SLOT3 page
INC HL
LD E,(HL) ; SLOT1 page
INC HL
LD D,(HL) ; SLOT2 page
;
.set_slots: OUT (SLOT0),A
OUT (SLOT3),A
LD A,E
OUT (SLOT1),A
LD A,D
OUT (SLOT2),A
;
XOR A
OUT (RGADR),A ; ॣ¨áâà ¢¨¤¥®  ¤à¥á 
OUT (RGMOD),A ; ॣ¨áâà ¬®¤ë
JP (IY)
;-----------------------------------------------------------------------;
;
;>$< >$< >$< >$< >$< >$< [ <20><EFBFBD>…Œ…™€…Œ€Ÿ އ“ ] >$< >$< >$< >$< >$< >$< ;
;--------[ <20>ணࠬ¬ , à §¬¥é ¥¬ ï á #5B00 ¤«ï § ¯ã᪠ Spectrum ]--------;
RES128_PROG:
DISP ZX_VARS.PRINTER_BUFFER ;#5B00
XOR A
OUT (SYS_PORT.RAM),A ; ‚®§¢à â ¢ 128k ROM
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (SLOT3),A
LD DE,(SYS_PAGE.CONFIG_DE)
OUT (C),B
;
EXX
LD A,B
EXX
LD BC,Port_All_Mode
OUT (C),A
;
XOR A
LD BC,#1FFD
OUT (C),A ; Scorp ¯®àâ
LD B,#7F
OUT (C),A ; 128 ¯®àâ
;
LD A,E ; ãáâ ­®¢ª  ª®­ä¨£ãà æ¨¨ ¨ ०¨¬  TURBO
OUT (SYS_PORT.RAM),A ; CONFIG_SET
;
INC D
DEC D
; 0 ‚•Ž„ BASIC-128
JP Z,0
; 1 ‚•Ž„ BASIC-48
LD A,#10
OUT (C),A
DEC D
JP Z,0
; 2 ‚•Ž„ TR-DOS
LD HL,0
PUSH HL
DEC D
JP Z,#3D29
; 3 ‚•Ž„ EXPANSION
;!TODO ¯®ª  ­¥ à ¡®â ¥â. Page #45, BIOS (ZX_EXP) #E0
XOR A
OUT (C),A
LD A,#02
LD B,#1F
OUT (C),A
DEC D
JP Z,0
;
XOR A
OUT (C),A
LD A,#30
LD B,#7F
OUT (C),A
;!TEST
LD A,CNF_PORT.PENT_RESET + CNF_PORT.SCORP_RESET
OUT (CNF_PORT.OFF),A
;
DEC D
; 4 ‚•Ž„ TR-DOS á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨
JP Z,#3D29
; 5 ‚•Ž„ BASIC-48 á § ªàëâ묨 128-¬¨ ¯®àâ ¬¨
JP 0
ENT
.Size EQU $-RES128_PROG
;-----------------------------------------------------------------------;
;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<;
;
; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ;
ENDIF

View File

@ -11,7 +11,7 @@ BETA_BUILD EQU 7 ;
DEFINE USE_E1_SCANCODE 0 ;
DEFINE RECOVERYmountTYPE 1 ; 1 - ¡ëáâàë© ­¥¬­®£® § å à¤ª®¦¥­ë© ¢ à¨ ­â. 2 - ¡®«¥¥ "¯à ¢¨«ì­ë©"
DEFINE RECOVERYrdChooseTYPE 1 ; 1 - RECOVERY £à㧨âáï ¢ ¤¨áª 15, 2 - ¨é¥âáï ᢮¡®¤­ë© à ¬¤¨áª, ¥á«¨ ­¥â, â® ¢ 15-ë©
DEFINE FREE_ZX_PAGES 0 ; 1 - ®á¢®¡®¤¨âì áâà ­¨æë ᯥªâà㬠 ;!TODO
DEFINE FREE_ZX_PAGES 1 ; 1 - ®á¢®¡®¤¨âì áâà ­¨æë ᯥªâà㬠 ;!TODO
;----[ ‡ ¤¥à¦ª  ¢ ª ¤à å ¯®á«¥ ®âà¨á®¢ª¨ «®£®â¨¯  (0 = 256) ]---;
DEFINE LOGO_DELAY_MIN 25 ;
DEFINE LOGO_DELAY_NORM 100 ;