пока не работает
This commit is contained in:
parent
42c3d40f86
commit
c7fd876f91
@ -1 +1 @@
|
||||
Subproject commit 7bb1538646ae7e8ba917d04b55e7396d74154df7
|
||||
Subproject commit 753caadb020b3d55971aced21723c84a72bf65df
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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'
|
||||
|
||||
@ -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
|
||||
;----------------------------------------------------------------------;
|
||||
;
|
||||
@ -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 ;--------------------------------------------------------------------[^]
|
||||
@ -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]------------
|
||||
; â®çª ¢å®¤ /¢ë室 ¤«ï äãªæ¨© 5å ¨§ 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
|
||||
;---------------------------------------
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -654,7 +654,7 @@ CHEKSUM:
|
||||
DJNZ .loop
|
||||
RET
|
||||
|
||||
TCHEKSM:
|
||||
TEST_CHECKSUM:
|
||||
CALL CHEKSUM
|
||||
LD A,CMOS_CELL.CheckSum
|
||||
CALL READCMS
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 ;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user